为什么无法在CentOS、Plesk 9.2.1和Tomcat 5.5上安装Solr 1.3.0?

3

好的,我刚刚通过客户的托管提供商为他设置了一台专用服务器。他们在那里安装了Plesk(版本9.2.1),这个专用服务器的一个限制是,如果我在控制面板之外(即使用SSH)执行任何任务,他们不保证对该软件组件提供支持。这没关系,因为我宁愿使用控制面板来完成这项任务,因为我只需要上传war文件来安装servlet。

然而,问题在于,在安装了最新版本的Solr(1.3.0)后,我在Plesk中得到了一个警告图标,并且它给出了一个模糊的错误信息,例如“应用程序的实际状态与从数据库检索的状态不符合”。

以下是日志条目:

Aug 17, 2009 11:16:15 PM org.apache.solr.servlet.SolrDispatchFilter init
INFO: SolrDispatchFilter.init()
Aug 17, 2009 11:16:15 PM org.apache.solr.core.SolrResourceLoader
locateInstanceDir
INFO: Using JNDI solr.home: /usr/share/solr
Aug 17, 2009 11:16:15 PM
org.apache.solr.core.CoreContainer$Initializer initialize
INFO: looking for solr.xml: /usr/share/solr/solr.xml
Aug 17, 2009 11:16:15 PM org.apache.solr.core.SolrResourceLoader <init>
INFO: Solr home set to '/usr/share/solr/'
Aug 17, 2009 11:16:15 PM org.apache.solr.core.SolrResourceLoader
createClassLoader
INFO: Reusing parent classloader
Aug 17, 2009 11:16:15 PM org.apache.solr.servlet.SolrDispatchFilter init
SEVERE: Could not start SOLR. Check solr/home property
java.lang.ExceptionInInitializerError
       at org.apache.solr.core.CoreContainer$Initializer.initialize(CoreContainer.java:117)
       at org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:69)
       at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:221)
       at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:302)
       at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:78)
       at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3635)
       at org.apache.catalina.core.StandardContext.start(StandardContext.java:4222)
       at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
       at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
       at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
       at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
       at org.apache.catalina.core.StandardService.start(StandardService.java:448)
       at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
       at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:616)
       at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
       at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: java.lang.RuntimeException: XPathFactory#newInstance()
failed to create an XPathFactory for the default object model:
http://java.sun.com/jaxp/xpath/dom with the
XPathFactoryConfigurationException:
javax.xml.xpath.XPathFactoryConfigurationException: No XPathFctory
implementation found for the object model:
http://java.sun.com/jaxp/xpath/dom
       at javax.xml.xpath.XPathFactory.newInstance(Unknown Source)
       at org.apache.solr.core.Config.<clinit>(Config.java:41)
       ... 20 more
Aug 17, 2009 11:16:15 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter SolrRequestFilter
java.lang.NoClassDefFoundError: Could not initialize class
org.apache.solr.core.SolrConfig
       at org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:76)
       at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:221)
       at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:302)
       at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:78)
       at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3635)
       at org.apache.catalina.core.StandardContext.start(StandardContext.java:4222)
       at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
       at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
       at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
       at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
       at org.apache.catalina.core.StandardService.start(StandardService.java:448)
       at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
       at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:616)
       at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
       at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Aug 17, 2009 11:16:15 PM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Aug 17, 2009 11:16:15 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/solr] startup failed due to previous errors

solr/home目录已经存在,为什么solr还在抱怨这个问题?

我不确定我理解你的问题... 你已经知道1.3.0是最新版本了。 - Mauricio Scheffer
2个回答

5

好的,这里是问题!事实证明,一些Tomcat发行版没有对Xalan的引用,这就是XPathFactory异常的来源。这种错误可能会误导,因为它将错误记录为solr/home属性未设置的问题。事实上,它已经被设置了。在启动solr时出现问题的情况下,十有八九是由于solr/home目录未设置。

以下是我为自己解决该问题的方法:我进入了/usr/share/tomcat5/shared/lib目录,并创建了一个符号链接到位于/usr/share/java目录中的xalan-j2.jar文件。重新启动Tomcat,Solr立即启动了!

其他一些提示: 编辑您正在上传的solr.war文件中的web.xml文件,解除其压缩,进行修改,然后重新压缩它。将目录设置为类似于/usr/share/solr的内容。这样,如果日志没有显示它正在使用该目录作为solr/home,则说明出现了问题。此外,请确保solr/home类似于以下内容:

/usr/share/solr/
/usr/share/solr/bin
/usr/share/solr/bin/rsyncd-stop
/usr/share/solr/bin/abo
/usr/share/solr/bin/scripts-util
/usr/share/solr/bin/snappuller-disable
/usr/share/solr/bin/backupcleaner
/usr/share/solr/bin/snapcleaner
/usr/share/solr/bin/rsyncd-disable
/usr/share/solr/bin/snapinstaller
/usr/share/solr/bin/commit
/usr/share/solr/bin/snappuller-enable
/usr/share/solr/bin/snappuller
/usr/share/solr/bin/backup
/usr/share/solr/bin/rsyncd-start
/usr/share/solr/bin/abc
/usr/share/solr/bin/rsyncd-enable
/usr/share/solr/bin/optimize
/usr/share/solr/bin/snapshooter
/usr/share/solr/bin/readercycle
/usr/share/solr/conf
/usr/share/solr/conf/schema.xml
/usr/share/solr/conf/solrconfig.xml
/usr/share/solr/conf/synonyms.txt
/usr/share/solr/conf/xslt
/usr/share/solr/conf/xslt/example_atom.xsl
/usr/share/solr/conf/xslt/luke.xsl
/usr/share/solr/conf/xslt/example_rss.xsl
/usr/share/solr/conf/xslt/example.xsl
/usr/share/solr/conf/elevate.xml
/usr/share/solr/conf/scripts.conf
/usr/share/solr/conf/protwords.txt
/usr/share/solr/conf/spellings.txt
/usr/share/solr/conf/admin-extra.html
/usr/share/solr/conf/stopwords.txt
/usr/share/solr/README.txt

用户组权限应该是tomcat:tomcat。如果solr能够正常启动,数据目录将会被创建。

希望这能为某些人节省大量时间。


-1
我相信 'solr/home 属性' 并不是指一个名为 'solr/home' 的目录,而是一个包含该目录路径的环境变量或系统属性。
快速的谷歌搜索结果 this page 显示该属性被设置为 Java 系统属性:"-Dsolr.solr.home=/my/custom/solr/home/dir/"。

1
是的,我理解了。当我提到solr/home时,我的意思是属性solr.solr.home,也称为solr/home。不要让斜杠把你搞糊涂了。请仔细阅读我的回答。结果发现这与未设置solr/home无关。显然,这个问题中有9次是由于未设置solr/home所致,因此SEVERE错误会导致误导。 - aarona

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接