IBM Worklight 6.0 - 如何绑定数据源?
Posted
技术标签:
【中文标题】IBM Worklight 6.0 - 如何绑定数据源?【英文标题】:IBM Worklight 6.0 - How to bind the datasources? 【发布时间】:2013-08-19 14:10:01 【问题描述】:在将自定义战争部署到 WebSphere Liberty 配置文件时,出现以下异常:
找不到类 org.hsqldb.jdbcDriver
我已经通过以下方式创建和配置了数据库:
http://pic.dhe.ibm.com/infocenter/wrklight/v6r0m0/index.jsp?topic=%2Fcom.ibm.worklight.help.doc%2Fadmin%2Ft_configuring_liberty_profile_for_derby_manually.html
并通过以下方式编辑 server.xml 文件:
http://pic.dhe.ibm.com/infocenter/wrklight/v6r0m0/index.jsp?topic=%2Fcom.ibm.worklight.help.doc%2Fadmin%2Ft_configuring_liberty_profile_manually.html
在生成的自定义战争的 web.xml 中,数据源的资源引用具有以下值:
<res-ref-name>jdbc/WorklightDS</res-ref-name>
<res-ref-name>jdbc/WorklightReportsDS</res-ref-name>
但是在服务器 xml 中定义的数据源还有这些其他的:
<dataSource jndiName="worklight/jdbc/WorklightDS" transactional="false" statementCacheSize="10">
<dataSource jndiName="worklight/jdbc/WorklightReportsDS" transactional="false" statementCacheSize="10">
无论如何,我尝试更改数据源 jndi 并得到相同的异常。
我还尝试将属性 wl.db.jndi.name 和 wl.reports.db.jndi.name 添加到 worklight.properties 文件,但没有成功。我想这些属性在 WL6.0 中不再有效。
还尝试将文件 ibm-web-bnd.xml 添加到生成的战争中。
我猜这个问题与应用程序和 Liberty 配置文件数据源之间的绑定有关。
我能够部署自定义战争的唯一方法是在 workligh.properties 文件中设置 Derby 数据库。
wl.db.url=jdbc:derby:C:/WebSphere/Worklight60DBs/WRKLGHT;create=true
wl.reports.db.url=jdbc:derby:C:/WebSphere/Worklight60DBs/WLREPORT;create=true
wl.db.username=WORKLIGHT
对于错误,这是我的 server.xml:
<featureManager>
<feature>jsp-2.2</feature>
<feature>ssl-1.0</feature>
<feature>servlet-3.0</feature>
<feature>jdbc-4.0</feature>
<feature>appSecurity-1.0</feature>
<feature>jndi-1.0</feature>
</featureManager>
<application id="CaixaProject" name="CaixaProject" location="CaixaProject.war" type="war">
<classloader delegation="parentLast">
<commonLibrary>
<fileset dir="$shared.resource.dir/lib" includes="worklight-jee-library.jar"/>
</commonLibrary>
</classloader>
</application>
<webContainer invokeFlushAfterService="false"/>
<library id="DerbyLib">
<fileset dir="$shared.resource.dir/derby" includes="derby.jar"/>
</library>
<dataSource jndiName="jdbc/WorklightDS" transactional="false" statementCacheSize="10">
<jdbcDriver libraryRef="DerbyLib" javax.sql.ConnectionPoolDataSource="org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource"/>
<properties.derby.embedded databaseName="C:/WebSphere/Worklight60DBs/WRKLGHT" user="WORKLIGHT" shutdownDatabase="false" connectionAttributes="upgrade=true"/>
<connectionManager connectionTimeout="180" maxPoolSize="10" minPoolSize="1" reapTime="180" maxIdleTime="1800" agedTimeout="7200" purgePolicy="EntirePool" />
</dataSource>
<dataSource jndiName="jdbc/WorklightReportsDS" transactional="false" statementCacheSize="10">
<jdbcDriver libraryRef="DerbyLib" javax.sql.ConnectionPoolDataSource="org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource"/>
<properties.derby.embedded databaseName="C:/WebSphere/Worklight60DBs/WLREPORT" user="WORKLIGHT" shutdownDatabase="false" connectionAttributes="upgrade=true"/>
<connectionManager connectionTimeout="180" maxPoolSize="10" minPoolSize="1" reapTime="180" maxIdleTime="1800" agedTimeout="7200" purgePolicy="EntirePool" />
</dataSource>
以及我在 worklight.properties 文件中修改的唯一属性:
publicWorkLightHostname
publicWorkLightProtocol
publicWorkLightPort
如何使用数据源将自定义战争部署到 Liberty 配置文件?
谢谢。
【问题讨论】:
【参考方案1】:是一个误导性消息。和jndi配置有关。
您的 jndi 引用应在名称中包含 CaixaProject 像这样在 server.xml 中
<dataSource jndiName="CaixaProject/jdbc/WorklightDS"
<dataSource jndiName="CaixaProject/jdbc/WorklightReportsDS"
web.xml里面应该是这样的
<res-ref-name>CaixaProject/jdbc/WorklightDS</res-ref-name>
<res-ref-name>CaixaProject/jdbc/WorklightReportsDS</res-ref-name>
为你推荐Worklight 6.0 does not start on Liberty - HSQLDB
【讨论】:
你不应该接触 web.xml 嗨。我可以使用 dataSource jndiName 中的应用程序 ID 使其工作。 (CaixaProject/jdbc/WorklightDS) 并且不修改 web.xml。再多说一句,我遇到的另一个副作用是我下载了一个比为 ProcessCenter 配置的 derby.jar 版本更高的 Derby 版本。我使用较新的 derby 创建工作灯和报告数据库,但在 server.xml 中使用的是较旧的 jar。这会导致应用程序也无法启动。以上是关于IBM Worklight 6.0 - 如何绑定数据源?的主要内容,如果未能解决你的问题,请参考以下文章
IBM Worklight 6.0 - 如何将日志写入文件并将它们发回?
IBM Worklight 6.0 - 如何访问 Application Center 管理控制台
IBM Worklight 6.0 - 如何操作 Cordova.js 文件?
如何在 IBM Worklight 6.0 中实现 OAUTH 2.0
IBM Worklight 6.0 - 如何更改 wlclient.properties 中的 wlServerHost 值