在 WAS Liberty (WL) 上配置 Oracle 数据源设置 - 失败
Posted
技术标签:
【中文标题】在 WAS Liberty (WL) 上配置 Oracle 数据源设置 - 失败【英文标题】:Configuring Oracle dataSource settings on WAS Liberty (WL ) - failure 【发布时间】:2015-03-03 11:26:19 【问题描述】:我在 Liberty 控制台和浏览器中收到以下异常。。
javax.servlet.ServletException: Worklight Console initialization failed.Logged Exception: com.worklight.server.database.api.WorklightDataSourceException: FWLSE0194E: MobileFirst Server cannot be started because of failure while getting a connection from data-source bound to resource reference: jdbc/WorklightDS. Make sure the database is up, the credentials are correct and the driver is available for the server. [project worklight]
at com.worklight.core.auth.impl.AuthenticationFilter.verifyServletInitialized(AuthenticationFilter.java:451)
at com.worklight.core.auth.impl.AuthenticationFilter.doFilter(AuthenticationFilter.java:138)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194)
at [internal classes]
在具有以下配置的 UAT 机器上运行/查看应用程序(战争)时。
环境:
WL 6.3 EE WAS Liberty Core V8.5.5.4 Oracle 11g Windows Server 2012 R2
worklight.properties
publicWorkLightHostname=localhost
publicWorkLightProtocol=http
publicWorkLightPort=9080
wl.db.url=jdbc:oracle:thin:@10.100.11.1:1529:gmaxem
wl.db.username=WRKLIGHT
wl.db.password=wrklight
wl.reports.db.url=jdbc:oracle:thin:@10.100.11.1:1529:gmaxem
wl.reports.db.username=WLRREPOR
wl.reports.db.password=wlrrepor
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>
<resource-ref>
<description>Reports Database</description>
<res-ref-name>jdbc/WorklightReportsDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Liberty - server.xml
<application id="worklight" name="worklight" location="myapp.war" type="war" context-root="/worklight" >
<classloader delegation="parentLast">
<privateLibrary id="worklightlib_worklight">
<fileset dir="$shared.resource.dir/lib" includes="worklight-jee-library.jar"/>
</privateLibrary>
</classloader>
</application>
<jndiEntry value="9080" jndiName="publicWorkLightPort"/>
<jndiEntry value="localhost" jndiName="publicWorkLightHostname"/>
<jndiEntry value="http" jndiName="publicWorkLightProtocol"/>
<jndiEntry value="10" jndiName="serverSessionTimeout"/>
<library id="OracleLib">
<fileset dir="$shared.resource.dir/oracle" includes="*.jar"/>
</library>
<dataSource jndiName="jdbc/AppCenterDS" transactional="false">
<jdbcDriver libraryRef="OracleLib"/>
<properties.oracle driverType="thin" URL="jdbc:oracle:thin:@10.100.11.1:1529:gmaxem" user="WLAPPCENTER" password="wlappcenter"/>
</dataSource>
<dataSource jndiName="worklight/jdbc/WorklightDS" transactional="false">
<jdbcDriver libraryRef="OracleLib" />
<properties.oracle driverType="thin" url="jdbc:oracle:thin:@10.100.11.1:1529:gmaxem" user="WRKLIGHT" password="wrklight" />
</dataSource>
<dataSource jndiName="worklight/jdbc/WorklightReportsDS" transactional="false">
<jdbcDriver libraryRef="OracleLib" />
<properties.oracle driverType="thin" url="jdbc:oracle:thin:@10.100.11.1:1529:gmaxem" user="WLRREPOR" password="wlrrepor" />
</dataSource>
我也抄了:
jdbc jar (ojdbc6.jar) 位于 Liberty\usr\shared\resources\oracle worklight-jee-library.jar 位于 Liberty\usr\shared\resources\lib myapp.war 在 Liberty\usr\servers\WorklightServer\appsLiberty 上的 apps 文件夹仅包含这 3 个战争文件。
myapp.war appcenterconsole.war applicationcenter.war【问题讨论】:
这是server.xml
中的拼写错误或错误,因为您的两个数据源都使用相同 JNDI jndiName="worklight/jdbc/WorklightDS"
,第二个应该不同 - jndiName="worklight/jdbc/WorklightReportsDS"
我无法理解,两者使用不同的来源?
server.xml
中不能有 2 个具有相同 JNDI 名称的数据源。引用 WLRREPOR 的数据源应该有 worklight/jdbc/WorklightReportsDS
jndiName。
查看此页面www-01.ibm.com/support/knowledgecenter/SSZH4A_6.2.0/… 并尝试通过属性而不是 jdbc url 配置数据源。
是的,两个数据源都不同。这是发布问题时在此处复制/过去的错误。所以第二个是worklight/jdbc/WorklightReportsDS
【参考方案1】:
错误信息中提到了jdbc/WorklightDS,因此配置错误一定在<dataSource jndiName="worklight/jdbc/WorklightDS" ...>
元素中。
您正在使用语法url="jdbc:oracle:thin:@//10.100.11.1:1529/WRKLIGHT"
,这是带有服务名称的JDBC URL 的语法,但WRKLIGHT
可能不是服务名称,而是您的数据库的SID。 (服务名称通常包含一些点。)
你有两个选择:
使用引用 SID 的语法:url="jdbc:oracle:thin:@10.100.11.1:1529:WRKLIGHT"
在文件 <i>ORACLE_HOME</i>\network\admin\tnsnames.ora
中查找服务名称,并在 URL 中使用此服务名称,而不是 WRKLIGHT
。
【讨论】:
哦,我明白了,让我试试这个 不,它没有用。我尝试了 url="jdbc:oracle:thin:@10.100.11.1:1529:myDBSID" 并尝试了 url="jdbc:oracle:thin:@//10.100.11.1:1529/myDBSID" 和 url="jdbc: oracle:thin:@//10.100.11.1:1529/WRKLIGHT" 根据这个 WAS 信息中心:www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/… 您还需要在第二个 dataSource 声明中使用不同的 jndiName,如 gas 所述。 顺便说一句,当应用上述更改时,它给出:“javax.servlet.ServletException:Worklight 控制台初始化失败。记录的异常:java.lang.ClassNotFoundException:在 Worklight 平台中找不到类 oracle.jdbc.OracleDriver或项目/worklight”【参考方案2】:更新 2 中的错误:javax.servlet.ServletException:Worklight 控制台初始化失败。记录的异常:java.lang.RuntimeException:FWLSE0206E:项目 /worklight 未能初始化,因为数据源 jdbc:oracle 的项目数据库模式: thin:@10.100.11.1:1529:gmaxem 来自版本 N/A,版本 6.3.0.00.20141127-1357 的服务器不支持。使用 MobileFirst ant 任务来升级项目数据库模式。 [项目工作灯
这意味着与数据库的连接有效,但未找到应在表中的表。
如果您手动安装,则需要创建表的架构。 https://www-01.ibm.com/support/knowledgecenter/SSHS8R_6.3.0/com.ibm.worklight.installconfig.doc/admin/t_config_oracle_DB_manually_for_wladmin.html
【讨论】:
【参考方案3】:已解决
此问题已解决。
不幸的是,我的客户根本没有创建 WLADMIN 数据库,我被告知它确实存在。另外,正如我在另一个 post 中提到的那样,应用中心数据库创建了错误的表。
我没有被授予安装任何数据库工具来交互/查看数据库结构的权限。
注意:-上述配置正确,工作正常。
【讨论】:
【参考方案4】:可能对某人有用,它应该是端口名称和服务名称的'/'分隔符
<dataSource beginTranForResultSetScrollingAPIs="true" beginTranForVendorAPIs="false" commitOrRollbackOnCleanup="rollback" connectionManagerRef="default-conn-mgr" isolationLevel="TRANSACTION_READ_COMMITTED" jndiName="jdbc/test" transactional="true" type="javax.sql.ConnectionPoolDataSource">
<jdbcDriver libraryRef="oracleJDBCJars"/>
<properties.oracle URL="jdbc:oracle:thin:@my-host.name.xxx.com:portnumber/service.name.com" password="xxx" user="test_usr"/>
【讨论】:
以上是关于在 WAS Liberty (WL) 上配置 Oracle 数据源设置 - 失败的主要内容,如果未能解决你的问题,请参考以下文章
MobileFirst - WL 6.3 - Liberty 8.5.5.5(最新) - 在 Worklight Console 中找不到运行时
如何使用 MobileFirst Server 和 AdminCenter 正确配置 WAS Liberty server.xml basicRegistry
如何在部署后更新WAS Liberty中的配置文件可以不像Tomcat Web服务器吗?