Octavian Pop [
https://community.jboss.org/people/PopOctavian] created the discussion
"JBoss 6.1.0.Final SFSB concurrency issue"
To view the discussion, visit:
https://community.jboss.org/message/828891#828891
--------------------------------------------------------------
Hi,
I am trying to run a test to investigate a performace issue after upgrading from JBoss
4.0.5 to 6.1. For this I use a simple test application with a service which starts
threads, each thread looks-up a SFSB instace and execute a method to increment a number.
From this test I notticed that SFSB method calls in the multi-threaded
test are serialized - one execution after the other. Investigating in more detail I found
that this serialization is caused by CMC interceptor from
server/current/deploy/ejb3-interceptors-aop.xml.
If I commented out CMC, performance
increased significantly.
Is this a known behavior?
What are the implications if I comment CMC?
Thanks.
Below are code snippets from test:
@Service
public class TestingService
{
public static int numberOfThreads=2;
public static void start() throws Exception
{
startTest(numberOfThreads);
}
public static void startTest(int threadNumber) throws InterruptedException
{
Thread [] threads = new Thread[threadNumber];
for (int i=0;i< threadNumber;i++)
{
Thread t = new Thread()
{
public void run()
{
Client testClient = new Client();
testClient.processNumber(Math.round(Math.random()*1000));
testClient.destroy();
}
};
t.start();
threads[i] = t;
}
for(int i=0; i<threadNumber; i++)
{
threads[i].join();
}
}
}
public class Client
{
IGenericSFB genericSFB;
public Client()
{
genericSFB = (IGenericSFB)
ServiceLocator.getLocalService(GenericSFB.class.getSimpleName());
System.out.println("This address " + genericSFB + " " +
genericSFB.hashCode());
}
public void processNumber(Long number)
{
System.out.println("Client - Start incrementing " + number);
genericSFB.incrementNumber(number);
System.out.println("Client - Finish incrementing " + number);
}
...
@Stateful
public class GenericSFB implements IGenericSFB, Serializable
{
private int number;
private String stuff;
private String someOtherStuff;
public Long incrementNumber(Long number)
{
System.out.println("SFB - start incrementing number " + number + "
by " + this);
try
{
Thread.currentThread().sleep(10000);
}
catch (InterruptedException e){}
System.out.println("SFB - finish incrementing number " + number);
return 0L;
}
...
--------------------------------------------------------------
Reply to this message by going to Community
[
https://community.jboss.org/message/828891#828891]
Start a new discussion in EJB3 at Community
[
https://community.jboss.org/choose-container!input.jspa?contentType=1&...]