【问题标题】:Java DB Web starter In BluemixBluemix 中的 Java DB Web 启动器
【发布时间】:2016-01-22 14:57:52
【问题描述】:

我正在尝试在我的本地 [Websphere Liberty][3] 服务器上运行在 [IBM Bluemix][2] 中创建的 [Java DB Web Starter][1],但它一直出现以下错误

[ERROR ] CWWJP0029E: 服务器在 liberty-IRDS.war 模块和 JavaDBApp 应用程序中找不到 openjpa-todo 持久性单元。 [错误] CWNEN0035E: 无法解析 JavaDBApp 应用程序的 liberty-IRDS.war 模块中空组件的 javax.persistence.EntityManager 类型的 java:comp/env/openjpa-todo/entitymanager 引用。 [err] javax.naming.NamingException: CWNEN1001E: java:comp/env/openjpa-todo/entitymanager JNDI 名称引用的对象无法实例化。如果引用名称映射到执行 JNDI 查找的应用程序的部署描述符绑定中的 JNDI 名称,请确保部署描述符绑定中的 JNDI 名称映射正确。如果 JNDI 名称映射正确,请确保可以使用相对于默认初始上下文的指定名称解析目标资源。 [根异常是 com.ibm.wsspi.injectionengine.InjectionException:JavaDBApp 应用程序的 liberty-IRDS.war 模块中的空组件 java:comp/env/openjpa-todo/entitymanager 类型为 javax.persistence.EntityManager 的引用无法解决。] [错误] 在 com.ibm.ws.injectionengine.osgi.internal.naming.InjectionJavaColonHelper.newCannotInstantiateObjectException(InjectionJavaColonHelper.java:183) [错误] [内部课程] [错误] 在 javax.naming.InitialContext.lookup(未知来源) [错误] 在 example.jpa.TODOListResource.getEm(TODOListResource.java:184) [错误] 在 example.jpa.TODOListResource.(TODOListResource.java:35)

已完成的步骤:

  • 在 Bluemix 中创建 Java DB Web Starter
  • 下载代码
  • 按照建议修改 server.xml - 尝试连接到本地数据库和作为 Web Starter 应用程序的一部分托管的数据库-

    --部署的应用程序

    Server.xml

    <!-- Enable features -->
    <featureManager>
        <feature>webProfile-7.0</feature>
        <feature>localConnector-1.0</feature>
    </featureManager>
    
    <!-- To access this server from a remote client add a host attribute to the   following element, e.g. host="*" -->
    <httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>
    
    <!-- Automatically expand WAR files and EAR files -->
    <applicationManager autoExpand="true"/>
    
    
    
    <applicationMonitor updateTrigger="mbean"/>
    

    <library id="MySQLLib">
    <fileset dir="${server.config.dir}/lib" id="mysql-connector-jar" includes="mysql-connector-java-*.jar"/>
    </library>
    
    <webApplication id="JavaDBApp" location="liberty-IRDS.war" name="JavaDBApp"/>
    </server>
    

    也尝试过:在 Java DB Web starter 中连接到 DB


    <server description="new server">
    
    <!-- Enable features -->
    <featureManager>
    <feature>webProfile-7.0</feature>
    <feature>localConnector-1.0</feature>
    </featureManager>
    
    <!-- To access this server from a remote client add a host attribute to  the following element, e.g. host="*" -->
    <httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>
    
    <!-- Automatically expand WAR files and EAR files -->
    <applicationManager autoExpand="true"/>
    
    
    
    <applicationMonitor updateTrigger="mbean"/>
    <dataSource id="mydbdatasource" jndiName="jdbc/mydbdatasource"> 
    <jdbcDriver libraryRef="MySQLLib"/>
                <properties  url="db2://user13711:2gGhHNZvJwKc@75.126.155.153:50000/SQLDB" user="user13711" password="****"/> 
     </dataSource> 
    
    
    <library id="MySQLLib">
    <fileset dir="${server.config.dir}/lib" id="mysql-connector-jar" includes="mysql-connector-java-*.jar"/>
    </library>
    
    <webApplication id="JavaDBApp" location="liberty-IRDS.war" name="JavaDBApp"/>
    </server>
    

【问题讨论】:

  • 您能否使用任何相关的 server.xml 配置和 persistence.xml 配置更新您的问题?
  • 已在 persistence.xml 中添加了 server.xml 和详细信息 - 这些都是修改前的文件,因为即使在所有更改之后也会出现相同的错误
  • persistence.xml 不完整,我没有看到任何结束标签
  • 已将其删除以使其更小
  • 使用最少的代码示例很好,但是对于 XML,请务必包含结束位,这样我们就可以知道那里有什么

标签: java database ibm-cloud websphere-liberty devops


【解决方案1】:

如果您从样板应用程序开始,则该应用程序已在 bluemix 上进行了开箱即用的正确配置。它通过打开 server.xm 中的cloudAutoWiring-1.0 功能来实现这一点。这会将 jdbc/mydbdatasource 自动连接到应用程序的 web.xml 中的资源引用。

在本地使用样板:

您需要采取几个步骤将应用程序连接到服务器,因为在本地环境中 bluemix 无法为您做到这一点。

  1. 确保在 server.xml 中启用了 jdbc 功能(因为webProfile-7.0 开启了jdbc-4.1
  2. 在 server.xml 中使用 jndi 名称“jdbc/mydbdatasource”在 server.xml 中配置数据源

server.xml 中的数据源配置如下所示:

<dataSource id='mydbdatasource' jndiName='jdbc/mydbdatasource' jdbcDriverRef='myJDBCDriver'> 
    <properties ... />  <!-- depends on what DB you are using -->
</dataSource>

<jdbcDriver id="myJDBCDriver">
    <library>
        <fileset dir="C:/path/to/your/jdbc/driver.jar"/>
    </library>
</jdbcDriver>

如代码示例中所述,您使用的 &lt;properties&gt; 取决于您使用的 JDBC 驱动程序。
有关用于所有主要 JDBC 驱动程序的属性列表,请查看 IBM's DataSource configuration doc

【讨论】:

  • 这不能连接到作为创建样板应用程序的一部分在 Bluemix 中创建的数据库吗?在这种情况下,属性将是相同的吗?如果我们将其添加为环境变量而不修改任何文件,那么任何情况下都可以从 VCAP_SERVICES 中自动读取它吗?
  • 目前您可以将 VCAP_SERVICES 中的属性自动读取到本地 liberty 实例中。您需要将在 bluemix 控制台中看到的属性手动复制/粘贴到 server.xml 数据源属性中。
  • 我仍然遇到错误-尝试使用服务器配置更新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多