在WAS Liberty(WL)上配置Oracle数据源设置 - 失败

时间:2015-03-03 11:26:19

标签: oracle websphere-liberty ibm-mobilefirst

我在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
  • Liberty \ usr \ shared \ resources \ lib
  • worklight-jee-library.jar Liberty \ usr \ servers \ WorklightServer \ apps
  • myapp.war

Liberty上的 apps 文件夹仅包含这3个war文件。

  • myapp.war
  • appcenterconsole.war
  • applicationcenter.war

4 个答案:

答案 0 :(得分:0)

错误消息提及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"
  • 在文件ORACLE_HOME\network\admin\tnsnames.ora中查找服务名称,并在网址中使用此服务名称,而不是WRKLIGHT

答案 1 :(得分:0)

更新2出错:javax.servlet.ServletException:Worklight Console初始化失败。记录异常: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

答案 2 :(得分:0)

<强>解决

此问题已得到解决。

不幸的是,我的客户端根本没有创建 WLADMIN 数据库,我被告知它确实存在。正如我在另一个post中提到的那样,应用中心数据库正在创建错误的表格。

我没有权限安装任何数据库工具来交互/查看数据库结构。

注意: - 上述配置正确且工作正常。

答案 3 :(得分:0)

可能对某人有用,它应该是&#39; /&#39;端口名称和服务名称的分隔符

<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"/>