Здравствуйте, помогите, пожалуйста, разобраться с проблемой.
Имеется сервер Glassfish 3.0 на линуксе, выполняющий роль веб-сервера, с несколькими приложениями, которые
обращаются за данными к stateless бину (GateFacade) ejb3-приложения отдельного сервера (Glassfish 3.0, линукс). Периодически, после 4-8 часов простоя, то есть,
если не было ни одного обращения, соединение по rmi-iiop "протухает" и при попытке вызвать метод на веб сервере кидается такое исключение:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
ERROR 12-03-27 07:53:16.172 LoginService java.rmi.MarshalException: CORBA COMM_FAILURE 1398079696 Maybe; nested exception is:
org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 208 completed: Maybe
javax.ejb.EJBException: java.rmi.MarshalException: CORBA COMM_FAILURE 1398079696 Maybe; nested exception is:
org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 208 completed: Maybe
at ru.packages.ejb.Gate_Facade_Wrapper.login(ru/packages/ejb/_GateFacade_Wrapper.java) ~[Gate-ejb.jar:na]
...
Caused by: java.rmi.MarshalException: CORBA COMM_FAILURE 1398079696 Maybe; nested exception is:
org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 208 completed: Maybe
at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:270) ~[glassfish-corba-orb.jar:na]
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:200) ~[glassfish-corba-orb.jar:na]
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:147) ~[glassfish-corba-orb.jar:na]
at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:225) ~[glassfish-corba-orb.jar:na]
at ru.packages.ejb.__GateFacade_Remote_DynamicStub.login(ru/packages/ejb/__GateFacade_Remote_DynamicStub.java) ~[Gate-ejb.jar:na]
... 54 common frames omitted
org.omg.CORBA.COMM_FAILURE:
at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectionAbort(ORBUtilSystemException.java:3603) ~[glassfish-corba-orb.jar:na]
at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectionAbort(ORBUtilSystemException.java:3621) ~[glassfish-corba-orb.jar:na]
at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doOptimizedReadStrategy(SocketOrChannelConnectionImpl.java:1726) ~[na:na]
at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doWork(SocketOrChannelConnectionImpl.java:1216) ~[na:na]
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:492) ~[glassfish-corba-orbgeneric.jar:na]
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:528) ~[glassfish-corba-orbgeneric.jar:na]
Caused by: org.omg.CORBA.COMM_FAILURE:
at com.sun.corba.ee.impl.logging.ORBUtilSystemException.ioexceptionWhenReadingConnection(ORBUtilSystemException.java:3687) ~[glassfish-corba-orb.jar:na]
at com.sun.corba.ee.impl.logging.ORBUtilSystemException.ioexceptionWhenReadingConnection(ORBUtilSystemException.java:3706) ~[glassfish-corba-orb.jar:na]
at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.nonBlockingRead(SocketOrChannelConnectionImpl.java:1938) ~[na:na]
at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doOptimizedReadStrategy(SocketOrChannelConnectionImpl.java:1651) ~[na:na]
... 3 common frames omitted
Caused by: java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcher.read0(Native Method) ~[na:1.6.0_20]
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21) ~[na:1.6.0_20]
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233) ~[na:1.6.0_20]
at sun.nio.ch.IOUtil.read(IOUtil.java:206) ~[na:1.6.0_20]
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:236) ~[na:1.6.0_20]
at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.nonBlockingRead(SocketOrChannelConnectionImpl.java:1925) ~[na:na]
... 4 common frames omitted
Все последующие обращения за этим исключением проходят нормально до очередного периода бездействия (например ночи, когда пользователи отсутствуют).
В принципе, можно пытаться ловить это исключение и перезапрашивать еще раз, но может есть какое административное решение?
Пробовал изменять параметры ejb-пула в glassfish, не особо помогло:
1.
2.
<ejb-container max-pool-size="128" cache-idle-timeout-in-seconds="3600" pool-idle-timeout-in-seconds="43200"
steady-pool-size="16" session-store="${com.sun.aas.instanceRoot}/session-store" removal-timeout-in-seconds="18000">
EJB в клиентских приложениях ищутся так:
1.
2.
3.
4.
5.
[sun-web.xml]
<ejb-ref>
<ejb-ref-name>Facade</ejb-ref-name>
<jndi-name>corbaname:iiop:192.168.01.01:3700#ru.packages.ejb.GateFacade</jndi-name>
</ejb-ref>
[сервлет]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@EJB(name = "Facade")
GateFacade gateBean;
@Override
public void init() throws ServletException {
try {
super.init();
InitialContext ic = new InitialContext();
gateBean = (GateFacade) ic.lookup(GateFacade.class.getName());
} catch (NamingException ex) {
...
}
}