在LibertyProfile 8.5.5上启动SOLR 4.3.1时出现NullPointerException

时间:2013-07-15 08:54:38

标签: solr websphere-liberty

我正在尝试在Websphere Liberty Profile 8.5.5上启动SOLR 4.3.1。我将solr.war放入dropins文件夹,并将日志记录jar(log4j-1.2.16.jar,slf4j-api-1.6.6.jar,slf4j-log4j12-1.6.6.jar)添加为全局库。在启动solr期间,抛出以下异常:

java.lang.NullPointerException: 
at com.ibm.websphere.ras.TruncatableThrowable.getStackTrace(TruncatableThrowable.java:247)
at [internal classes]
at com.ibm.ws.logging.internal.impl.BaseTraceFormatter.formatMessage(BaseTraceFormatter.java:234)
at com.ibm.ws.logging.internal.impl.BaseTraceFormatter.formatMessage(BaseTraceFormatter.java:191)
at com.ibm.ws.logging.internal.impl.BaseTraceService.publishLogRecord(BaseTraceService.java:447)
at com.ibm.ws.logging.internal.impl.LoggerHandlerManager$BaseTrLoggerHandler.publish(LoggerHandlerManager.java:69)
at java.util.logging.Logger.log(Unknown Source)
at com.ibm.ws.logging.internal.WsLogger.log(WsLogger.java:158)
at com.ibm.ws.logging.internal.WsLogger.logp(WsLogger.java:354)
at com.ibm.ws.webcontainer.webapp.WebApp.logMessage(WebApp.java:2981)
at [internal classes]
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:165)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:155)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194)
at [internal classes]

是否有人在Websphere Liberty上成功使用SOLR?

3 个答案:

答案 0 :(得分:0)

看起来有些东西正在尝试记录一个具有Throwable类型参数的消息,但是Throwable对象已经重写了getStackTrace()以返回null。看看messages.log的内容会很有用 - 它应该显示一个未处理的日志,包括Throwable参数是什么类。

作为一种解决方法,禁用控制台日志记录可以防止出现此问题:

<logging consoleLogLevel="OFF"/>

messages.log文件中仍将提供完整日志。一旦你从Liberty中阻止了这个堆栈跟踪,你就需要使用messages.log文件来识别Solr中抛出的异常,并弄清楚如何解决这个根本原因。

答案 1 :(得分:0)

我在Liberty(8.5.5之前的版本)上成功运行solr:

a)我在apps目录中提取了war文件,而不是把它放在dropins中,例如serverDir/apps/solr.war

b)我在server.xml中定义了应用程序:

<application id="solr" location="solr.war" />

c)我启用了jsp和jndi功能:

<featureManager>
    <feature>jsp-2.2</feature>
    <feature>jndi-1.0</feature>
</featureManager>

d)我没有做任何事情来添加我记得的slf4j罐子。我绝对没有创建或定义任何全局库。我的WEB-INF / lib包含:

./WEB-INF/lib/slf4j-jdk14-1.6.1.jar
./WEB-INF/lib/jcl-over-slf4j-1.6.1.jar
./WEB-INF/lib/log4j-over-slf4j-1.6.1.jar
./WEB-INF/lib/slf4j-api-1.6.1.jar

我搞砸了过滤器和东西,而且它没有问题。正如霍莉所说,这里有一个潜在的原因,你必须要发现,她的解决方法将允许你这样做。

答案 2 :(得分:0)

我刚刚在Liberty中运行了SOLR 4.9.0。 我必须做的一些步骤: 1.将solr.war从\ example \ webapps提取到Liberty服务器应用程序目录为solr.war 2.修改了server.xml

<application id="solr" location="solr.war" />

<featureManager>
    <feature>jsp-2.2</feature>
    <feature>jndi-1.0</feature>
</featureManager>
  1. 按照说明下载http://www.slf4j.org/dist/slf4j-1.6.6.zip以禁用https://wiki.apache.org/solr/SolrLogging的日志记录 将.jar复制到web-inf目录

    ./ WEB-INF / LIB / SLF4J-jdk14-1.6.1.jar ./WEB-INF/lib/jcl-over-slf4j-1.6.1.jar ./WEB-INF/lib/log4j-over-slf4j-1.6.1.jar ./WEB-INF/lib/slf4j-api-1.6.1.jar

  2. 将默认端口从9080更改为8983,以便更轻松地使用加载示例

  3. 我也在运行Java 8并使用eclipse来控制我的Liberty配置文件