Gilead를 사용하여 상속을 가진 클래스를 지속하십시오
문제
Gilead를 사용하여 GWT 프로젝트에서 엔티티를 지속하고 문제가 발생합니다. 내 엔티티 (ID 등) 전반에 걸쳐 공통적 인 속성을 보유하기 위해 부모 클래스를 만들고 싶습니다. 지속될 때 나는 널 포인터 예외를 얻습니다.
학부모 수업 :
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-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>
지속될 때 추적을 쌓습니다.
net.sf.gilead.gwt.gwt.gwt.gwt.persistentremoteservice.processcall (com.google.gwt.user.server.rpc.remoteserviceservercall의 java.lang.nullpointerexception (remoteserviceservervlet. servlet.http.httpservlet.service (httpservlet.java:754) at javax.servlet.http.httpservlet.service (httpservlet.java:847) at org.apache.catalina.core.applicationfilterchain.servletervervletervletevercain. org.apache.catalina.core.standardwrappervalve.invoke (org.apache.catalina.core.standardContextValve.invokeInternal (org.apache.catalina.catalina.catalina.catalina.catalina.catalina.catalina. (StandardContextValve.java:218) org.apache.catalina.core.standardPipeline.doinvoke (StandardPipeline.java:648)의 org.apache.catalina.core.standardPipeline.doinvoke (StandardPipeline.java:593)의 com.sun. Enterprise.web.webPipeline.invoke (webPipeline.java:94)의 com.sun.enterprise.web.pesessionLockingStandardPipeline.inv org.apache.catalina.core.standardhostvalve.invoke (org.apache.catalina.core.standardpipeline.doinvoke (StandardPipeline.java:648) at Org. .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) org.apache.catalina.core.standardEnginevalve.invoke (StandardEngineValve.java:166) at org.apache.catalina.core.standardPipeline.doinvoke (Org.apache.catalina.core. StandardPipeline.doinvoke (StandardPipeline.java:593) at org.apache.catalina.core.invoke (표준 pipeline.java:587) at org.apache.catalina.core.containerbase.invoke (containerbase.java:1096) at Org. .apache.coyote.tomcat5.coyoteadapter.service (coyoteadapter.java:288) com.sun.enterprise.web.connector.grizzly.defaultProcessortask.invokeadapter (defa com.sun.enterprise.web.connector.grizzly.defaultprocessortask.doprocess (defaultprocessortask.java:579)의 ultprocessortask.java:647) com.sun.sun.enterprise.web.connector.grizzly.defaultprocessorcess (defaultprocess.java:579). 831)에서 com.sun.enterprise.web.connector.grizzly.defaultreadtask.executeprocessortask (defaultreadtask.java:341)의 com.sun.enterprise.web.connector.connector.defaultreadtask.dotask (defaultreadtask.java:263) at Coma:263) .sun.enterprise.web.connector.grizzly.defaultreadtask.dotask (defaultreadtask.java:214)의 com.sun.enterprise.web.portunificinificepipeline $ putask.dotask (com.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun. .web.connector.grizzly.taskbase.run (taskbase.java:265)의 com.sun.enterprise.web.connector.grizzly.ssl.sslworkerthread.run (sslworkerthread.java:106)
해결책
Gilead를 사용하고 있습니까? < 1.2.2?
그렇다면 Gilead를 업그레이드하십시오. 그런 다음 다시 실행하고 새 예외 메시지를 확인하십시오. 아마도 어떤 종류의 오해.
전체 설명 :
버전 1.2.1에서 persistentremoteservice.java의 소스 코드를 확인하면
persistentremoteservice.java v1.2.1
170 행에는 다음 줄이 보입니다
return RPCCopy.getInstance().encodeResponseForFailure(null, ex, rpcRequest.getSerializationPolicy());
이것은 분명히 a NullPointerException
만약에 rpcRequest
NULL입니다.
그것은 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에서 해당 커밋/수정을 확인할 수도 있습니다.
그리고 해당 이슈 항목 길르앗의 버그 트래커
이 문제는 2009 년 2 월 7 일부터 SVN에서 또는 Gilead 버전 1.2.2 (2009 년 3 월 13 일) 이후에 해결됩니다.
다른 팁
그것이 도움이되는지 확실하지 않습니다. 단지 추측. 비공개 슈퍼 클래스로 시도 했습니까? 때로는 직렬화하기 전에 (그리고 현재 트랜잭션 범위 외부)가 작동하기 전에 게으른 물체 참조 또는 목록을 수동으로 무효화/간절히로드하는 경우가 많으며, 단지 작동하며, 길르앗할 필요가 없습니다.