2009-08-21 3 views
0

Gilead를 사용하여 GWT 프로젝트에서 내 엔티티를 유지하면서 문제가 발생했습니다. 내 엔티티 (ID 등) 전반에 공통적 인 몇 가지 속성을 유지하기 위해 부모 클래스를 만들고 싶습니다. 영속 할 때 나는 널 포인터 예외를 얻는다.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)에 javax.servlet.http.HttpServlet.service (HttpServlet.java:754) javax.servlet.http.HttpServlet.service에서 (HttpServlet.java:847)에서 org.apache.catalina.core.ApplicationFilterChain.servletService (ApplicationFilterChain.java:427) at org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:315) at org.apache.catalina.core.StandardContextValve.invokeInternal (StandardContextValve.java:287) at org .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. Enterprise.web.WebPipeline.invoke (WebPipeline.java:94) com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke (PESessionLockingStandardPipeline.java:98) at org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve. java : 222) 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.cor org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java에서 org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:166) 에서 e.ContainerBase.invoke (ContainerBase.java:1096) : 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. com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter에서 org.apache.coyote.tomcat5.CoyoteAdapter.service (CoyoteAdapter.java:288) 에서 core.ContainerBase.invoke (ContainerBase.java:1096) (DefaultProcessorTask.java:647) com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess (DefaultProcessorTask .java : 579) com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process (DefaultProcessorTask.java:831) 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)) (com.sun.enterprise.web.portunif).PortUnificationPipeline $ PUTask.doTask (PortUnificationPipeline.java:380) com.sun.enterprise.web.connector.grizzly에서 com.sun.enterprise.web.connector.grizzly.TaskBase.run (TaskBase.java:265) 에 있습니다. 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()); 

분명히 NullPointerException이면 실패합니다. rpcRequest이 null입니다. 라인 143

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

decodeRequest -Method는 IncompatibleRemoteServiceException을 발생 때 발생

. 너의 경우에 어떤 일을하는지. 버전을 시작으로

이제 당신이 진짜 문제에 당신을 가리키는 바로 예외 (IncompatibleRemoteServiceException)를 받아야 라인을

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

-170 변경 1.2.2.

는 또한 SVN

Bad exception fix (issue 2663344)

하고 그래서이 문제가 월부터 SVN에서 해결 된 Bug-Tracker for Gilead

Wrong exception

에서 해당 문제 항목에 커밋 해당/수정을 확인할 수 있습니다 07 2009 또는 Gilead 버전 1.2.2 이후 (2009 년 3 월 13 일)

0

도움이 될지 확실하지 않습니다. 그냥 추측. 추상적이지 않은 수퍼 클래스를 사용해 보셨습니까? 직렬화하기 전에 수동으로 무효화 된 객체 참조 나리스트를 수동으로 무효화하거나 열심히로드하는 경우 (그리고 현재의 트랜잭션 범위 밖에서도) Gilead가 필요하지 않습니다.