2009-08-21 63 views
0

我正在使用Gilead將我的實體堅持到我的GWT項目中,並且遇到了問題。我想創建一個父類來容納一些在我的實體(id等)中通用的屬性。當持久存在時,我得到一個空指針異常。使用Gilead繼承繼承類使用Gilead

父類:

public abstract class Entity extends LightEntity implements Serializable { 
    protected Long id; 
    public Entity(){} 
} 

子類:

public class Person extends Entity { 
    private String firstName; 
    private String lastName; 
    public Person(){} 
} 

Hibernate映射文件:堅持當

<hibernate-mapping> 
    <class name="com.domain.Entity" abstract="true" > 
     <id name="id" type="long"> 
       <column name="ID"/> 
       <generator class="native" /> 
      </id> 
     <union-subclass name="com.domain.Person" table="PERSON"> 
      <property name="id" type="long" /> 
      <property name="firstName" type="string"> 
       <column name="FIRST_NAME" length="45" not-null="true" /> 
      </property> 
      <property name="lastName" type="string"> 
       <column name="LAST_NAME" length="45" not-null="true" /> 
      </property> 
     </union-subclass> 
    </class> 
</hibernate-mapping> 

堆棧跟蹤:

java.lang.NullPointerException at net.sf.gilead.gwt.PersistentRemoteService.processCall(PersistentRemoteService.java:170) at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:86 ) at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.ApplicationFilterChain.servletService (ApplicationFilterChain.java:427) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315) 在org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287) 在有機.apache.catalina.core.StandardContextValve.invoke(StandardContextValve。 java:218) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) at com.sun。 (標準主機權限)。的java:222) 在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) 在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) 在org.apache。 catalina.core.StandardPipeline.invoke(StandardPipeline.java:587) at org.apache.catalina.cor e.ContainerBase.invoke(ContainerBase.java:1096) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java: 648) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587) at org.apache.catalina。 core.ContainerBase.invoke(ContainerBase.java:1096) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter( DefaultProcessorTask.java:647) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask .java:579) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java :341) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214 ) at com.sun.enterprise.web.portunif。PortUnificationPipeline $ PUTask.doTask(PortUnificationPipeline.java:380) at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265) at com.sun.enterprise.web.connector.grizzly。 ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)

回答

3

您使用吉利德< 1.2.2?

如果是,請升級Gilead。然後再次運行並檢查新的異常消息。很可能只是某種錯誤配置。

充分說明:

如果您在版本檢查PersistentRemoteService.java的源代碼1.2.1

PersistentRemoteService.java v1.2.1

在行170,你會看到下面一行

return RPCCopy.getInstance().encodeResponseForFailure(null, ex, rpcRequest.getSerializationPolicy()); 

如果顯然不符合爲空。

即當在管線143

// Decode request 
rpcRequest = RPCCopy.getInstance().decodeRequest(payload, this.getClass(), this); 

decodeRequest - 方法引發IncompatibleRemoteServiceException發生。它在你的情況下。

與版本開始1.2.2線170個變爲

if (rpcRequest != null) 
{ 
    return RPCCopy.getInstance().encodeResponseForFailure(null, ex, rpcRequest.getSerializationPolicy()); 
} 
else 
{ 
    return RPCCopy.getInstance().encodeResponseForFailure(null, ex); 
} 

現在你應該得到正確的異常(IncompatibleRemoteServiceException)指向你真正的問題。

您還可以查看相應的提交/修復在SVN

Bad exception fix (issue 2663344)

,並在Bug-Tracker for Gilead

Wrong exception

所以這個問題在SVN二月以來解決相應問題的輸入07 2009或自Gilead版本1.2.2(2009年3月13日)

0

不知道它是否有幫助。只是一個猜測。你嘗試過使用非抽象超類嗎?有時在序列化之前(當然還有當前的事務範圍之外)手動取消/加載惰性對象引用或列表只是起作用,並且不需要Gilead。