시스템 설정은 두 개의 Weblogic 10.3 서버로 구성됩니다. 하나는 프리젠 테이션 계층을 호스팅하고 다른 하나는 EJB를 호스팅합니다.Weblogic EJB 호출은 OptionalDataException으로 보통로드에서 실패하기 시작합니다.
java.rmi.RemoteException: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.io.OptionalDataException
스택 추적 :
시스템은 다음과 같은 오류와 함께 실패하는 EJB 방법은 EJB 서버 시작에 대한 프리젠 테이션 서버에서 호출 후 약간의 시간 (몇 일 한)에 대한 중간 부하에서 잘 실행java.io.OptionalDataException
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1349)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:197)
at weblogic.rjvm.MsgAbbrevInputStream.readObject(MsgAbbrevInputStream.java:564)
at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:193)
at weblogic.jndi.internal.RootNamingNode_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:589)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:230)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:477)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:473)
at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)
첫 번째 OptionalDataException이 발생하면 모든 후속 호출이 동일한 결과로 실패합니다. 일부 출처는 클러스터 멀티 캐스트 포트가 잘못 구성된 것과 관련 될 수 있다고 제안합니다. 그러나 이러한 서버는 클러스터에 속하지 않습니다.
EJB 서버를 부팅하면 항상 일시적으로 문제가 해결되지만 문제가 다시 발생하는 것으로 보입니다.
업데이트 : 문제가 (아래 내 자신의 대답을 참조) 결국 소켓 연결 수에 오버 플로우 관련 하지 것 같다. 네트워크 클래스 로딩을 허용하지 않으면 일주일 동안 꾸준히 실행되어 프리젠 테이션 서버에서 OptionalDataExceptions를 다시 받기 시작했습니다 (아래의 스택 추적). 시스템이 일주일 동안 잘 작동하고 실패하기 시작하는 것은 매우 이상합니다.
javax.naming.CommunicationException [Root exception is java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.io.OptionalDataException]
at weblogic.jndi.internal.ExceptionTranslator.toNamingException(ExceptionTranslator.java:74)
at weblogic.jndi.internal.WLContextImpl.translateException(WLContextImpl.java:439)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:395)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:380)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
...
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.io.OptionalDataException
at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:234)
at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:348)
at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:259)
at weblogic.jndi.internal.ServerNamingNode_1030_WLStub.lookup(Unknown Source)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:392)
... 38 more
Caused by: java.io.OptionalDataException
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1349)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at
weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:197)
at weblogic.rjvm.MsgAbbrevInputStream.readObject(MsgAbbrevInputStream.java:564)
at
weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:193)
at weblogic.jndi.internal.RootNamingNode_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:589)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:230)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:477)
at
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:473)
at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)
... 2 more
우리는 초기 문맥에게 꽤 표준 방법을 구하십시오 어떤 얻은 참조 유사한로 OptionalDataException 실패에
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL, serverPath);
Context context = new InitialContext(p);
는 또한 호출합니다. 프리젠 테이션 서버 만 부팅하면 일시적으로 문제가 해결됩니다.
EJB 서버도 EOFException과 같은 예외를 동시에 throw합니까? EJB Remote가 서버에서 전혀 호출되지 않았는지 아니면 실패했는지에 대해 드릴 다운하려고합니다. – JoseK
아주 좋은 지적입니다. 100 % 확실하지는 않지만 요청이 EJB 서버에 도착하기 전에 실패했다고 생각합니다. 적어도 EJB 서버 로그에는 아무것도 없습니다. 로깅 수준이 이후로 증가 했으므로이 문제가 다시 발생하면 확실하게 알 수 있습니다. 문제가 발생하는 동안 서버가 실행 중이며 내부 예약 된 작업을 처리 했으므로 적어도 서버가 데이터베이스에 연결할 수 있음을 알 수 있습니다. – MarkoU
그리고이 오류가 일반적으로 발생하는 클러스터링과 관련하여 두 서버가 모든 클러스터의 일부가 아니거나 SAME 클러스터의 일부가 아닙니다. 많은 URL이이 오류에 대한 클러스터 멀티 캐스트 간섭을 제안합니다. – JoseK