EJB: не является известным типом объекта

Я не нашел проблему в предыдущей теме (что-то меня отлаживает), поэтому моя проблема: WebApp на Java, с использованием EJB, с использованием Entities. WebApp вызывает EBJ, вызывая удаленный интерфейс. Далее реализация EJB использует сущность. Это стек:

    Caused by: java.lang.IllegalArgumentException: Object: ejbpersistance.entities.User@bfbbebb is not a known entity type.
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4228)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496)
    at ejbpersistance.dao.DaoAbstract.save(DaoAbstract.java:54)
    at ejbimpl.ejb.UserBean.createUser(UserBean.java:30)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081)
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153)
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4786)
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
    at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:55)
    at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369)
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4758)
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4746)
    at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:205)
    ... 48 more

Лицо:

package ejbpersistance.entities;

import javax.persistence.*;

@Entity(name = "user")
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name="email", unique = true, nullable = false)
    private String email;

    @Column(name="password", unique = false, nullable = false)
    private String password;

    @Column(name="subscriber", unique = false, nullable = false)
    private Boolean subscriber;

    public User(){


    }

    public User(String email, String password) {
        this.email = email;
        this.password = password;
    }

    public int getId() {
        return id;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Boolean getSubscriber() {
        return subscriber;
    }
}

EJB-реализация:

    @Override
    public boolean createUser(String mail, String password) {

        UserDao userdao = new UserDao();

        User user = new User();
        user.setEmail(mail);
        user.setPassword(password);

        userdao.save(user);

        return true;
    }

Постоянство.xml:

    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

    <persistence-unit name="ejb-jpa">
        <class>ejbpersistance.entities.User</class>
        <class>ejbpersistance.entities.Comment</class>
        <class>ejbpersistance.entities.Article</class>
        <class>ejbpersistance.entities.User</class>
        <properties>
            <property  name="javax.persistence.jdbc.url"  value="jdbc:mysql://localhost:3306/ejb"/>
            <property  name="javax.persistence.jdbc.user"  value="root"/>
            <property  name="javax.persistence.jdbc.password"  value="root"/>
            <property  name="javax.persistence.jdbc.driver"  value="com.mysql.jdbc.Driver"/>
        </properties>
    </persistence-unit>
</persistence>

UserDAO:

public class UserDao extends DaoAbstract<User, Integer>{

}

ДаоАбстракт:

открытый класс DaoAbstract {

private EntityManagerFactory emf;

public EntityManagerFactory getEntityManagerFactory() {
    if(emf == null)
        emf = Persistence.createEntityManagerFactory("ejb-jpa");
    return emf;
}

Class<C> entityClass;

{
    entityClass = (Class<C>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

public List<C> getAll() {
    emf = getEntityManagerFactory();
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    List<C> object = em.createQuery("SELECT obj FROM " + entityClass.getAnnotation(Entity.class).name() + " obj")
            .getResultList();
    em.flush();
    em.getTransaction().commit();
    em.close();
    return object;
}

public C get(I id) {
    emf = getEntityManagerFactory();
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    C object = em.find(entityClass, id);
    em.flush();
    em.getTransaction().commit();
    em.close();
    return object;
}

public C save(C object) {
    emf = getEntityManagerFactory();
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    em.persist(object);
    em.flush();
    em.getTransaction().commit();
    em.close();
    return object;
}

public void delete(C object) {
    emf = getEntityManagerFactory();
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    em.remove(em.contains(object) ? object : em.merge(object));
    em.flush();
    em.getTransaction().commit();
    em.close();
}

}

Чего-то не хватает ? Я думаю не так, в чем проблема? Спасибо вам всем


person Buzz2Buzz    schedule 22.02.2015    source источник
comment
Покажите свой UserDao, пожалуйста.   -  person Everv0id    schedule 22.02.2015
comment
Как насчет этой темы stackoverflow.com/questions/19454725/?   -  person Everv0id    schedule 22.02.2015
comment
Я пытался сделать так, не получилось   -  person Buzz2Buzz    schedule 22.02.2015
comment
Я попробовал ответ @Everv0id и понял, что в wildfly8.2 в моем случае, хотя у меня для exclude-unlisted-classs установлено значение false, мне все равно нужно добавить классы сущностей в persistence.xml один за другим.   -  person Galilo Galilo    schedule 04.04.2021