我正在尝试在OpenEJB 3.1.4 + Tomcat 6中部署一个应用程序。这个应用程序在JBoss中部署OK,但我想让它在OpenEJB中运行。
基本上,我想知道如何配置我的数据源并使用EAR for OpenEJB 进行部署。
EJB可以在OpenEJB的JNDI浏览器中找到,但是hibernate似乎没有找到数据源(它无法更新数据库模式) - 来自stdout:
org.hibernate.tool.hbm2ddl.SchemaExport execute INFO: Running hbm2ddl schema export
org.hibernate.tool.hbm2ddl.SchemaExport execute INFO: exporting generated schema to database
org.hibernate.tool.hbm2ddl.SchemaExport create GRAVE: Unsuccessful: create table Answer ([...])
我的persistence.xml
指向我的数据源:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
[...]
<persistence-unit name="myapp">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/myapp_mysql</jta-data-source>
我试图包含像src/main/application/mysql-ds.xml
这样的数据源文件:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>myapp_mysql</jndi-name>
<connection-url>jdbc:mysql://hostname:3306/my_app</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>user</user-name>
<password>password</password>
甚至还有一个像src/main/application/openejb.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<openejb>
<Connector id="myapp_mysql">
JdbcDriver = com.mysql.jdbc.Driver
JdbcUrl = jdbc:mysql://hostname:3306/my_app
UserName = user
Password = password
</Connector>
</openejb>
但我的app容器似乎没有加载/考虑它们。有什么想法吗?
答案 0 :(得分:3)
找到它。 实际上我对EJB部署感到困惑,而且它是真正的应用程序容器: OpenEJB是应用程序容器,但它本身在Tomcat中部署为webapp 。
首先,在persistence.xml
中配置您的PersistenceUnit:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
[...]
<persistence-unit name="myapp">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>myapp_mysql</jta-data-source>
然后,在OpenEJB配置文件tomcat\conf\openejb.xml
<Resource id="myapp_mysql" type="DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://localhost:3306/my_app
UserName user
Password password
JtaManaged true
</Resource>
答案 1 :(得分:0)
这是因为您正在为Tomcat中部署的应用程序使用特定于JBoss的部署文件(mysql-ds.xml)。对于tomcat,您需要一个不同的文件。见:
http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html#JDBC_Data_Sources
不确定OpenEJB部分,因为我没有使用它的经验。