2011-10-05 52 views
3

我在一个jar文件中有一个JPA注释对象和一个EJB远程接口,而注入了Entity Manager的EJB无状态实现部署在一个war文件中。我的客户创建了一个新的对象实例并通过电线发送。EJB 3 + JPA2 =具有空字段的反序列化对象

但是,当它在服务器端反序列化时,对象对于每个字段都为空,并且包含其他字段,如_persistence_primaryKey。看来,服务器实现认为我的反序列化的对象已经管理...但它不是...我如何通过电线传递对象,使其反序列化正确?如果实体管理器被注释掉,则对象反序列化就好了。

下面参见代码例如:

Chicken.java(JPA注释的POJO)

@Entity 
@Table(name="Chicken") 
public class Chicken implements Serializable{ 

    /** 
    *serial version id 
    */ 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="ID") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @Column(name="NAME") 
    private String name; 

    public Chicken(){ 
    } 

    public void setName(String name){ 
     this.name = name; 
    } 

    public String getName(){ 
     return name; 
    } 
} 

ChickenCreator.java(无状态EJB瓦特/ JPA注射)

@Stateless 
public class ChickenCreator implements ChickenCreatorRemote{ 

    @PersistenceContext(unitName="DataStore") private EntityManager em; 

    public ChickenCreator(){ 
    } 

    public createChicken(Chicken chicken){ 
    em.persist(chicken); 
    } 

} 

ChickenClient.java(带注入远程EJB接口的JSF UI E)

@ManagedBean 
@SessionScoped 
public ChickenClient(){ 

    @EJB private ChickenCreatorRemote ccr; 

    public void makeChicken(){ 
     Chicken chicken = new Chicken(); 
     chicken.setName("Bob"); 
     ccr.createChicken(chicken); 
    } 
} 

回答

1

您的问题可能是来自这个问题http://java.net/jira/browse/GLASSFISH-16164

我有同样的问题,在Glassfish的3.1.1具有独立EAR and WAR
此属性在persistence.xml解决了我的问题:

<property name="eclipselink.weaving" value="false"/> 
+0

谢谢。使用bug链接中描述的解决方法适用于我,但仍然允许编织进行延迟加载。 –