有关[Apache Solr] Jetty的事项

Apache Solr can be paraphrased in Chinese as “阿帕奇Solr”.

Apache Solr 在默认情况下集成了Jetty作为其Servlet容器。
虽然有些人选择将其替换为Tomcat,但据说Jetty的性能也非常不错,
以下是关于Jetty的一些研究笔记。

“Jetty是什么”

Jetty是一种使用100%Java开发的Java Servlet容器/ Web服务器。它还支持WebSocket等协议。Jetty作为一个开源项目进行开发,并以Apache 2.0许可证发布。它也被其他项目如JBoss和Apache Geronimo所使用。

Jetty的开发旨在使其成为一个简单高效且易于嵌入的Web服务器。由于其体积较小,适合为嵌入式Java应用程序提供Web服务。

另一方面,在大规模且注重可扩展性的服务如Apache Hadoop和Google App Engine中,也采用了Jetty。

2009年1月,Webtide宣布将Jetty的核心组件从codehaus转移到Eclipse Foundation。

听说它是一种Servlet并与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等其他应用程序服务器相同)。

看起来是按照以上的结构组成的。固然,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。
简洁明了。

打开位于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>

战争

我发现当在Jetty上运行Solr时,war文件是主要运行的。

接下来将解释关于“战争”的内容。

请参考以下链接

以下是关于Jetty的链接:
1. http://ja.wikipedia.org/wiki/Jetty
2. http://ultimania.org/trac/yuna/wiki/java/Jetty