【问题标题】:EJB Maven module using JPA使用 JPA 的 EJB Maven 模块
【发布时间】:2013-06-18 09:43:43
【问题描述】:

我有使用 JPA 的简单 maven EJB 模块。这是我的 persistence.xml 文件

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="Persistence">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <mapping-file>GroupTypes.xml</mapping-file> 
        <properties>
            <property name="hibernate.connection.url"  value="jdbc:oracle:thin:@127.0.0.1:1521:E"/>
            <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
            <property name="hibernate.connection.username" value="username"/>
            <property name="hibernate.connection.password" value="password"/>
        </properties>
    </persistence-unit>
</persistence>

我正在使用 EJB 无状态 Bean,我正在尝试从 GroupTypes 表中获取所有属性。这是我的 bean 实现:

public class TestBean
{

    private GroupTypes GroupTypes;
    private EntityManagerFactory entityManagerFactory;
    private EntityManager entityManager;

   @WebMethod (operationName = "justTesting")
   public boolean justTesting(@WebParam (name = "param") String value)
   {
       try
       {
            entityManagerFactory = Persistence.createEntityManagerFactory("Persistance");
            entityManager = entityManagerFactory.createEntityManager();
            Query query = entityManager.createQuery("Select name from GroupTypes");
            List<AmmEdGroupTypes> result = query.getResultList();
            return true;

        }
        catch(Exception e)
       {
            e.printStackTrace();
            return false;
       }
    }
}

当我尝试调用此方法时,出现异常:javax.persistence.PersistenceException: No Persistence provider for EntityManager named Persistance。 我的persistance.xml 文件放置在文件夹resources/META-INF/persistance.xml 中,如果我不使用bean,则此解决方案有效。有没有人知道为什么只有在我使用 bean 时才会发生这种情况?

我正在使用 Intellij 12.1.1、Oracle 11g、Glassfish 3.1 服务器和 JAVA 1.6。

【问题讨论】:

    标签: maven jpa intellij-idea glassfish-3 ejb-3.1


    【解决方案1】:

    我通过以下方式解决了这个问题:

    1. 在 glassfish 上安装了休眠插件(使用 glassfish 更新工具)
    2. 在 glassfish 上添加了 jdb 连接池 _AmmPool,属性为:className, username,password,databaseName and url
    3. 在 glassfish 上添加 jdbc 资源 jdbc/__amm 与连接池绑定 _AmmPool
    4. 已更改persistence.xml 文件
    5. 已更改pom.xml 文件
    6. 将以下库复制到 glassfish 域/domain1/lib 文件夹中:

      • antlr-2.7.7
      • commons-collections-3.2.1,
      • dom4j-1.6.1,
      • ejb3-persistence-1.0.2.GA,
      • hibernate3-maven-plugin-3.0,
      • hibernate-commons-annotations-4.0.2.Final,
      • hibernate-core-4.2.2.Final,
      • hibernate-entitymanager-4.2.2.Final,
      • javassist-3.15.0-GA,
      • jta-1.1,
      • log4j-1.2.17,
      • oracle-jdbc-11.1.0.6.0-Production+,
      • slf4j-api-1.6.1
      • slf4j-log4j12-1.7.5

    A 还将这些库复制到 glassfish/lib floder 中。

    这是我的新persistance.xml 文件:http://pastebin.com/xbEU9Tr0

    这是我的 pom.xml 文件:http://pastebin.com/uEjhW36

    【讨论】:

    • pom.xml 链接已损坏/过期。链接某种说临时资源是不明智的,而您可以在这里复制粘贴xml内容。
    猜你喜欢
    • 2012-08-23
    • 2016-02-11
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2014-06-01
    • 1970-01-01
    相关资源
    最近更新 更多