1 Reply Latest reply: Nov 16, 2010 12:33 PM by Alexander Bell RSS

Entities and CDI

Ryan Cuprak Newbie

With CDI, is it possible to have a web form populate a JPA Entity and then persist it to the database? I am running into an issue where I get a java.lang.IllegalArgumentException: class_$$_javassist_92 exception when I go to persist. It is obvious that my instance is being "wrapped." I could add a clone method to my instance but that sounds gross and error prone. I wanted to use my annotations on the entities to drive both screen and database validation (trying to transition from Seam 2 to WELD). I have been googling and searching high and low for a solution to this problem. Another posting suggested using the @Producer method but that is also getting wrapped.

Thanks!


Web form:
<h:inputText size="25" required="true" value="#{member.firstname}"/>
<h:commandButton value="Join" action="#{membershipBean.join(member)}"/>

Member:
@Table(name="member")
@Entity
public class Member implements Serializable {
...
}

Stateless Session Bean:
@Stateless
@LocalBean
@Named("membershipBean")
public class MembershipBean {

    @PersistenceContext
    private EntityManager em;

    @Produces @Named @RequestScoped
    public Member getMember() {
        System.out.println("Producer CALLED----");
        return new Member();
    }

    /**
     * Invoked for joining
     */
    public String join(Member member) {
        System.out.println("Persisting: " + member);
        System.out.println("Classname: " + member.getClass().getName());
        em.persist(member);
        return "welcome";
    }

}

Console output (System.outs):
INFO: Creating a member.
INFO: Producer CALLED----
INFO: Creating a member.
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
INFO: Producer CALLED----
INFO: Creating a member.
INFO: Persisting: asdf af
INFO: Classname: org.ctjava.model.Member_$$_javassist_92
WARNING: A system exception occurred during an invocation on EJB MembershipBean method public java.lang.String net.cuprak.ejb.MembershipBean.join(org.ctjava.model.Member)
javax.ejb.EJBException