我正在尝试在我的本地[Websphere Liberty] [3]服务器上运行[IBM Bluemix] [2]中创建的[Java DB Web Starter] [1],但它一直给出以下错误
[错误] CWWJP0029E:服务器在liberty-IRDS.war模块和JavaDBApp应用程序中找不到openjpa-todo持久性单元。 [错误] CWNEN0035E:无法解析JavaDBApp应用程序的liberty-IRDS.war模块中null组件的javax.persistence.EntityManager类型的java:comp / env / openjpa-todo / entitymanager引用。 [错误] javax.naming.NamingException:CWNEN1001E:无法实例化java:comp / env / openjpa-todo / entitymanager JNDI名称引用的对象。如果引用名称映射到执行JNDI查找的应用程序的部署描述符绑定中的JNDI名称,请确保部署描述符绑定中的JNDI名称映射正确。如果JNDI名称映射正确,请确保可以使用相对于默认初始上下文的指定名称来解析目标资源。 [根异常是com.ibm.wsspi.injectionengine.InjectionException:JavaDBApp应用程序的liberty-IRDS.war模块中null组件的javax.persistence.EntityManager类型的java:comp / env / openjpa-todo / entitymanager引用无法解决。] [err] at com.ibm.ws.injectionengine.osgi.internal.naming.InjectionJavaColonHelper.newCannotInstantiateObjectException(InjectionJavaColonHelper.java:183) [内部班级] [错误] [错误]在javax.naming.InitialContext.lookup(未知来源) [err] at example.jpa.TODOListResource.getEm(TODOListResource.java:184) [err]在example.jpa.TODOListResource。(TODOListResource.java:35)
已完成的步骤:
按照建议修改server.xml - 尝试连接到本地Db和作为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>
答案 0 :(得分:1)
如果您从样板应用程序开始,则应用程序在bluemix上开箱即用。它通过启用server.xm中的cloudAutoWiring-1.0
功能来实现此目的。这将自动将jdbc / mydbdatasource连接到应用程序的web.xml中的resource-ref。
在本地使用样板:
您需要采取一些步骤将应用程序连接到服务器,因为bluemix无法在本地环境中为您执行此操作。
webProfile-7.0
已启用jdbc-4.1
所以您拥有该功能)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>
如代码示例中所述,您使用的<properties>
取决于您使用的JDBC驱动程序。
有关用于所有主要JDBC驱动程序的属性的列表,请查看IBM's DataSource configuration doc。