MavenでのServlet 3.0の依存関係

FessではTomcat 7の環境を利用しているのだけど、依存関係をいじったら

java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletOutputStream

という感じで怒られるようになった…。たぶん、今まで微妙な依存関係でうまくいっていたのかもしれないけど、その辺を変更してしまったため、この問題が起きるようになってしまったのだと思う。ここにも依存関係の話題があるのだけど、今まではServlet API 3.0用に以下の感じで依存関係を記述していた。

javax
javaee-web-api
6.0
provided

これだとうまく行かないようなので、

javax.servlet
javax.servlet-api
3.0.1
provided

と書くことで良いみたい。というわけで、しばらくこれで様子を見てみよう。

HttpClient4でPreemptive Auth

FessではSolrのコンテキストに対してBASIC認証をかけているのだけど、Solr4ではSolrJがHttpClient4がデフォルトになり、HttpClient3のときのようにフラグだけでPreemptive Authの設定できない感じだ。SolrJ自体がそれに対応していれば良いのだけど、そうではないっぽい。まぁ、SolrJはHttpClient4を利用しているのでHttpRequestInterceptorでBASIC認証の情報をaddHeaderしてあげれば良いみたい。SolrLibのところにコードはおいてあります。別にSolrJじゃなくても使える気はするけど。

codelibsのsolrlib

Fessに入っていたSolrサーバーにアクセスするためのコードを抜き出して、solrlibとしてまとめました。FessではアクセスするSolrサーバーたちを複数まとめて扱えるようにしたり、リトライできるようにしたり、生死監視したりとかしているのだけど、その辺の機能です。まぁ、Fessから抜き出すことでFessと同じようなことがFess以外のJavaプロジェクトでしやすくなるかと思います。まぁ、solrjのSolrServerのインスタンスをラップしている感じですが、Solrを真面目に使うなら必要そうな機能な気はします。そんな感じで、codelibsで作っていきます。