我已经按照信息中心文档在Windows 2008上设置了所有Liberty和Oracle数据库上的Worklight。 (http://pic.dhe.ibm.com/infocenter/wrklight/v6r0m0/topic/com.ibm.worklight.help.doc/devref/t_transporting_apps_and_adapters.html - 将IBM Worklight应用程序部署到测试和生产环境中)
当我启动自由服务器时,我在浏览器上出现此错误
应用程序类'com.worklight.core.auth.impl.AuthenticationFilter.doFilter抛出异常:110' javax.servlet.ServletException:未初始化Worklight项目
at com.worklight.core.auth.impl.AuthenticationFilter.doFilter(AuthenticationFilter.java:110) 在com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194) 在[内部课程]
通过日志,它显示它没有启动,因为找不到HSQLDB驱动程序。
server.xml具有以下内容:
<application id="finance" name="finance" location="finance.war" type="war">
<classloader delegation="parentLast">
<commonLibrary>
<fileset dir="${shared.resource.dir}/worklight/lib" includes="worklight-jee-library.jar"/>
</commonLibrary>
</classloader>
</application>
<library id="worklight/OracleLib">
<fileset dir="${shared.resource.dir}/worklight/oracle" includes="*.jar"/>
</library>
<!-- Declare the IBM Worklight Console database. -->
<dataSource jndiName="worklight/jdbc/WorklightDS" transactional="false">
<jdbcDriver libraryRef="worklight/OracleLib"/>
<properties.oracle driverType="thin" URL="jdbc:oracle:thin:@localhost:1521:ORCLWL" user="WORKLIGHTDIS" password="WORKLIGHTDIS"/>
</dataSource>
我更进了一步,检查了WAR文件如何链接到数据库jndi条目。通过web.xml文件,我发现了这个:
<resource-ref>
<description>Worklight Server Database</description>
<res-ref-name>jdbc/WorklightDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
res-ref-name与server.xml中声明的名称略有不同。请记住,这些条目是由ant脚本创建的。这似乎与war文件包含的内容(由WL Studio创建)不一致。
无论如何,我试了一下,并将server.xml jndi条目更改为与web.xml条目(jdbc / WorklightDS)完全相同。当我重新启动自由服务器时它根本没有改变最终结果。错误消息和HSQL驱动程序事物一直显示在日志中。
这是例外
nested exception is java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.hsqldb.jdbcDriver not found in Worklight platform or project /finance
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
后来我发现如果我将server.xml中的元素更改为所有属性的worklight值,它就可以工作。多奇怪。
<application id="worklight" name="worklight" location="finance.war" type="war">
请非常感谢任何帮助,以帮助我理解和解决它。
答案 0 :(得分:1)
错误消息“ java.lang.RuntimeException:java.lang.ClassNotFoundException:在Worklight平台或项目中找不到类org.hsqldb.jdbcDriver ...... ”确实具有误导性。它应该更好地读取类似“ Worklight服务器无法启动,因为没有数据源绑定到资源引用:'jdbc / WorklightDS'。重新配置服务器将解决此问题。有关更多信息,请搜索”创建和在“IBM Worklight信息中心。”
中配置数据库错误消息的解释是,通过编写<application id="finance" name="finance" location="finance.war" type="war">
,您根据Deploying a web application to the Liberty profile上的WebSphere Liberty规则选择了上下文根/finance
。对于此上下文根,您需要编写
<dataSource jndiName="finance/jdbc/WorklightDS" transactional="false">
这类似于需要为Worklight声明JNDI环境条目的方式(参见here)。