2011-10-05 53 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鏈接中描述的解決方法適用於我,但仍然允許編織進行延遲加載。 –