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

在WAS Liberty(WL)上配置Oracle数据源设置-失败,oracle,websphere-liberty,ibm-mobilefirst,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 w

我在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机器上运行/查看应用程序(war)时

环境

  • WL 6.3 EE
  • WAS Liberty Core V8.5.5.4
  • 甲骨文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>
 <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>  

Worklight服务器数据库
jdbc/WorklightDS
javax.sql.DataSource
容器
报告数据库
jdbc/WorklightReportsDS
javax.sql.DataSource
容器
Liberty-server.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>
 <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.jaratLiberty\usr\shared\resources\lib
  • myapp.waratLiberty\usr\servers\WorklightServer\apps
Liberty上的apps文件夹仅包含这3个war文件

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

错误消息提到jdbc/WorklightDS,因此配置错误一定在
元素中

您使用的语法是带有服务名称的jdbc url的语法,但可能不是服务名称,而是数据库的SID。(服务名称通常包括一些点。)

您有两个选择:

  • 使用引用SID的语法:
    url=“jdbc:oracle:thin:@10.100.11.1:1529:WRKLIGHT”
  • 在文件
    ORACLE\u HOME\network\admin\tnsnames.ora
    中查找服务名称,并在URL中使用此服务名称,而不是
    WRKLIGHT

更新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任务升级项目数据库架构。[项目工作灯]

这意味着与数据库的连接工作正常,但未找到表中预期的表

如果手动安装,则需要创建表的架构。

已解决

这个问题已经解决了

不幸的是,我的客户根本没有创建WLADMIN数据库,我被告知它确实存在。另外,正如我在另一篇文章中提到的,app center数据库创建了错误的表

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


注意:-上述配置正确且运行良好。

可能对某些人有用,它应该是端口名和服务名的“/”分隔符

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


这可能是服务器.xml中的输入错误或错误,因为两个数据源使用相同的JNDI
jndName=“worklight/jdbc/WorklightDS”
,第二个数据源应该不同-
jndName=“worklight/jdbc/WorklightReportsDS”
我无法理解这一点,两者都使用不同的源?在
server.xml
中不能有两个具有相同JNDI名称的数据源。引用WLRREPOR的数据源应该具有
worklight/jdbc/WorklightReportsDS
jndiName。请检查此页面,并尝试通过属性而不是jdbc url配置数据源。是的,两个数据源都是a-sources是不同的。这是发布问题时在这里出现的复制/过去错误。所以第二个是worklight/jdbc/WorklightReports。我明白了,让我试试这个。它不起作用。我尝试了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”根据这是信息中心:您还需要在第二个数据源声明中使用不同的jndiName,如.BTW所述,当应用上述更改时,它会给出:”javax.servlet.ServletException:Worklight控制台初始化失败。记录的异常:java.lang.ClassNotFoundException:在Worklight平台或项目/Worklight中找不到类oracle.jdbc.OracleDriver“