SequenceSessionBean.java
上传用户:dinglihq
上传日期:2013-02-04
资源大小:99958k
文件大小:3k
源码类别:

Java编程

开发平台:

Java

  1. package examples.sequencegenerator;
  2. // SequenceGeneratorBean.java
  3. public class SequenceSessionBean implements  javax.ejb.SessionBean {
  4.   private class Entry {
  5.     Sequence sequence;
  6.     int last;
  7.   };
  8.   private java.util.Hashtable _entries = new java.util.Hashtable();
  9.   private int _blockSize;
  10.   private int _retryCount;
  11.   private SequenceLocalHome _sequenceHome;
  12.   public void ejbActivate() {
  13.   }
  14.   public void ejbCreate() 
  15.   {
  16.   }
  17.   public void ejbPassivate() {
  18.   }
  19.   public void ejbRemove() {
  20.   }
  21. public int getNextSequenceNumber(String name)
  22. {
  23.     try
  24.     {
  25.         Entry entry = (Entry) _entries.get(name);
  26.         if (entry == null)
  27.         {
  28.             // add an entry to the sequence table
  29.             entry = new Entry();
  30.             try
  31.             {
  32.                 entry.sequence = _sequenceHome.findByPrimaryKey(name);
  33.             }
  34.             catch (javax.ejb.FinderException e)
  35.             {
  36.                 System.out.println("nnnn******** : " + e + "nnnn");
  37.                 // if we couldn't find it, then create it...
  38.                 entry.sequence = _sequenceHome.create(name);
  39.             }
  40.             _entries.put(name, entry);
  41.         }
  42.         if (entry.last % _blockSize == 0)
  43.         {
  44.             for (int retry = 0; true; retry++)
  45.             {
  46.                 try
  47.                 {
  48.                     entry.last = entry.sequence.getValueAfterIncrementingBy(_blockSize);
  49.                     break;
  50.                 }
  51.                 catch (javax.ejb.TransactionRolledbackLocalException e)
  52.                 {
  53.                     if (retry < _retryCount)
  54.                     {
  55.                         // we hit a concurrency exception, so try again...
  56.                         System.out.println("RETRYING");
  57.                         continue;
  58.                     }
  59.                     else
  60.                     {
  61.                        // we tried too many times, so fail...
  62.                         throw new javax.ejb.EJBException(e);
  63.                     }
  64.                 }
  65.             }
  66.         }
  67.  
  68.         return entry.last++;
  69.     }
  70.     catch (javax.ejb.CreateException e)
  71.     {
  72.         throw new javax.ejb.EJBException(e);
  73.     }
  74. }
  75.   public void setSessionContext( javax.ejb.SessionContext sessionContext) {
  76.     try {
  77.       javax.naming.Context namingContext = new javax.naming.InitialContext();
  78.       _blockSize = ((Integer) namingContext.lookup("java:comp/env/blockSize")).intValue();
  79.       _retryCount = ((Integer) namingContext.lookup("java:comp/env/retryCount")).intValue();
  80.       
  81.       _sequenceHome = (SequenceLocalHome) namingContext.lookup("SequenceLocalHome");
  82.     }
  83.     catch(javax.naming.NamingException e) {
  84.       throw new javax.ejb.EJBException(e);
  85.     }
  86.   }
  87. }