この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

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というのを使えばいいということが判明したのですが、 グ…

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

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

POIで『縮小して全体を表示する』を設定する

POIで、『縮小して全体を表示する』ができなくて悩んでました。 POIのソースコードを調べてみたところ、HSSFCellStyleの内部表現であるExtendedFormatRecordに public void setShrinkToFit(boolean); というメソッドがあるのを発見。 ExtendedFormatRecordは…

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

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

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

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