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
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to