Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 测试EJB&;阿奎利安&;TestNG/野蝇_Hibernate_Ejb_Testng_Wildfly_Jboss Arquillian - Fatal编程技术网

Hibernate 测试EJB&;阿奎利安&;TestNG/野蝇

Hibernate 测试EJB&;阿奎利安&;TestNG/野蝇,hibernate,ejb,testng,wildfly,jboss-arquillian,Hibernate,Ejb,Testng,Wildfly,Jboss Arquillian,我正在努力使用Arquillian运行一个相当简单的测试用例——它使用一个EJB类,以便使用JPA(Hibernate)将一个实体(用户)插入数据库,但是抛出了一个异常。我使用TestNG作为测试框架 文件夹结构 MyProject ear domain - all jpa entities ejb - holds NewUser ejb war - currently empty 测试 EJB 实体 测试persistence.xml org.hiber

我正在努力使用Arquillian运行一个相当简单的测试用例——它使用一个EJB类,以便使用JPA(Hibernate)将一个实体(用户)插入数据库,但是抛出了一个异常。我使用TestNG作为测试框架

文件夹结构

MyProject  
   ear
   domain - all jpa entities  
   ejb - holds NewUser ejb  
   war - currently empty
测试

EJB

实体

测试persistence.xml


org.hibernate.jpa.HibernatePersistenceProvider
java:jboss/datasources/examples
business.entities.PersonalData
business.entities.User
符合事实的
例外情况

失败:checkDBInsert
javax.ejb.EJBException:java.lang.IllegalArgumentException:未知实体:business.entities.User
位于org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionOnourtx(CMTTxInterceptor.java:190)
在org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInurtx(CMTTxInterceptor.java:275)
位于org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:340)
位于org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:309)上
位于org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:309)上
>
原因:java.lang.IllegalArgumentException:未知实体:business.entities.User
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1184)
位于org.jboss.as.jpa.container.AbstractEntityManager.persist(AbstractEntityManager.java:581)
位于business.boundary.NewUser.registerUser(NewUser.java:28)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
>

无论我做了什么更改,我都会遇到另一个异常…

显然,我有两个test-persistence.xml:一个在域资源中(正确的),另一个在ejb资源中(错误的)。当将域的test-persistence.xml移动到ejb的资源中时,一切都正常了。

为什么要将test-persistence.xml和persistence.xml作为资源添加到存档中?尝试删除persistence.xml。我不会同时添加它们。只是声明test-persistence.xml将作为persistence.xml添加到归档中
public class NewUserTest extends Arquillian
{
    @EJB
    private NewUser newUser;

    @Deployment
    public static JavaArchive createDeployment()
    {
        JavaArchive arc = ShrinkWrap
                .create(JavaArchive.class)
                .addClasses(User.class, Gender.class, PersonalData.class,
                        NewUser.class, NewUserTest.class)
                .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
                .addAsResource("META-INF/test-persistence.xml",
                        "META-INF/persistence.xml");
        return arc;
    }

    @Test
    public void checkDBInsert()
    {
        newUser.registerUser();
    }
}
@Stateless
public class NewUser
{
    @PersistenceContext(name = "testPU")
    EntityManager em;

    public void registerUser()
    {
        Calendar cal = Calendar.getInstance();
        cal.set(1111, 2, 3);
        User user = new User("Bugs", "Bunny", Gender.MALE, cal.getTime());
        em.persist(user);
    }
}
@Entity
@TableGenerator(name = "UserIdGenerator", initialValue = 0, allocationSize = 1)
@NamedQueries({
        @NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")})
public class User implements Serializable
{
    private static final long serialVersionUID = -5675781058185805901L;

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "UserIdGenerator")
    private Long id;

    @Embedded
    PersonalData personalData;

    public User()
    {
    }

    public User(String name, String familyName, Gender gender, Date birthdate)
    {
        this.init(name, familyName, gender, birthdate);
    }

    public Long getId()
    {
        return this.id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public PersonalData getPersonalData()
    {
        return this.personalData;
    }

    public void setPersonalData(PersonalData personalData)
    {
        this.personalData = personalData;
    }

    private void init(String name, String familyName, Gender gender,
            Date birthdate)
    {
        PersonalData personalDataToAdd = new PersonalData(name, familyName,
                gender, birthdate);
        this.init(personalDataToAdd);
    }

    private void init(PersonalData personalData)
    {
        this.personalData = personalData;
    }

    @Override
    public boolean equals(Object other)
    {
        boolean toReturn = false;

        if (other instanceof User)
        {
            User castOther = (User) other;
            toReturn = this.personalData.equals(castOther.getPersonalData());
        }

        return toReturn;
    }

    @Override
    public String toString()
    {
        return "Id: " + this.id + "\n" + this.personalData;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="2.1"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                        http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="testPU" transaction-type="JTA">

        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>

        <!-- Entities -->
        <class>business.entities.PersonalData</class>
        <class>business.entities.User</class>

        <exclude-unlisted-classes>true</exclude-unlisted-classes>

        <properties>
            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />

            <!-- general properties -->
            <property name="hibernate.id.new_generator_mappings" value="true" />
        </properties>
    </persistence-unit>
</persistence>
FAILED: checkDBInsert
javax.ejb.EJBException: java.lang.IllegalArgumentException: Unknown entity: business.entities.User
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:190)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:340)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    <<<<<<<<<<<<<<<<rest of stack trace was deleted due to convenience issues>>>>>>>>>>>>>>>>>
Caused by: java.lang.IllegalArgumentException: Unknown entity: business.entities.User
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1184)
    at org.jboss.as.jpa.container.AbstractEntityManager.persist(AbstractEntityManager.java:581)
    at business.boundary.NewUser.registerUser(NewUser.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    <<<<<<<<<<<<<<<<rest of stack trace was deleted due to convenience issues>>>>>>>>>>>>>>>>>