(注:このブログはもう更新していません)この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

[クラウド帳票エンジンDocurain]

Java

MariaDB Connector/Jの1.3.0以降でTIME型カラムの値が00:00のときにNULLになるバグ?

タイトルの通りです。 昨日はBOOLEAN型に関するバグを見つけましたが、今度はTIME型です。 00:00の値のときだけNULLになります。 原因はわかっていませんが、軽くデバッガで見てみたところ、当該カラムの値はサーバからのレスポンスがゼロバイト配列になって…

MariaDB Connector/Jの1.3.0以降でBOOLEANのカラムが常にtrueになるバグ?

ちょっと前にConnector/Jが1.3.0にアップデートされたのですが、とたんにTINYINT(1)のカラムの値を正しく取得できなくなりました。 MySQLはBOOLEANをTINYINT(1)の別名として扱います。アプリケーションから見たらこのカラムはBoolean型です。 で、Connector/…

SpringとGroovyにも直列化オブジェクト脆弱性

昨日の記事の続きです。 昨日はcommons-collectionsについて、どのような仕組みで攻撃が成功しうるかを書きました。 しかしこの問題はcommons-collections限定ではなく、GroovyまたはSpringFrameworkのクラスをロードしている環境でも起こりえます。 攻撃が…

commons-collectionsのInvokerTransformer脆弱性について

2015-11-12 追記あり。「SpringとGroovyにも直列化オブジェクト脆弱性」も参照してください。 昨日からJava界隈で話題になっているcommons-collectionsの脆弱性について。 元ネタはこちら。 対応するチケットはこちら。 InvokerTransformerなんてクラスは初…

HikariCP-2.2.5とJavassist-3.19.0の組み合わせでVerifyError、そして初のPR

Maven CentralにJavassist-3.19.0が登録されていたので、早速試してみたところ、この有り様。 Caused by: java.lang.VerifyError: Illegal type at constant pool entry 417 in class com.zaxxer.hikari.proxy.PreparedStatementJavassistProxy Exception De…

UseStringDeduplicationの効果を計測する

javacのバグのせいでずっとJDK1.8.0_20以降へ乗り換え出来ずにいたわけですが、 (参考: http://takahashikzn.hatenablog.com/entry/2014/10/15/204657 ) とうとう諦めて、このバグを回避するようソースを全面的を書き換えることにしました。 書き換えた内容…

ドッペルゲンガー?

言葉は違えども、考えていることは全く同じ。 何のことかというと、これ。http://www.infoq.com/news/2014/11/lang-ext-csharp-functional-exts http://github.com/louthy/language-ext このライブラリ、僕が作ったIndolentlyにソックリなんです。 関数名も…

CheckStyleがJava8に対応

CheckStyle-5.9がリリースされています。リリースノートはこちら。http://checkstyle.sourceforge.net/releasenotes.html 5.9での最大の変更点は、このバージョンからJava8の文法に対応したことです。 早速、ラムダ式だらけのソースに対してチェックを試して…

Java8u25がリリースされるもコンパイラのバグは解消されず

Java8u25がリリースされています。が…!!!以前書いたコンパイラのバグ*1は依然として解消されず。 バグパレードを検索したら、まさに同じ問題が登録済みでした。コレ。 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8056984 Java8u20から導入された…

Java8u20で文字列のメモリ効率が向上

以前、こんな記事(と言ってもほとんど意訳だけ)を書きました。 実はStringはメモリリークの原因だった(※1.7.0_06未満) 上記記事の要約は、 Java7u06より前のバージョンでは、String.substringなどで文字列を切り出す際に元の文字列の内部表現であるchar配列…

JDK8u20のコンパイラのバグにぶち当たる

いつの間にかJDK8u20がリリースされていたので更新しました。すると、 コンパイラで例外が発生しました(1.8.0_20)。Bug Paradeで重複がないかをご確認のうえ、Java Developer Connection (http://java.sun.com/webapps/bugreport)でbugの登録をお願いいたし…

CheckStyleがJava8の構文に非対応→8月末までに対応予定

http://github.com/checkstyle/checkstyle/issues/10 みんなが「無いとムリ!!死ぬ!!」と、一斉唱和したおかげで、作者の方も最優先で対応することを決めた模様です。

Tomcat8 正式リリース!

長いベータ版の期間を経て、とうとうTomcat8がリリースされました。 僕は既にTomcat8のベータ版を業務で使っていましたが、 商用環境で数ヶ月間の連続運用を行っている現在、大きな問題は出ていません。 横着したでござるの巻 ところで一つ、解せないことが…

caseがStringなswitch文はmapで実装されている?

http://java-performance.info/string-switch-performance/こちらより。 最後のまとめだけ書くと、 Summary String switch in Java 7 is implemented using a fixed size map with a number of slots close to 20. This means that you can freely use it in…

CheckStyle-all.jarをビルドする方法

CheckStyleがlambdaの構文に対応していないので、最新版をソースからビルドしてみることに。 antもEclipseのプラグインも、checkstyle本体だけでなく依存ライブラリも含めた全部入りのJarを要求するため、 単にmvn installではダメです。checkstyle本体のJar…

closure-compiler-20140407でVMBridgeのエラー

僕は強力にタイプチェックのかかる環境で開発するのが好きです。 Javaではできるだけキャストを排除するのは当然として、JSを書くときもclosure-compilerのアノテーションでタイプセーフに書くようにしています。 詳しくはこちら。 http://developers.google…

MariaDBのJDBCドライバがmaven repoへ登録完了

ウチもそろそろMariaDBへ乗り換えを始めているのですが、 JDBCドライバがmaven repoに未登録だったことに若干の不便を感じておりました。でも、それももう過去の話。https://mariadb.atlassian.net/browse/CONJ-3 http://search.maven.org/#search%7Cga%7C1%…

finalなフィールドの値をUnsafeで無理やり書き換える

[2014-03-25追記] インスタンスフィールドなら、finalであってもリフレクションで変更できました。 以下の話は、static finalなフィールド限定です。 昔はどうだったか知りませんが、少なくともJava7ではリフレクションを駆使してもstatic finalフィールドの…

Spring4.0.0のStackOverFlowは4.0.1で解消

先日の日記で書いた、Spring-4.0.0でStackOverFlowが出る件ですが、 早速FIXされた模様です。 っていうか、リリースされて数時間後に早速、バグチケット切られとるやん。。。 うーむ、そんなニッチな使い方してたっけ、僕? spring-4.0.1のリリースはよ。 ht…

実はStringはメモリリークの原因だった(※1.7.0_06未満)

InfoQから。http://www.infoq.com/news/2013/12/Oracle-Tunes-Java-String Stringのような基本型に大きな仕様変更が入ることは稀ですが、 1.7.0_06でアグレッシブな変更が入ったらしいです。 以下、適当和訳。 In an ongoing effort to improve Java perform…

Spring4.0.0が出た

…しかしStackOverflowで動かなかった!!(ドラクエ風に) ... at org.springframework.core.ResolvableType.hashCode(ResolvableType.java:693) ~[spring-core-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.util.ObjectUtils.nullSafeHashCode(…

Tomcat8.0.0がやたら遅い件

Tomcat8もそろそろリリースですね。いまRC5です。 後になって泣きを見ないよう、アプリを乗っけて動作試験を始めたところなのですが… とにかく動作が遅い。とても常用には耐えない感じです。 レスポンスが30秒間返ってこないとか、ザラ。 一体何が起きている…

POIのXmlValueDisconnectedExceptionを解消する

XmlValueDisconnectedException。 POIでOOXMLを使う際、避けては通れない関門のようです。 僕の環境でも、いつの間にか発生するようになってしまいました。 単にCell#getCellStyle()を呼んでいるだけなのに発生する始末。というわけで、半日かけて原因調査で…

Struts1.xがEOL

2014-04-23追記 昨今の状況を鑑みるに、新規案件でのStruts2の採用は余りお勧めできないと言わざるを得ません。 僕はStruts2およびOGNLのソースコードを実際に読み込んだ上で、自分で危険と判断したところは独自でパッチを当てているため、報告されているよ…

Rhinoの最適化レベル毎の違いを正確に理解する

※Rhinoのバージョンは1.7R4です。 ウチの製品であるMOD99は、いくつかの箇所で式言語としてJavascriptを採用しています。 例えば帳票生成において、サーバーサイドで計算しなければならない導出値(代表例: 何らかの集約値)を出力したいときなど。 帳票をダウ…

HttpSessionActivationListenerの使い方

HttpSessionが永続化ならびに活性化されるイベントを拾いたくなりました。 具体的には、HttpSessionに入れた値の幾つかを、永続化時に削除したいという要求です。 で、HttpSessionActivationListenerというのを使えばいいということが判明したのですが、 グ…

デバッグモードで起動したことを検知する

デバッガーを使う場合は、デバッグモードで起動します。コレ当たり前。 で、デバッグモードで起動したかどうかで、アプリの振る舞いを変えたい場合があります。 例えば、処理のタイムアウトをやめる等。デバッグモードだとありとあらゆるモノが遅くなるから…

ExcelのテンプレートをVelocityで記述

ウチの製品であるMOD99に、Excel帳票出力の機能を付けることになりました。 (これまではCSV+VBAで乗り切っていた) 今更かよって?ハイ、今更です。 サボってました。スイマセン。 コレまでずっと避けていたPOIをとうとう使うはめに… で、実際使ってみると…

ICU4Jがいきなり45バージョンも進んだ

なんと4.8.1から49.1へスーパー進化!! …と言うと機能がすごく増えたように見えますが、 最近流行りのラピッドリリースを採用した模様です。 最初見た時、ドットを付け忘れたのかと思ったよw ナンバリングについては詳しくはこちら。 http://userguide.icu…

JavaMailでマルチバイト添付ファイル名

久しぶりにJavaMailをゴニョゴニョやってますが、 近頃は添付ファイルのファイル名がマルチバイトでも苦労しないで済むんですねぇ。単に、 static { System.setProperty("mail.mime.encodefilename", "true"); System.setProperty("mail.mime.charset", "UTF…