1

我正在尝试在 OpenEJB 3.1.4 + Tomcat 6 中部署应用程序。该应用程序在 JBoss 中部署正常,但我想让它在 OpenEJB 中运行。

基本上,我想知道如何配置我的数据源并使用 EAR for OpenEJB 部署它

现在:

EJB 可以在 OpenEJB 的 JNDI 浏览器中找到,但 hibernate 似乎没有找到数据源(它无法更新数据库模式)——来自标准输出:

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>

但是我的应用容器似乎没有加载/考虑它们。有任何想法吗?

4

2 回答 2

3

找到了。实际上,我对 EJB 部署感到困惑,它是真正的应用程序容器:OpenEJB 是应用程序容器,但它本身在 Tomcat 中部署为 webapp

首先,在以下位置配置您的 PersistenceUnit 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>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>
于 2011-03-04T14:40:42.447 回答
0

那是因为您正在为部署在 Tomcat 中的应用程序使用特定于 JBoss 的部署文件 (mysql-ds.xml)。对于 tomcat,你需要一个不同的文件。看到这个:

http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html#JDBC_Data_Sources

不过,不确定 OpenEJB 部分,因为我没有这方面的经验。

于 2011-03-04T11:01:45.390 回答