客户端PersistenceCapable NoClassDefFoundError使用gwt将Entity对象从服务器序列化到客户端

时间:2013-02-14 21:24:35

标签: gwt jpa openjpa

我正在使用apache open JPA来访问服务器端的数据库。我试图从我的gwt客户端调用服务器以便检索实体对象,但是这个请求总是失败并显示错误消息:NoClassDefFoundError org / apache / openjpa / enhance / PersistenceCapable。

我尝试在gwt.xml文件中定义增强的实体类,但没有帮助:

<set-configuration-property name="rpc.enhancedClasses" value="com.jobsin.domain.SystemUser,com.jobsin.domain.Keyword,com.jobsin.domain.Job">/

我的服务器功能:

public  SystemUser getCurrentUser() 
throws InvalidUser{

    HttpServletRequest httpServletRequest = this.getThreadLocalRequest();
    HttpSession session =  httpServletRequest.getSession();
    SystemUser user=null;

    Cookie[] cookies = httpServletRequest.getCookies();
    SocialNetworkCookie cookie = network.generateCookieObject();
    if(!cookie.init(cookies)){
        session.invalidate();
        throw new InvalidUser(); // no user was connected, user need to login
    }

    //try get user details from db
    EntityManager em = factory.createEntityManager();
    SystemUserDAOImpl userdao = new  SystemUserDAOImpl(em);
    user = userdao.findUserByNetworkId(cookie.getMemberId());
         //make user detach
    em.close();

    return user;
}

SystemUser类:

@Entity
public class SystemUser implements Serializable
{
    /**
     * 
     */
    private static final long serialVersionUID = -1673271845552139219L;

    @Id
    @GeneratedValue
    private long id; 

    @NotNull
    private String firstName;

    @NotNull
    private String lastName;

    @NotNull
    @Column(unique=true)
    private String email;


    @Temporal(TemporalType.TIMESTAMP) 
    private Date lastSearch;

    @ManyToMany(cascade = CascadeType.ALL)
    private Set<Job> jobs = new HashSet<Job>();

    @ManyToMany(cascade = CascadeType.ALL)
    private Set<Keyword> keywords = new HashSet<Keyword>();
}

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是将OpenJPA二进制文件添加到GWT客户端类路径。