2013-07-20 20 views
0

我最近开始研究相关的JBoss EAR,WAR和EJB项目(JBoss 7.7.1)。开发人员正在使用Eclipse进行开发,我们启动JBoss并通过Eclipse进行调试。如何让Hibernate,JBoss和Eclipse在单元测试中一起工作?

我可以在Eclipse/JBoss中启动我们的webapp,没有任何问题。

鉴于我们根本没有测试,我决定开始设置测试环境,最初只是为了测试EJB项目。但是当尝试启动测试时,我在配置方面遇到很多困难(我已经查看了所有内容并看到了类似的问题,但对我来说没有任何效果)。

这个项目的结构是这样的:

ccc-ejb/ 
    src/ 
     ccc/ 
      <packages and classes under here> 
     META-INF/persistence.xml 
    test/ 
     ccc/ 
      <packages and classes under here> 
      TestDatabase.java 

只是为了完整性(即使该文件仍然没有被读)我的persistence.xml文件看起来是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 

<persistence-unit name="ccc"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:jboss/datasource/ccc-ds</jta-data-source> 
    <class>ccc.User</class> 
    <properties> 
     <property name="hibernate.show_sql" value="true" /> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />  
     <property name="hibernate.hbm2ddl.auto" value="create"/> 
    </properties> 
</persistence-unit> 

作为一个获得测试环境设置的开始,我有以下测试课程,只是为了理智检查环境:

这种
public class TestDatabase { 
    public static void main(String[] args) { 
    try { 
     System.out.println(System.getProperty("java.class.path")); 
     System.out.println(System.class.getResource("META-INF/persistence.xml")); 
     System.out.println(Class.forName("org.hibernate.ejb.HibernatePersistence")); 

     EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("ccc"); 
     EntityManager entityManager = entityManagerFactory.createEntityManager(); 

     entityManager.close(); 
     entityManagerFactory.close(); 
    } catch (Throwable t) { 
     System.out.println(t); 
    } 
    } 
} 

输出是:

/usr/local/jboss-7.1.1-final/modules/org/hibernate/main/hibernate-entitymanager-4.0.1.Final.jar:/Development/workspace-ccc-dev/ccc-ejb/build/classes:/Development/workspace-ccc-dev/ccc-ejb/lib/json_simple-1.1.jar:/usr/local/jboss-7.1.1-final/modules/javax/activation/api/main/activation-1.1.1.jar:/usr/local/jboss-7.1.1-final/modules/javax/annotation/api/main/jboss-annotations-api_1.1_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/ejb/api/main/jboss-ejb-api_3.1_spec-1.0.1.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/el/api/main/jboss-el-api_2.2_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/enterprise/api/main/cdi-api-1.0-SP4.jar:/usr/local/jboss-7.1.1-final/modules/javax/enterprise/deploy/api/main/jboss-jad-api_1.2_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/faces/api/main/jboss-jsf-api_2.1_spec-2.0.1.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/inject/api/main/javax.inject-1.jar:/usr/local/jboss-7.1.1-final/modules/javax/interceptor/api/main/jboss-interceptors-api_1.1_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/jms/api/main/jboss-jms-api_1.1_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/jws/api/main/jsr181-api-1.0-MR1.jar:/usr/local/jboss-7.1.1-final/modules/javax/mail/api/main/mail-1.4.4.jar:/usr/local/jboss-7.1.1-final/modules/javax/management/j2ee/api/main/jboss-j2eemgmt-api_1.1_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/persistence/api/main/hibernate-jpa-2.0-api-1.0.1.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/resource/api/main/jboss-connector-api_1.6_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/rmi/api/main/jboss-rmi-api_1.0_spec-1.0.4.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/security/auth/message/api/main/jboss-jaspi-api_1.0_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/security/jacc/api/main/jboss-jacc-api_1.4_spec-1.0.1.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/servlet/api/main/jboss-servlet-api_3.0_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/servlet/jsp/api/main/jboss-jsp-api_2.2_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/servlet/jstl/api/main/jboss-jstl-api_1.2_spec-1.0.2.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/transaction/api/main/jboss-transaction-api_1.1_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/validation/api/main/validation-api-1.0.0.GA.jar:/usr/local/jboss-7.1.1-final/modules/javax/ws/rs/api/main/jboss-jaxrs-api_1.1_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/wsdl4j/api/main/wsdl4j-1.6.2.jar:/usr/local/jboss-7.1.1-final/modules/javax/xml/bind/api/main/jboss-jaxb-api_2.2_spec-1.0.3.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/xml/registry/api/main/jboss-jaxr-api_1.0_spec-1.0.1.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/xml/rpc/api/main/jboss-jaxrpc-api_1.1_spec-1.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/xml/soap/api/main/jboss-saaj-api_1.3_spec-1.0.1.Final.jar:/usr/local/jboss-7.1.1-final/modules/javax/xml/ws/api/main/jboss-jaxws-api_2.2_spec-2.0.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/org/hibernate/validator/main/hibernate-validator-4.2.0.Final.jar:/usr/local/jboss-7.1.1-final/modules/org/picketbox/main/picketbox-4.0.7.Final.jar:/usr/local/jboss-7.1.1-final/modules/org/picketbox/main/picketbox-commons-1.0.0.final.jar:/usr/local/jboss-7.1.1-final/modules/org/picketbox/main/picketbox-infinispan-4.0.7.Final.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/as/controller-client/main/jboss-as-controller-client-7.1.1.Final.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/dmr/main/jboss-dmr-1.1.1.Final.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/logging/main/jboss-logging-3.1.0.GA.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/resteasy/resteasy-jaxb-provider/main/resteasy-jaxb-provider-2.3.2.Final-jandex.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/resteasy/resteasy-jaxb-provider/main/resteasy-jaxb-provider-2.3.2.Final.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/resteasy/resteasy-jaxrs/main/async-http-servlet-3.0-2.3.2.Final-jandex.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/resteasy/resteasy-jaxrs/main/async-http-servlet-3.0-2.3.2.Final.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/resteasy/resteasy-jaxrs/main/resteasy-jaxrs-2.3.2.Final-jandex.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/resteasy/resteasy-jaxrs/main/resteasy-jaxrs-2.3.2.Final.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/resteasy/resteasy-multipart-provider/main/resteasy-multipart-provider-2.3.2.Final-jandex.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/resteasy/resteasy-multipart-provider/main/resteasy-multipart-provider-2.3.2.Final.jar:/usr/local/jboss-7.1.1-final/modules/org/jboss/ejb3/main/jboss-ejb3-ext-api-2.0.0.jar 
null 
class org.hibernate.ejb.HibernatePersistence 
java.lang.NoClassDefFoundError: org/hibernate/proxy/EntityNotFoundDelegate 

问题:

  1. 的,因为,该项目是在Eclipse配置为EJB项目,并自动有很多JBoss的罐子和JBoss模块罐子放在构建路径上(包括Hibernate罐子)。然而,hibernate-entitymanager-4.0.1.Final.jar不会自动添加,我需要自己添加它。如果我不手动添加它,那么将不会找到org.hibernate.ejb.HibernatePersistence。好奇为什么这个jar不会像其他jar文件那样自动包含?
  2. persistence.xml资源的输出为空?它没有被发现。我怎样才能解决这个问题?

当Eclipse构建,它把所有的课在这里:

/Development/workspace-ccc-dev/ccc-ejb/build/classes 

这个目录肯定是从上面println的输出类路径。此外,在类目录中,特别是我可以看到:

classes/ccc/TestDatabase.class 
classes/META-INF/persistence.xml 

为什么不拾取persistence.xml文件?

  1. java.lang.NoClassDefFoundError:org/hibernate/proxy/EntityNotFoundDelegate也不好看。当我得到1和2固定时,我会做到这一点,但这里的任何提示也将非常感激。

谢谢。

回答

0

Why isn't the persistence.xml file being picked up?

因为加载它的路径是错误的。它应该是

System.class.getResource("/META-INF/persistence.xml") 

没有前导斜杠,路径被解释为相对于System类的包。使用前导斜杠,它从类路径的根部开始。

关于其他问题,我不知道。但我不明白为什么应该“自动”添加到构建路径。如果您需要构建路径中的jar,请将其添加到构建路径中。我不明白为什么这会是一个问题。

+0

啊,是的,谢谢你的抬头,我完全错过了。我的意思是“自动”添加到构建路径中的是,在Eclipse中,需要将JBoss运行时环境与EJB项目相关联。一旦你这样做了,一堆瓶子就会自动添加到构建路径和运行时类路径中。我说自动的,因为Eclipse似乎决定添加哪些模块,罐子等。并非所有运行时所需的罐子都添加了。 Eclipse如何决定添加哪些JBoss jar和模块似乎是“自动的”或更好的“自动化”。 – lostdorje

相关问题