[Remoting] - Re: MulticastDetector crashes my network
by ron.sigal@jboss.com
Hi Santiago,
I think I see what is happening. As I commented in JBREM-991,
anonymous wrote :
| It seems that the problem is a combination of
|
| 1) the fact that listen() calls heartbeat() upon receiving something other than a Detection, and
|
| 2) the fact that when heartbeat() creates a null Detection (due to the fact that there are no servers running in the JVM), it sends an empty packet.
|
| So heartbeat() sends a null Detection, listen() receives it and calls heartbeat(), which sends out a Detection, etc. The problem is that, even though the timing of heartbeat() running in the Heartbeat TimerTask is regulated, listen() is not - it responds immediately upon reading something from the multicast socket, and the response can include a call to heartbeat.
|
| MulticastDetector.heartbeat() has been changed so that if it creates a null Detection, it just returns instead of sending it.
|
If you want to test my fix, it's just the insertion of two lines in org.jboss.remoting.detection.multicast.MulticastDetector.heartbeat()
| if(socket != null)
| {
| Detection msg = createDetection();
| if (msg == null) // <== inserted
| return; // <== inserted
| ...
|
-Ron
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4168612#4168612
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4168612
17 years, 8 months
[EJB/JBoss] - RMI invoke fail, ConcurrentModificationException was thrown.
by funnyone
Hi, everybody.
In our project, we hava a Jboss cluster on Solaris10 which has three nodes. Our client application have a thread which will invoke MBean's getStateList() method through RMI ervery 5 seconds. Generally, there is nothing wrong with it. But when the number of client is enough, A ConcurrentModificationException will be thrown. The full stack trace is:
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:841)
at java.util.HashMap$KeyIterator.next(HashMap.java:877)
at java.util.HashSet.writeObject(HashSet.java:254)
at sun.reflect.GeneratedMethodAccessor64.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
at org.jboss.invocation.MarshalledInvocation.writeExternal(MarshalledInvocation.java:620)
at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1307)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1288)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
at sun.rmi.server.UnicastRef.marshalValue(UnicastRef.java:258)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:117)
at org.jboss.invocation.jrmp.server.JRMPInvoker_Stub.invoke(Unknown Source)
at org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy.invoke(JRMPInvokerProxy.java:133)
at org.jboss.invocation.InvokerInterceptor.invokeInvoker(InvokerInterceptor.java:365)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:197)
at org.jboss.jmx.connector.invoker.client.InvokerAdaptorClientInterceptor.invoke(InvokerAdaptorClientInterceptor.java:66)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:70)
at org.jboss.proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
at $Proxy7.invoke(Unknown Source)
at com.datangmobile.oss.platform.servermonitor.client.rmi.RMIAdaptorHelper.invoke(RMIAdaptorHelper.java:35)
at com.datangmobile.oss.platform.servermonitor.client.ServerBeanCheckImp_J2EE.check(ServerBeanCheckImp_J2EE.java:39)
at com.datangmobile.oss.platform.servermonitor.client.ServerBeanListener.onTimer(ServerBeanListener.java:66)
at com.datangmobile.oss.platform.util.HeartTimer$1.run(HeartTimer.java:47)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
2008-08-04 10:05:58,703 DEBUG - [ServerBean Monitor]rmiConnect starting.................
2008-08-04 10:05:58,703 DEBUG - [ServerBean Monitor]rmiConnect={rmiIp=192.166.32.8,rmiPort=1100,rmiTimeout=5000
2008-08-04 10:05:58,750 DEBUG - [ServerBean Monitor]rmiConnect started..................
2008-08-04 10:05:58,750 DEBUG - [ServerBean Monitor]checking...................try[2]
2008-08-04 10:05:59,578 ERROR - [ServerBean Monitor]check error.
javax.management.MBeanException
at org.jboss.mx.interceptor.ReflectedDispatcher.handleInvocationExceptions(ReflectedDispatcher.java:180)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:163)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.jmx.connector.invoker.InvokerAdaptorService.invoke(InvokerAdaptorService.java:214)
at sun.reflect.GeneratedMethodAccessor102.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
at org.jboss.jmx.connector.invoker.SerializableInterceptor.invoke(SerializableInterceptor.java:74)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.invocation.jrmp.server.JRMPProxyFactory.invoke(JRMPProxyFactory.java:179)
at sun.reflect.GeneratedMethodAccessor101.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:818)
at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:419)
at sun.reflect.GeneratedMethodAccessor100.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
Caused by: javax.management.InstanceNotFoundException: datang:service=SvrMon is not registered.
at org.jboss.mx.server.registry.BasicMBeanRegistry.get(BasicMBeanRegistry.java:523)
at org.jboss.mx.server.registry.BasicMBeanRegistry.getValue(BasicMBeanRegistry.java:561)
at sun.reflect.GeneratedMethodAccessor103.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
... 41 more
We have only one clustered JBossAS(4.2.2.GA) and multiple clients(at least 20 in the real environment). One of the three nodes is master node whick deploys a MBean in scheduler-service.xml under server/default/deploy. the configeration is:
true
datang:name=SvrMon
check
NOW
3000
-1
the MBean which was deployed in the master cluster node is:
public class SvrMonService extends ServiceMBeanSupport implements SvrMonServiceMBean {
public void check()
public ArrayList getStatList(){ ...... }
.......
}
and the SvrMonServiceMBean is:
public interface SvrMonServiceMBean extends ServiceMBean{
/**
* return all MBean's state in the JbossAS
* @return SvrBeanList
*/
ArrayList getStateList();
void check();
}
ServiceMBean and ServiceMBeanSupport are the classes in the jboss-system.jar or jbossall-client.jar.
the client invoke code are here:
public class RMIAdaptorHelper {
private String _rmiHost = "127.0.0.1";
private int _rmiPort = 1099;
private int _timeout = 2000; // ms
private RMIAdaptor _server;
public RMIAdaptorHelper(String rmiHost, int rmiPort, int timeout)
throws CommunicationException, NamingException
{
this._rmiHost = rmiHost;
this._rmiPort = rmiPort;
this._timeout = timeout;
}
/**
* è¿ç¨è°ç¨ MBEAN
*/
public Object invoke(RmiInvokeObject rmido) throws Exception
{
ObjectName name = new ObjectName(rmido.getJndiname());
return _server.invoke(name, rmido.getMethodname(), rmido
.getMethodArgs(), rmido.getMethodArgsType());
}
/**
* è¿æ¥ Jboss rmi æå¡å¨
*/
public void connect() throws NamingException, CommunicationException
{
Properties prop = System.getProperties();
prop.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
prop.put(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interfaces");
prop.put(Context.PROVIDER_URL, "jnp://" + _rmiHost + ":" + _rmiPort);
prop.put("jnp.discoveryTimeout", String.valueOf(_timeout));
InitialContext ic = new InitialContext(prop);
if (_server != null)
{
Logger.getLogger(getClass()).debug("RMIAdaptorHelper not null");
_server = null;
}
Object o = ic.lookup("jmx/rmi/RMIAdaptor");
_server = (RMIAdaptor) o;
}
}
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4168611#4168611
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4168611
17 years, 8 months
Delivery Failure
by Postmaster
---------------------------------------------------------------------------------
The message you sent to gwnnet.net/master_logistics was rejected because it would exceed the quota for the mailbox.
The subject of the message follows:
Subject: =?windows-1251?B?zfPm7eAu/yDu8uTlLusu8yDv8O7kLuDmIA==?=
---------------------------------------------------------------------------------
17 years, 8 months
[JBoss Portal] - [org.jboss.portal.security.PortalPermissionCollection] Permi
by sbiwal
Hi,
I am trying to to use the PortalNode object for a portlet to browse through to its siblings etc (using getParent(), resolve()) functions. I get the following exception when using the resolve method -
| ERROR [org.jboss.portal.security.PortalPermissionCollection] Permission check against the repository failed
| org.hibernate.HibernateException: Unable to locate current JTA transaction
| at org.hibernate.context.JTASessionContext.currentSession(JTASessionContext.java:61)
| at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:544)
| at org.jboss.portal.core.impl.model.portal.PersistentPortalObjectContainer.getObjectNode(PersistentPortalObjectContainer.java:252)
| at org.jboss.portal.core.impl.model.portal.AbstractPortalObjectContainer.getPermission(AbstractPortalObjectContainer.java:166)
| at org.jboss.portal.core.model.portal.PortalObjectPermission.implies(PortalObjectPermission.java:227)
| at org.jboss.portal.security.PortalPermissionCollection.implies(PortalPermissionCollection.java:96)
| at org.jboss.portal.security.impl.jacc.Permissions.implies(Permissions.java:93)
| at org.jboss.portal.security.impl.jacc.SecurityContext.implies(SecurityContext.java:81)
| at org.jboss.portal.security.impl.jacc.JACCPortalAuthorizationManager.internalCheckPermission(JACCPortalAuthorizationManager.java:272)
| at org.jboss.portal.security.impl.jacc.JACCPortalAuthorizationManager.checkPermission(JACCPortalAuthorizationManager.java:301)
| at org.jboss.portal.security.impl.jacc.JACCPortalAuthorizationManager.checkPermission(JACCPortalAuthorizationManager.java:326)
| at org.jboss.portal.core.impl.api.node.PortalNodeImpl$NodeList.buildChildMap(PortalNodeImpl.java:389)
| at org.jboss.portal.core.impl.api.node.PortalNodeImpl$Siblings.createMap(PortalNodeImpl.java:440)
| at org.jboss.portal.core.impl.api.node.PortalNodeImpl$NodeList.getMap(PortalNodeImpl.java:355)
| at org.jboss.portal.core.impl.api.node.PortalNodeImpl.getChild(PortalNodeImpl.java:223)
| at org.jboss.portal.core.impl.api.node.PortalNodeImpl.resolve(PortalNodeImpl.java:244)
| at org.jboss.portlet.geodesy.WelcomePortlet1.doView(Unknown Source)
| at org.jboss.portlet.JBossPortlet.doDispatch(JBossPortlet.java:257)
| at org.jboss.portlet.JBossPortlet.render(JBossPortlet.java:244)
| at org.jboss.portlet.JBossPortlet.render(JBossPortlet.java:390)
| at org.jboss.portal.portlet.impl.jsr168.PortletContainerImpl.invokeRender(PortletContainerImpl.java:483)
| at org.jboss.portal.portlet.impl.jsr168.PortletContainerImpl.dispatch(PortletContainerImpl.java:405)
| at org.jboss.portal.portlet.container.PortletContainerInvoker$1.invoke(PortletContainerInvoker.java:86)
| at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:131)
| at org.jboss.portal.core.aspects.portlet.TransactionInterceptor.org$jboss$portal$core$aspects$portlet$TransactionInterceptor$invokeNotSupported$aop(TransactionInterceptor.java:86)
| at org.jboss.portal.core.aspects.portlet.TransactionInterceptor$invokeNotSupported_N4547270787964792031.invokeNext(TransactionInterceptor$invokeNotSupported_N4547270787964792031.java)
| at org.jboss.aspects.tx.TxPolicy.invokeInNoTx(TxPolicy.java:66)
| at org.jboss.aspects.tx.TxInterceptor$NotSupported.invoke(TxInterceptor.java:112)
| at org.jboss.portal.core.aspects.portlet.TransactionInterceptor$invokeNotSupported_N4547270787964792031.invokeNext(TransactionInterceptor$invokeNotSupported_N4547270787964792031.java)
| at org.jboss.aspects.tx.TxPolicy.invokeInNoTx(TxPolicy.java:66)
| at org.jboss.aspects.tx.TxInterceptor$NotSupported.invoke(TxInterceptor.java:102)
| at org.jboss.portal.core.aspects.portlet.TransactionInterceptor$invokeNotSupported_N4547270787964792031.invokeNext(TransactionInterceptor$invokeNotSupported_N4547270787964792031.java)
| at org.jboss.portal.core.aspects.portlet.TransactionInterceptor.invokeNotSupported(TransactionInterceptor.java)
| at org.jboss.portal.core.aspects.portlet.TransactionInterceptor.invoke(TransactionInterceptor.java:56)
| at org.jboss.portal.portlet.invocation.PortletInterceptor.invoke(PortletInterceptor.java:38)
| at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115)
| at org.jboss.portal.core.aspects.portlet.HeaderInterceptor.invoke(HeaderInterceptor.java:50)
| at org.jboss.portal.portlet.invocation.PortletInterceptor.invoke(PortletInterceptor.java:38)
| at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115)
| at org.jboss.portal.portlet.aspects.portlet.ProducerCacheInterceptor.invoke(ProducerCacheInterceptor.java:58)
| at org.jboss.portal.portlet.invocation.PortletInterceptor.invoke(PortletInterceptor.java:38)
| at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115)
| at org.jboss.portal.core.aspects.portlet.AjaxInterceptor.invoke(AjaxInterceptor.java:51)
| at org.jboss.portal.portlet.invocation.PortletInterceptor.invoke(PortletInterceptor.java:38)
| at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115)
| at org.jboss.portal.portlet.aspects.portlet.ModesInterceptor.invoke(ModesInterceptor.java:62)
| at org.jboss.portal.portlet.invocation.PortletInterceptor.invoke(PortletInterceptor.java:38)
| at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115)
| at org.jboss.portal.portlet.bridge.BridgeInterceptor.invoke(BridgeInterceptor.java:47)
| at org.jboss.portal.portlet.invocation.PortletInterceptor.invoke(PortletInterceptor.java:38)
| at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115)
| at org.jboss.portal.portlet.aspects.portlet.WindowStatesInterceptor.invoke(WindowStatesInterceptor.java:55)
| at org.jboss.portal.portlet.invocation.PortletInterceptor.invoke(PortletInterceptor.java:38)
| at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115)
| at org.jboss.portal.portlet.aspects.portlet.PortletSessionSynchronizationInterceptor.invoke(PortletSessionSynchronizationInterceptor.java:80)
| at org.jboss.portal.portlet.invocation.PortletInterceptor.invoke(PortletInterceptor.java:38)
| at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115)
| at org.jboss.portal.portlet.aspects.portlet.ContextTrackerInterceptor.invoke(ContextTrackerInterceptor.java:46)
| at org.jboss.portal.portlet.invocation.PortletInterceptor.invoke(PortletInterceptor.java:38)
| at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115)
| at org.jboss.portal.portlet.aspects.portlet.ContextDispatcherInterceptor$1.doCallback(ContextDispatcherInterceptor.java:104)
| at org.jboss.portal.web.command.CommandDispatcher$CallbackCommand.execute(CommandDispatcher.java:74)
| at sun.reflect.GeneratedMethodAccessor413.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
| at java.lang.reflect.Method.invoke(Unknown Source)
I have seen a lot of posts with this problem but no suggested solution. My portlet and all its siblings have viewrecursive permissions.
What does this exception really imply ? Which repository is it not able to access ?
Please help if anyone has any leads on this.
sbiwal
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4168608#4168608
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4168608
17 years, 8 months
[Remoting] - Re: Socket keep alive with client EJB and RMI over HTTP
by ron.sigal@jboss.com
I've been doing some experimenting, and I've found that if I run a loop like this:
|
| for (int i = 0; i < 100; i++)
| {
| Client client = new Client("http://localhost:5555");
| client.connect();
| client.invoke("abc");
| client.disconnect();
| Thread.sleep(5000);
| }
|
a new socket is created for each invocation, but if I reduce the delay to 4000 ms, a single socket gets reused. So it seems that Sun's java.net.HttpURLConnection implementation has some built in socket recycling mechanism, which, unfortunately, is inaccessible from the outside. I've tried playing with a ping mechanism to try to keep a single socket alive, but it's not working. Even if it did, there's no guarantee that it would work in another Java implementation.
One solution would be to change org.jboss.remoting.transport.http.HTTPClientInvoker to use something other than HttpURLConnection, something like Apache HttpClient. However, the sun is setting on Remoting 2 and rising on Remoting 3, so the time has passed for significant development of Remoting 2. Instead, we'll just make sure the problem does not arise in Remoting 3.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4168599#4168599
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4168599
17 years, 8 months