[jboss-user] [EJB 3.0 Users] - synchronized @Service

sfs do-not-reply at jboss.com
Thu Sep 24 04:24:42 EDT 2009


I want to build a caching singleton service with the jboss @Service annotation. In this singleton service the methods have to be synchronized. In my tests I saw, that the singleton instance of my service allows multiple active simultaneous threads (see bellow: Not synchronized output). When I mark the service methods with "synchronized", the service acts in the way I need it (see bellow: synchronized output). 

Her my questions:

1. Is it allowed to use the synchronized keyword (EJB spec) in my @Service singleton methods?

2. Are there any special jboss annotations for @Service singeltons, which I can use to mark service methods "SYNCHRONIZED"?

thanks a lot,
Florian


public interface JBossServiceTest
  | {
  |     public void test();    
  | }


@Remote(JBossServiceTest.class)
  | @Service
  | public class JBossServiceTestBean implements JBossServiceTest
  | {
  |     private static final Logger logger = Logger.getLogger(JBossServiceTestBean.class);
  | 
  |     private static int callCounter = 1;
  | 
  |     public JBossServiceTestBean()
  |     {
  | 
  |     }
  | 
  |     public void test()
  |     {
  |         int callId = callCounter++;
  | 
  |         logger.info("start test call " + callId);
  |         
  |         try
  |         {
  |             Thread.sleep(3000);
  |         }
  |         catch (Exception e)
  |         {
  |             logger.fatal("error :(", e);
  |         }
  | 
  |         logger.info("end test call " + callId);
  | 
  |     }
  | }

Not synchronized output:
10:01:19,751 INFO  [JBossServiceTestBean] start test call 1
  | 10:01:19,751 INFO  [JBossServiceTestBean] start test call 8
  | 10:01:19,751 INFO  [JBossServiceTestBean] start test call 9
  | 10:01:19,751 INFO  [JBossServiceTestBean] start test call 6
  | 10:01:19,751 INFO  [JBossServiceTestBean] start test call 7
  | 10:01:19,751 INFO  [JBossServiceTestBean] start test call 3
  | 10:01:19,751 INFO  [JBossServiceTestBean] start test call 2
  | 10:01:19,751 INFO  [JBossServiceTestBean] start test call 5
  | 10:01:19,751 INFO  [JBossServiceTestBean] start test call 1
  | 10:01:19,751 INFO  [JBossServiceTestBean] start test call 4
  | 10:01:22,752 INFO  [JBossServiceTestBean] end test call 1
  | 10:01:22,752 INFO  [JBossServiceTestBean] end test call 9
  | 10:01:22,752 INFO  [JBossServiceTestBean] end test call 7
  | 10:01:22,752 INFO  [JBossServiceTestBean] end test call 4
  | 10:01:22,752 INFO  [JBossServiceTestBean] end test call 1
  | 10:01:22,752 INFO  [JBossServiceTestBean] end test call 5
  | 10:01:22,752 INFO  [JBossServiceTestBean] end test call 2
  | 10:01:22,752 INFO  [JBossServiceTestBean] end test call 3
  | 10:01:22,752 INFO  [JBossServiceTestBean] end test call 6
  | 10:01:22,752 INFO  [JBossServiceTestBean] end test call 8

@Remote(JBossServiceTest.class)
  | @Service
  | public class JBossServiceTestBean implements JBossServiceTest
  | {
  |     private static final Logger logger = Logger.getLogger(JBossServiceTestBean.class);
  | 
  |     private static int callCounter = 1;
  | 
  |     public JBossServiceTestBean()
  |     {
  | 
  |     }
  | 
  |     public synchronized void test()
  |     {
  |         int callId = callCounter++;
  | 
  |         logger.info("start test call " + callId);
  |         
  |         try
  |         {
  |             Thread.sleep(3000);
  |         }
  |         catch (Exception e)
  |         {
  |             logger.fatal("error :(", e);
  |         }
  | 
  |         logger.info("end test call " + callId);
  | 
  |     }
  | }

synchronized output:
10:03:29,539 INFO  [JBossServiceTestBean] start test call 1
  | 10:03:32,539 INFO  [JBossServiceTestBean] end test call 1
  | 10:03:32,539 INFO  [JBossServiceTestBean] start test call 2
  | 10:03:35,540 INFO  [JBossServiceTestBean] end test call 2
  | 10:03:35,540 INFO  [JBossServiceTestBean] start test call 3
  | 10:03:38,540 INFO  [JBossServiceTestBean] end test call 3
  | 10:03:38,540 INFO  [JBossServiceTestBean] start test call 4
  | 10:03:41,540 INFO  [JBossServiceTestBean] end test call 4
  | 10:03:41,540 INFO  [JBossServiceTestBean] start test call 5
  | 10:03:44,540 INFO  [JBossServiceTestBean] end test call 5
  | 10:03:44,540 INFO  [JBossServiceTestBean] start test call 6
  | 10:03:47,540 INFO  [JBossServiceTestBean] end test call 6
  | 10:03:47,540 INFO  [JBossServiceTestBean] start test call 7
  | 10:03:50,540 INFO  [JBossServiceTestBean] end test call 7
  | 10:03:50,540 INFO  [JBossServiceTestBean] start test call 8
  | 10:03:53,541 INFO  [JBossServiceTestBean] end test call 8
  | 10:03:53,541 INFO  [JBossServiceTestBean] start test call 9
  | 10:03:56,541 INFO  [JBossServiceTestBean] end test call 9
  | 10:03:56,541 INFO  [JBossServiceTestBean] start test call 10
  | 10:03:59,541 INFO  [JBossServiceTestBean] end test call 10

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4256804#4256804

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4256804



More information about the jboss-user mailing list