在 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.warLiberty\usr\servers\WorklightServer\apps

Liberty 上的 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/WorklightReportsDSjndiName。 查看此页面www-01.ibm.com/support/knowledgecenter/SSZH4A_6.2.0/… 并尝试通过属性而不是 jdbc url 配置数据源。 是的,两个数据源都不同。这是发布问题时在此处复制/过去的错误。所以第二个是worklight/jdbc/WorklightReportsDS 【参考方案1】:

错误信息中提到了jdbc/WorklightDS,因此配置错误一定在&lt;dataSource jndiName="worklight/jdbc/WorklightDS" ...&gt;元素中。

您正在使用语法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服务器吗?

代理 IBM WAS Liberty Profile

Websphere Liberty Profile 上 Worklight 服务器的拓扑

MobileFirst:WAS Liberty 禁用 LTPA 令牌自动生成