Apache Solr
Apache Solr は デフォルトでJettyがサーブレットとしてついています。
Tomcatに変える人もいるようですが、Jettyもなかなか性能がいいようなので、
Jettyについて調べたことのメモです。
Jetty とは
Jetty は、100%Javaで開発されたJava Servletコンテナ/Webサーバである。WebSocketなどのプロトコルもサポートする。Jetty はオープンソースプロジェクトとして開発され、Apache 2.0 License でリリースされている。JBoss、Apache Geronimoといった他のプロジェクトでも利用されている。
単純で効率的な組み込みやすいWebサーバとなるよう意図して開発されている。サイズが小さいので、組み込み型 Java アプリケーションにWebサービスを提供するのに適している。
その一方で、Apache HadoopやGoogle App Engineといった大規模でスケーラビリティが重視されるサービスにおいても採用されている[2]。
2009年1月、WebtideはJettyのコアコンポーネントをcodehausからEclipse Foundationに移管することを発表した。
サーブレットの一種でTomcatと双璧をなしているらしい。GAEで採用されているのはびっくりした。
Hadoopもそうなんだね。それならSolrがJettyで動いてても不思議じゃない気がしてきた。
データソースの設定
JETTY_HOME/
+contexts/
| +testds.xml(※1)
+lib/
| +ext/(※2)
| +commons-dbcp-1.4.jar
| +commons-ppol-1.5.4.jar
| +postgresql-8.3-605.jdbc4.jar
|
+webapps/
+testds/(※3)
+WEB-INF/
+web.xml
※1: アプリケーションコンテキストの設定の中でデータソースに関する設定を記述します。
※2: データソースを利用するためのコネクションプールやJDBCドライバのjarファイルを置きます。
※3: web.xmlにresource-ref要素の設定を行います(これはTomcatなどの他のAPサーバと同じです)
上記のような構成になっている模様。
たしかにSolrもこんな感じになってた。
/solr-4.7.0/example の下は、
$ tree
.
├── README.txt
├── contexts
│ └── solr-jetty-context.xml ◀
├── etc
│ ├── create-solrtest.keystore.sh
│ ├── jetty.xml
│ ├── solrtest.keystore
│ └── webdefault.xml
├── example-DIH
├── example-schemaless
├── exampledocs
├── lib ◀
│ ├── ext
│ │ ├── jcl-over-slf4j-1.6.6.jar
│ │ ├── jul-to-slf4j-1.6.6.jar
│ │ ├── log4j-1.2.16.jar
│ │ ├── slf4j-api-1.6.6.jar
│ │ └── slf4j-log4j12-1.6.6.jar
│ ├── jetty-continuation-8.1.10.v20130312.jar
│ ├── jetty-deploy-8.1.10.v20130312.jar
│ ├── jetty-http-8.1.10.v20130312.jar
│ ├── jetty-io-8.1.10.v20130312.jar
│ ├── jetty-jmx-8.1.10.v20130312.jar
│ ├── jetty-security-8.1.10.v20130312.jar
│ ├── jetty-server-8.1.10.v20130312.jar
│ ├── jetty-servlet-8.1.10.v20130312.jar
│ ├── jetty-util-8.1.10.v20130312.jar
│ ├── jetty-webapp-8.1.10.v20130312.jar
│ ├── jetty-xml-8.1.10.v20130312.jar
│ └── servlet-api-3.0.jar
├── logs
├── multicore
├── resources
├── scripts
├── solr
├── solr-webapp
├── start.jar
└── webapps ◀
└── solr.war
こんな風になっており、上のJettyのデータ構造を参考にすると、
◀「黒矢印」をつけた部分が Jetty 用の設定だということがわかる。
コンテキスト
コンテキストパスが、/solr
実行warが、/webapps/solr.war
defaultsDescriptorが、/etc/webdefault.xml
tempDirectoryが、/solr-webapp
と書いてあるだけ。短い。
vim contexts/solr-jetty-context.xml
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath"><SystemProperty name="hostContext" default="/solr"/></Set>
<Set name="war"><SystemProperty name="jetty.home"/>/webapps/solr.war</Set>
<Set name="defaultsDescriptor"><SystemProperty name="jetty.home"/>/etc/webdefault.xml</Set>
<Set name="tempDirectory"><Property name="jetty.home" default="."/>/solr-webapp</Set>
</Configure>
war
ということでSolrをJettyで動かした時、warがメインで動いていることがわかった。
次はwarの中身について解説する。
参考リンク
http://ja.wikipedia.org/wiki/Jetty
http://ultimania.org/trac/yuna/wiki/java/Jetty