[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openejb-cvs
Subject:    svn commit: r672566 [1/9] - in /openejb/trunk/openejb3: ./ api/
From:       dblevins () apache ! org
Date:       2008-06-28 18:48:33
Message-ID: 20080628184840.289212388A0C () eris ! apache ! org
[Download RAW message or body]

Author: dblevins
Date: Sat Jun 28 11:48:28 2008
New Revision: 672566

URL: http://svn.apache.org/viewvc?rev=672566&view=rev
Log:
OPENEJB-836: Singleton Session Beans
Does it work? Yes.  Is it complete? No.

Added:
    openejb/trunk/openejb3/api/
    openejb/trunk/openejb3/api/ejb31-api-experimental/
    openejb/trunk/openejb3/api/ejb31-api-experimental/pom.xml
    openejb/trunk/openejb3/api/ejb31-api-experimental/src/
    openejb/trunk/openejb3/api/ejb31-api-experimental/src/main/
    openejb/trunk/openejb3/api/ejb31-api-experimental/src/main/java/
    openejb/trunk/openejb3/api/ejb31-api-experimental/src/main/java/javax/
    openejb/trunk/openejb3/api/ejb31-api-experimental/src/main/java/javax/ejb/
    openejb/trunk/openejb3/api/ejb31-api-experimental/src/main/java/javax/ejb/Singleton.java
  openejb/trunk/openejb3/api/pom.xml
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/SingletonBeanInfo.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/SingletonSessionContainerInfo.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/
                
      - copied from r672456, \
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonBeanManagedTxPolicy.java \
(with props)  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java \
(with props)  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContext.java \
(with props)  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbHomeHandler.java \
(with props)  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbObjectHandler.java \
(with props)  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java \
(with props)  openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/
  openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonContainerTest.java
  openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SingletonBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/
                
      - copied from r672456, \
openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateless/
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/AnnotatedFieldInjectionSingletonBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicSingletonBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicSingletonBusinessLocal.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicSingletonBusinessRemote.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicSingletonHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicSingletonInterceptedBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicSingletonInterceptedLocal.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicSingletonInterceptedRemote.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicSingletonLocalHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicSingletonLocalObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicSingletonObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicSingletonPojoBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BeanTxSingletonBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BeanTxSingletonHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BeanTxSingletonObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/ContainerTxSingletonBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/ContainerTxSingletonHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/ContainerTxSingletonObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/ContextLookupSingletonBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/ContextLookupSingletonPojoBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/EncSingletonBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/EncSingletonHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/EncSingletonObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/FieldInjectionSingletonBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/RmiIiopSingletonBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/RmiIiopSingletonHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/RmiIiopSingletonObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/SetterInjectionSingletonBean.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/
                
      - copied from r672456, \
openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedFieldInjectionSingletonLocalTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedFieldInjectionSingletonPojoHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedFieldInjectionSingletonPojoLocalHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedFieldInjectionSingletonTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedSetterInjectionSingletonLocalTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedSetterInjectionSingletonPojoHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedSetterInjectionSingletonPojoLocalHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedSetterInjectionSingletonTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/BMTSingletonAllowedOperationsTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/BasicSingletonLocalTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/BasicSingletonTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonAllowedOperationsTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonAnnotatedFieldInjectionTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonBeanTxTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonContainerTxTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonContextLookupTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonDefaultInterceptorTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonEjbHomeTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonEjbMetaDataTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonEjbObjectTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonFieldInjectionTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonHandleTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonHomeHandleTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonInterceptorTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonJndiEncTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonJndiTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonLocalBusinessIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonLocalIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonLocalTestSuite.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoContextLookupTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoEjbHomeTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoEjbLocalHomeTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoEjbLocalObjectTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoEjbMetaDataTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoEjbObjectTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoHandleTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoHomeHandleTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoLocalHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoLocalJndiTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoRemoteIntrfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonPojoRemoteJndiTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonRemoteBusinessIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonRemoteIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonRmiIiopTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonSetterInjectionTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/SingletonTestSuite.java
  openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/SingletonEJBHomeHandler.java
  openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/SingletonEJBObjectHandler.java
 Removed:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/StatelessBeanManagedTxPolicy.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/StatelessContainer.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/StatelessContext.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/StatelessEjbHomeHandler.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/StatelessEjbObjectHandler.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/StatelessInstanceManager.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/AnnotatedFieldInjectionStatelessBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicStatelessBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicStatelessBusinessLocal.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicStatelessBusinessRemote.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicStatelessHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicStatelessInterceptedBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicStatelessInterceptedLocal.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicStatelessInterceptedRemote.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicStatelessLocalHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicStatelessLocalObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicStatelessObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BasicStatelessPojoBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BeanTxStatelessBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BeanTxStatelessHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/BeanTxStatelessObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/ContainerTxStatelessBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/ContainerTxStatelessHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/ContainerTxStatelessObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/ContextLookupStatelessBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/ContextLookupStatelessPojoBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/EncStatelessBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/EncStatelessHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/EncStatelessObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/FieldInjectionStatelessBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/RmiIiopStatelessBean.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/RmiIiopStatelessHome.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/RmiIiopStatelessObject.java
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/singleton/SetterInjectionStatelessBean.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedFieldInjectionStatelessLocalTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedFieldInjectionStatelessPojoHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedFieldInjectionStatelessPojoLocalHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedFieldInjectionStatelessTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedSetterInjectionStatelessLocalTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedSetterInjectionStatelessPojoHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedSetterInjectionStatelessPojoLocalHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/AnnotatedSetterInjectionStatelessTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/BMTStatelessAllowedOperationsTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/BasicStatelessLocalTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/BasicStatelessTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessAllowedOperationsTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessAnnotatedFieldInjectionTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessBeanTxTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessContainerTxTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessContextLookupTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessDefaultInterceptorTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessEjbHomeTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessEjbMetaDataTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessEjbObjectTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessFieldInjectionTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessHandleTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessHomeHandleTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessInterceptorTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessJndiEncTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessJndiTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessLocalBusinessIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessLocalIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessLocalTestSuite.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoContextLookupTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoEjbHomeTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoEjbLocalHomeTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoEjbLocalObjectTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoEjbMetaDataTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoEjbObjectTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoHandleTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoHomeHandleTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoLocalHomeIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoLocalJndiTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoRemoteIntrfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessPojoRemoteJndiTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessRemoteBusinessIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessRemoteIntfcTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessRmiIiopTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessSetterInjectionTests.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessTestClient.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/StatelessTestSuite.java
 Modified:
    openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
  openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/webapp/viewejb.jsp
  openejb/trunk/openejb3/container/openejb-core/pom.xml
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/BeanType.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanInfo.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/BeanTypes.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WsDeployer.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckPersistenceRefs.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmMetaData.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/EjbWsContext.java
  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/Instance.java
  openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml
  openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
  openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/iTest.java
  openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SessionType.java
  openejb/trunk/openejb3/itests/openejb-itests-app/pom.xml
    openejb/trunk/openejb3/itests/openejb-itests-beans/pom.xml
    openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml
  openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/openejb-jar.xml
  openejb/trunk/openejb3/itests/openejb-itests-client/pom.xml
    openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/ClientTestSuite.java
  openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/singleton/MiscEjbTests.java
  openejb/trunk/openejb3/pom.xml
    openejb/trunk/openejb3/server/openejb-client/pom.xml
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBHomeHandler.java
  openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBInvocationHandler.java
  openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java
  openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java
  openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
  openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/StatefulEJBHomeHandler.java
  openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/StatelessEJBHomeHandler.java
  openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/RemoteiTest.java
  openejb/trunk/openejb3/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/HttpEjbServerTest.java
  openejb/trunk/openejb3/server/openejb-webadmin/src/main/java/org/apache/openejb/webadmin/clienttools/ViewEjbBean.java
  openejb/trunk/openejb3/server/openejb-webadmin/src/main/java/org/apache/openejb/webadmin/main/DeploymentListBean.java
  openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java


Added: openejb/trunk/openejb3/api/ejb31-api-experimental/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/api/ejb31-api-experimental/pom.xml?rev=672566&view=auto
 ==============================================================================
--- openejb/trunk/openejb3/api/ejb31-api-experimental/pom.xml (added)
+++ openejb/trunk/openejb3/api/ejb31-api-experimental/pom.xml Sat Jun 28 11:48:28 \
2008 @@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" \
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \
http://maven.apache.org/maven-v4_0_0.xsd"> +  <parent>
+    <artifactId>api</artifactId>
+    <groupId>org.apache.openejb</groupId>
+    <version>3.1-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>ejb31-api-experimental</artifactId>
+  <packaging>jar</packaging>
+  <name>OpenEJB :: APIs :: EJB 3.1 Experimental</name>
+
+</project>

Added: openejb/trunk/openejb3/api/ejb31-api-experimental/src/main/java/javax/ejb/Singleton.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/api/ejb31-api-experimental/src/main/java/javax/ejb/Singleton.java?rev=672566&view=auto
 ==============================================================================
--- openejb/trunk/openejb3/api/ejb31-api-experimental/src/main/java/javax/ejb/Singleton.java \
                (added)
+++ openejb/trunk/openejb3/api/ejb31-api-experimental/src/main/java/javax/ejb/Singleton.java \
Sat Jun 28 11:48:28 2008 @@ -0,0 +1,11 @@
+package javax.ejb;
+
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.TYPE})
+@java.lang.annotation.Retention(value = \
java.lang.annotation.RetentionPolicy.RUNTIME) +public @interface Singleton {
+    java.lang.String name() default "";
+
+    java.lang.String mappedName() default "";
+
+    java.lang.String description() default "";
+}

Added: openejb/trunk/openejb3/api/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/api/pom.xml?rev=672566&view=auto
 ==============================================================================
--- openejb/trunk/openejb3/api/pom.xml (added)
+++ openejb/trunk/openejb3/api/pom.xml Sat Jun 28 11:48:28 2008
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" \
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \
http://maven.apache.org/maven-v4_0_0.xsd"> +  <parent>
+    <artifactId>openejb</artifactId>
+    <groupId>org.apache.openejb</groupId>
+    <version>3.1-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>api</artifactId>
+  <packaging>pom</packaging>
+  <name>OpenEJB :: APIs</name>
+
+  <modules>
+    <module>ejb31-api-experimental</module>
+  </modules>
+</project>

Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/opene \
jb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml \
                (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml \
Sat Jun 28 11:48:28 2008 @@ -122,6 +122,21 @@
 
   <!--
   # ==========================================================
+  # Default Singleton SessinBean Container
+  # ==========================================================
+  -->
+  <ServiceProvider
+          id="Default Singleton Container"
+          service="Container"
+          types="SINGLETON"
+          constructor="id, transactionManager, securityService"
+          class-name="org.apache.openejb.core.singleton.SingletonContainer">
+
+  </ServiceProvider>
+
+
+  <!--
+  # ==========================================================
   # Default Stateful SessinBean Container
   # ==========================================================
   -->

Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/webapp/viewejb.jsp
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/opene \
jb-tomcat-webapp/src/main/webapp/viewejb.jsp?rev=672566&r1=672565&r2=672566&view=diff \
                ==============================================================================
                
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/webapp/viewejb.jsp \
                (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/webapp/viewejb.jsp \
Sat Jun 28 11:48:28 2008 @@ -172,6 +172,9 @@
             case STATELESS:
                 type = "Stateless SessionBean";
                 break;
+            case SINGLETON:
+                type = "Singleton SessionBean";
+                break;
             default:
                 type = "Unkown Bean Type";
                 break;

Modified: openejb/trunk/openejb3/container/openejb-core/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/pom.xml?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/pom.xml (original)
+++ openejb/trunk/openejb3/container/openejb-core/pom.xml Sat Jun 28 11:48:28 2008
@@ -212,6 +212,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.openejb</groupId>
+      <artifactId>ejb31-api-experimental</artifactId>
+      <version>${version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
       <artifactId>openejb-loader</artifactId>
       <version>${version}</version>
     </dependency>

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/BeanType.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/BeanType.java?rev=672566&r1=672565&r2=672566&view=diff \
                ==============================================================================
                
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/BeanType.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/BeanType.java \
Sat Jun 28 11:48:28 2008 @@ -20,14 +20,14 @@
  * @version $Rev$ $Date$
  */
 public enum BeanType {
-    STATEFUL, STATELESS, BMP_ENTITY, CMP_ENTITY, MESSAGE_DRIVEN;
+    STATEFUL, STATELESS, SINGLETON, BMP_ENTITY, CMP_ENTITY, MESSAGE_DRIVEN;
 
     public boolean isEntity(){
         return this == CMP_ENTITY || this == BMP_ENTITY;
     }
 
     public boolean isSession(){
-        return this == STATEFUL || this == STATELESS;
+        return this == STATEFUL || this == STATELESS || this == SINGLETON;
     }
 
     public boolean isMessageDriven() {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java \
Sat Jun 28 11:48:28 2008 @@ -215,6 +215,9 @@
                             case STATELESS:
                                 entry += "STATELESS   ";
                                 break;
+                            case SINGLETON:
+                                entry += "SINGLETON   ";
+                                break;
                             case MESSAGE_DRIVEN:
                                 entry += "MESSAGE     ";
                                 break;

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java \
Sat Jun 28 11:48:28 2008 @@ -60,6 +60,8 @@
             ejbType = BeanType.STATEFUL;
         } else if (bean.type == EnterpriseBeanInfo.STATELESS) {
             ejbType = BeanType.STATELESS;
+        } else if (bean.type == EnterpriseBeanInfo.SINGLETON) {
+            ejbType = BeanType.SINGLETON;
         } else if (bean.type == EnterpriseBeanInfo.MESSAGE) {
             ejbType = BeanType.MESSAGE_DRIVEN;
         } else if (bean.type == EnterpriseBeanInfo.ENTITY) {
@@ -99,7 +101,7 @@
         }
 
         Class serviceEndpoint = null;
-        if (BeanType.STATELESS == ejbType){
+        if (BeanType.STATELESS == ejbType || BeanType.SINGLETON == ejbType ){
             if(bean.serviceEndpoint != null){
                 serviceEndpoint = loadClass(bean.serviceEndpoint, \
"classNotFound.sei");  }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanInfo.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/assembler/classic/EnterpriseBeanInfo.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanInfo.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanInfo.java \
Sat Jun 28 11:48:28 2008 @@ -29,6 +29,8 @@
 
     public static final int MESSAGE = 3;
 
+    public static final int SINGLETON = 4;
+
     public int type;
 
     public String codebase;

Added: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/SingletonBeanInfo.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/assembler/classic/SingletonBeanInfo.java?rev=672566&view=auto
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/SingletonBeanInfo.java \
                (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/SingletonBeanInfo.java \
Sat Jun 28 11:48:28 2008 @@ -0,0 +1,23 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb.assembler.classic;
+
+public class SingletonBeanInfo extends EnterpriseBeanInfo {
+    public SingletonBeanInfo() {
+        type = SINGLETON;
+    }
+}

Added: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/SingletonSessionContainerInfo.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/assembler/classic/SingletonSessionContainerInfo.java?rev=672566&view=auto
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/SingletonSessionContainerInfo.java \
                (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/SingletonSessionContainerInfo.java \
Sat Jun 28 11:48:28 2008 @@ -0,0 +1,20 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb.assembler.classic;
+
+public class SingletonSessionContainerInfo extends ContainerInfo {
+}

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/config/AnnotationDeployer.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java \
Sat Jun 28 11:48:28 2008 @@ -76,6 +76,7 @@
 import org.apache.openejb.jee.TransactionType;
 import org.apache.openejb.jee.WebApp;
 import org.apache.openejb.jee.WebserviceDescription;
+import org.apache.openejb.jee.SingletonBean;
 import static org.apache.openejb.util.Join.join;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
@@ -112,6 +113,7 @@
 import javax.ejb.TransactionAttributeType;
 import javax.ejb.TransactionManagement;
 import javax.ejb.TransactionManagementType;
+import javax.ejb.Singleton;
 import javax.interceptor.ExcludeClassInterceptors;
 import javax.interceptor.ExcludeDefaultInterceptors;
 import javax.interceptor.Interceptors;
@@ -329,6 +331,26 @@
             /* 19.2:  ejb-name: Default is the unqualified name of the bean class */
 
             EjbJar ejbJar = ejbModule.getEjbJar();
+            for (Class<?> beanClass : finder.findAnnotatedClasses(Singleton.class)) \
{ +                Singleton singleton = beanClass.getAnnotation(Singleton.class);
+                String ejbName = getEjbName(singleton, beanClass);
+
+                if (!isValidAnnotationUsage(Singleton.class, beanClass, ejbName, \
ejbModule)) continue; +
+                EnterpriseBean enterpriseBean = ejbJar.getEnterpriseBean(ejbName);
+                if (enterpriseBean == null) {
+                    enterpriseBean = new SingletonBean(ejbName, \
beanClass.getName()); +                    ejbJar.addEnterpriseBean(enterpriseBean);
+                }
+                if (enterpriseBean.getEjbClass() == null) {
+                    enterpriseBean.setEjbClass(beanClass.getName());
+                }
+                if (enterpriseBean instanceof SessionBean) {
+                    SessionBean sessionBean = (SessionBean) enterpriseBean;
+                    sessionBean.setSessionType(SessionType.SINGLETON);
+                }
+            }
+
             for (Class<?> beanClass : finder.findAnnotatedClasses(Stateless.class)) \
                {
                 Stateless stateless = beanClass.getAnnotation(Stateless.class);
                 String ejbName = getEjbName(stateless, beanClass);
@@ -418,6 +440,11 @@
             return ejbName;
         }
 
+        private String getEjbName(Singleton singleton, Class<?> beanClass) {
+            String ejbName = singleton.name().length() == 0 ? \
beanClass.getSimpleName() : singleton.name(); +            return ejbName;
+        }
+
         private boolean isValidAnnotationUsage(Class annotationClass, Class<?> \
                beanClass, String ejbName, EjbModule ejbModule) {
             List<Class<? extends Annotation>> annotations = new \
ArrayList(asList(Stateless.class, Stateful.class, MessageDriven.class));  \
annotations.remove(annotationClass);

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/config/AutoConfig.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java \
Sat Jun 28 11:48:28 2008 @@ -843,6 +843,8 @@
         } else if (enterpriseBean instanceof org.apache.openejb.jee.SessionBean) {
             if (((org.apache.openejb.jee.SessionBean) \
enterpriseBean).getSessionType() == SessionType.STATEFUL) {  return \
BeanTypes.STATEFUL; +            } else if (((org.apache.openejb.jee.SessionBean) \
enterpriseBean).getSessionType() == SessionType.SINGLETON) { +                return \
BeanTypes.SINGLETON;  } else {
                 return BeanTypes.STATELESS;
             }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/BeanTypes.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/config/BeanTypes.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/BeanTypes.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/BeanTypes.java \
Sat Jun 28 11:48:28 2008 @@ -25,5 +25,6 @@
     String CMP_ENTITY = "CMP_ENTITY";
     String STATEFUL = "STATEFUL";
     String STATELESS = "STATELESS";
+    String SINGLETON = "SINGLETON";
     String MESSAGE = "MESSAGE";
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/config/ConfigurationFactory.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java \
Sat Jun 28 11:48:28 2008 @@ -59,6 +59,7 @@
 import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
 import org.apache.openejb.assembler.classic.TransactionServiceInfo;
 import org.apache.openejb.assembler.classic.WebAppInfo;
+import org.apache.openejb.assembler.classic.SingletonSessionContainerInfo;
 import static org.apache.openejb.config.ServiceUtils.implies;
 import org.apache.openejb.config.sys.AbstractService;
 import org.apache.openejb.config.sys.ConnectionManager;
@@ -604,6 +605,7 @@
         defaultProviders.put(MdbContainerInfo.class, new DefaultService("MESSAGE", \
                Container.class));
         defaultProviders.put(StatefulSessionContainerInfo.class, new \
                DefaultService("STATEFUL", Container.class));
         defaultProviders.put(StatelessSessionContainerInfo.class, new \
DefaultService("STATELESS", Container.class)); +        \
defaultProviders.put(SingletonSessionContainerInfo.class, new \
                DefaultService("SINGLETON", Container.class));
         defaultProviders.put(CmpEntityContainerInfo.class, new \
                DefaultService("CMP_ENTITY", Container.class));
         defaultProviders.put(BmpEntityContainerInfo.class, new \
                DefaultService("BMP_ENTITY", Container.class));
         defaultProviders.put(SecurityServiceInfo.class, new \
DefaultService("SecurityService", SecurityService.class)); @@ -823,6 +825,7 @@
     static Map<String, Class<? extends ContainerInfo>> containerTypes = new \
HashMap<String, Class<? extends ContainerInfo>>();  
     static {
+        containerTypes.put(BeanTypes.SINGLETON, \
                SingletonSessionContainerInfo.class);
         containerTypes.put(BeanTypes.STATELESS, \
                StatelessSessionContainerInfo.class);
         containerTypes.put(BeanTypes.STATEFUL, StatefulSessionContainerInfo.class);
         containerTypes.put(BeanTypes.BMP_ENTITY, BmpEntityContainerInfo.class);

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/config/EjbJarInfoBuilder.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java \
Sat Jun 28 11:48:28 2008 @@ -39,6 +39,7 @@
 import org.apache.openejb.assembler.classic.StatelessBeanInfo;
 import org.apache.openejb.assembler.classic.ApplicationExceptionInfo;
 import org.apache.openejb.assembler.classic.JndiNameInfo;
+import org.apache.openejb.assembler.classic.SingletonBeanInfo;
 import org.apache.openejb.jee.ActivationConfig;
 import org.apache.openejb.jee.ActivationConfigProperty;
 import org.apache.openejb.jee.CallbackMethod;
@@ -450,6 +451,8 @@
                 stateful.removeMethods.add(remove);
             }
 
+        } else if (s.getSessionType() == SessionType.SINGLETON) {
+            bean = new SingletonBeanInfo();
         } else {
             bean = new StatelessBeanInfo();
         }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WsDeployer.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/config/WsDeployer.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WsDeployer.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WsDeployer.java \
Sat Jun 28 11:48:28 2008 @@ -238,7 +238,7 @@
             // skip if this is not a webservices endpoint
             if (!(enterpriseBean instanceof SessionBean)) continue;
             SessionBean sessionBean = (SessionBean) enterpriseBean;
-            if (sessionBean.getSessionType() != SessionType.STATELESS) continue;
+            if (sessionBean.getSessionType() == SessionType.STATEFUL) continue;
             if (sessionBean.getServiceEndpoint() == null) continue;
 
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckPersistenceRefs.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/config/rules/CheckPersistenceRefs.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckPersistenceRefs.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckPersistenceRefs.java \
Sat Jun 28 11:48:28 2008 @@ -62,6 +62,7 @@
             switch(sessionBean.getSessionType()){
                 case STATEFUL: return "Stateful";
                 case STATELESS: return "Stateless";
+                case SINGLETON: return "Singleton";
                 default: throw new IllegalArgumentException("Uknown SessionBean type \
"+bean.getClass());  }
         } else if (bean instanceof MessageDrivenBean) return "MessageDriven";

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/core/BaseSessionContext.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java \
Sat Jun 28 11:48:28 2008 @@ -41,6 +41,7 @@
 import org.apache.openejb.core.ivm.IntraVmProxy;
 import org.apache.openejb.core.stateless.StatelessEjbObjectHandler;
 import org.apache.openejb.core.stateful.StatefulEjbObjectHandler;
+import org.apache.openejb.core.singleton.SingletonEjbObjectHandler;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.proxy.ProxyManager;
 
@@ -132,6 +133,10 @@
                         handler = new StatelessEjbObjectHandler(di, \
threadContext.getPrimaryKey(), interfaceType, new ArrayList<Class>());  break;
                     }
+                    case SINGLETON: {
+                        handler = new SingletonEjbObjectHandler(di, \
threadContext.getPrimaryKey(), interfaceType, new ArrayList<Class>()); +              \
break; +                    }
                     default: throw new IllegalStateException("Bean is not a session \
bean: "+di.getComponentType());  }
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/core/CoreDeploymentInfo.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java \
Sat Jun 28 11:48:28 2008 @@ -60,6 +60,7 @@
 import org.apache.openejb.core.interceptor.InterceptorData;
 import org.apache.openejb.core.mdb.MessageDrivenBeanManagedTxPolicy;
 import org.apache.openejb.core.timer.EjbTimerService;
+import org.apache.openejb.core.singleton.SingletonBeanManagedTxPolicy;
 import org.apache.openejb.util.Index;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
@@ -384,6 +385,8 @@
                     policy = new StatefulBeanManagedTxPolicy((TransactionContainer) \
container);  } else if (componentType == BeanType.STATELESS) {
                     policy = new StatelessBeanManagedTxPolicy((TransactionContainer) \
container); +                } else if (componentType == BeanType.SINGLETON) {
+                    policy = new SingletonBeanManagedTxPolicy((TransactionContainer) \
container);  } else if (componentType == BeanType.MESSAGE_DRIVEN) {
                     policy = new \
MessageDrivenBeanManagedTxPolicy((TransactionContainer) container);  }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java \
Sat Jun 28 11:48:28 2008 @@ -34,6 +34,7 @@
 import org.apache.openejb.InterfaceType;
 import org.apache.openejb.ProxyInfo;
 import org.apache.openejb.core.ServerFederation;
+import org.apache.openejb.core.singleton.SingletonEjbHomeHandler;
 import org.apache.openejb.core.entity.EntityEjbHomeHandler;
 import org.apache.openejb.core.stateless.StatelessEjbHomeHandler;
 import org.apache.openejb.core.stateful.StatefulEjbHomeHandler;
@@ -87,6 +88,8 @@
                 return new StatefulEjbHomeHandler(deploymentInfo, interfaceType, \
interfaces);  case STATELESS:
                 return  new StatelessEjbHomeHandler(deploymentInfo, interfaceType, \
interfaces); +            case SINGLETON:
+                return  new SingletonEjbHomeHandler(deploymentInfo, interfaceType, \
interfaces);  case CMP_ENTITY:
             case BMP_ENTITY:
                 return  new EntityEjbHomeHandler(deploymentInfo, interfaceType, \
interfaces);

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmMetaData.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/core/ivm/IntraVmMetaData.java?rev=672566&r1=672565&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmMetaData.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmMetaData.java \
Sat Jun 28 11:48:28 2008 @@ -79,6 +79,14 @@
         return type == BeanType.STATELESS;
     }
 
+    public boolean isSingletonSession() {
+        return type == BeanType.SINGLETON;
+    }
+
+    public boolean isStatefulSession() {
+        return type == BeanType.STATEFUL;
+    }
+
     public void setEJBHome(EJBHome home) {
         homeStub = home;
     }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/EjbWsContext.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/core/singleton/EjbWsContext.java?rev=672566&r1=672456&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/EjbWsContext.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/EjbWsContext.java \
Sat Jun 28 11:48:28 2008 @@ -14,7 +14,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.openejb.core.stateless;
+package org.apache.openejb.core.singleton;
 
 import java.security.Principal;
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/Instance.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/core/singleton/Instance.java?rev=672566&r1=672456&r2=672566&view=diff
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/Instance.java \
                (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/Instance.java \
Sat Jun 28 11:48:28 2008 @@ -14,7 +14,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.openejb.core.stateless;
+package org.apache.openejb.core.singleton;
 
 import java.util.List;
 import java.util.Collections;

Added: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonBeanManagedTxPolicy.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/core/singleton/SingletonBeanManagedTxPolicy.java?rev=672566&view=auto
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonBeanManagedTxPolicy.java \
                (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonBeanManagedTxPolicy.java \
Sat Jun 28 11:48:28 2008 @@ -0,0 +1,106 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.singleton;
+
+import org.apache.openejb.ApplicationException;
+import org.apache.openejb.ContainerType;
+import org.apache.openejb.SystemException;
+import org.apache.openejb.core.transaction.TransactionContainer;
+import org.apache.openejb.core.transaction.TransactionContext;
+import org.apache.openejb.core.transaction.TransactionPolicy;
+
+import javax.transaction.Status;
+import java.rmi.RemoteException;
+
+public class SingletonBeanManagedTxPolicy extends TransactionPolicy {
+
+    public SingletonBeanManagedTxPolicy(TransactionContainer container) {
+        super(Type.BeanManaged, container);
+        if (container.getContainerType() != ContainerType.STATELESS) {
+            throw new IllegalArgumentException();
+        }
+    }
+
+    public String policyToString() {
+        return "TX_BeanManaged: ";
+    }
+
+    public void beforeInvoke(Object instance, TransactionContext context) throws \
SystemException, ApplicationException { +        context.callContext.set(Type.class, \
getPolicyType()); +
+        context.clientTx = suspendTransaction(context);
+    }
+
+    public void afterInvoke(Object instance, TransactionContext context) throws \
ApplicationException, SystemException { +        try {
+            /*
+            * The Container must detect the case in which a transaction was started, \
but +            * not completed, in the business method, and handle it as follows:
+            */
+            context.currentTx = context.getTransactionManager().getTransaction();
+
+            if (context.currentTx == null) return;
+
+            if (context.currentTx.getStatus() != Status.STATUS_ROLLEDBACK && \
context.currentTx.getStatus() != Status.STATUS_COMMITTED) { +                String \
message = "The stateless session bean started a transaction but did not complete \
it."; +
+                /* [1] Log this as an application error ********/
+                logger.error(message);
+
+                /* [2] Roll back the started transaction *******/
+                try {
+                    rollbackTransaction(context, context.currentTx);
+                } catch (Throwable t) {
+
+                }
+
+                /* [3] Throw the RemoteException to the client */
+                throwAppExceptionToServer(new RemoteException(message));
+            }
+
+        } catch (javax.transaction.SystemException e) {
+            throw new SystemException(e);
+        } finally {
+            resumeTransaction(context, context.clientTx);
+        }
+    }
+
+    public void handleApplicationException(Throwable appException, boolean rollback, \
TransactionContext context) throws ApplicationException, SystemException { +        \
if (rollback && context.currentTx != null) markTxRollbackOnly(context.currentTx); +
+        throw new ApplicationException(appException);
+    }
+
+    public void handleSystemException(Throwable sysException, Object instance, \
TransactionContext context) throws ApplicationException, SystemException { +        \
try { +            context.currentTx = \
context.getTransactionManager().getTransaction(); +        } catch \
(javax.transaction.SystemException e) { +            context.currentTx = null;
+        }
+
+        logSystemException(sysException, context);
+
+        if (context.currentTx != null) markTxRollbackOnly(context.currentTx);
+
+        discardBeanInstance(instance, context.callContext);
+
+        throwExceptionToServer(sysException);
+
+    }
+
+}
+

Propchange: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonBeanManagedTxPolicy.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author Id Revision HeadURL

Added: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/core/singleton/SingletonContainer.java?rev=672566&view=auto
 ==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java \
                (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java \
Sat Jun 28 11:48:28 2008 @@ -0,0 +1,293 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.singleton;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.EJBAccessException;
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalHome;
+import javax.ejb.EJBLocalObject;
+import javax.ejb.EJBObject;
+import javax.interceptor.AroundInvoke;
+import javax.transaction.TransactionManager;
+
+import org.apache.openejb.ContainerType;
+import org.apache.openejb.DeploymentInfo;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.ProxyInfo;
+import org.apache.openejb.InterfaceType;
+import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.ExceptionType;
+import org.apache.openejb.core.interceptor.InterceptorData;
+import org.apache.openejb.core.interceptor.InterceptorStack;
+import org.apache.openejb.core.timer.EjbTimerService;
+import org.apache.openejb.core.transaction.TransactionContainer;
+import org.apache.openejb.core.transaction.TransactionContext;
+import org.apache.openejb.core.transaction.TransactionPolicy;
+import org.apache.openejb.spi.SecurityService;
+import org.apache.xbean.finder.ClassFinder;
+
+/**
+ * @org.apache.xbean.XBean element="statelessContainer"
+ */
+public class SingletonContainer implements org.apache.openejb.RpcContainer, \
TransactionContainer { +
+    private SingletonInstanceManager instanceManager;
+
+    private HashMap<String,DeploymentInfo> deploymentRegistry = new \
HashMap<String,DeploymentInfo>(); +
+    private Object containerID = null;
+    private TransactionManager transactionManager;
+    private SecurityService securityService;
+
+    public SingletonContainer(Object id, TransactionManager transactionManager, \
SecurityService securityService) throws OpenEJBException { +        this.containerID \
= id; +        this.transactionManager = transactionManager;
+        this.securityService = securityService;
+
+        instanceManager = new SingletonInstanceManager(transactionManager, \
securityService); +
+        for (DeploymentInfo deploymentInfo : deploymentRegistry.values()) {
+            org.apache.openejb.core.CoreDeploymentInfo di = \
(org.apache.openejb.core.CoreDeploymentInfo) deploymentInfo; +            \
di.setContainer(this); +        }
+    }
+
+    public synchronized DeploymentInfo [] deployments() {
+        return deploymentRegistry.values().toArray(new \
DeploymentInfo[deploymentRegistry.size()]); +    }
+
+    public synchronized DeploymentInfo getDeploymentInfo(Object deploymentID) {
+        String id = (String) deploymentID;
+        return deploymentRegistry.get(id);
+    }
+
+    public ContainerType getContainerType() {
+        return ContainerType.STATELESS;
+    }
+
+    public Object getContainerID() {
+        return containerID;
+    }
+
+    public void deploy(DeploymentInfo info) throws OpenEJBException {
+        CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) info;
+        instanceManager.deploy(deploymentInfo);
+        String id = (String) deploymentInfo.getDeploymentID();
+        synchronized (this) {
+            deploymentRegistry.put(id, deploymentInfo);
+            deploymentInfo.setContainer(this);
+        }
+
+        EjbTimerService timerService = deploymentInfo.getEjbTimerService();
+        if (timerService != null) {
+            timerService.start();
+        }
+    }
+
+    public void undeploy(DeploymentInfo info) {
+        undeploy((CoreDeploymentInfo)info);
+    }
+
+    private void undeploy(CoreDeploymentInfo deploymentInfo) {
+        instanceManager.undeploy(deploymentInfo);
+        EjbTimerService timerService = deploymentInfo.getEjbTimerService();
+        if (timerService != null) {
+            timerService.stop();
+        }
+
+        synchronized (this) {
+            String id = (String) deploymentInfo.getDeploymentID();
+            deploymentInfo.setContainer(null);
+            deploymentInfo.setContainerData(null);
+            deploymentRegistry.remove(id);
+        }
+    }
+
+    /**
+     * @deprecated use invoke signature without 'securityIdentity' argument.
+     */
+    public Object invoke(Object deployID, Method callMethod, Object[] args, Object \
primKey, Object securityIdentity) throws OpenEJBException { +        return \
invoke(deployID, callMethod.getDeclaringClass(), callMethod, args, primKey); +    }
+
+    public Object invoke(Object deployID, Class callInterface, Method callMethod, \
Object [] args, Object primKey) throws OpenEJBException { +        CoreDeploymentInfo \
deployInfo = (CoreDeploymentInfo) this.getDeploymentInfo(deployID); +        if \
(deployInfo == null) throw new OpenEJBException("Deployment does not exist in this \
container. Deployment(id='"+deployID+"'), Container(id='"+containerID+"')"); +
+        ThreadContext callContext = new ThreadContext(deployInfo, primKey);
+        ThreadContext oldCallContext = ThreadContext.enter(callContext);
+        try {
+            boolean authorized = getSecurityService().isCallerAuthorized(callMethod, \
deployInfo.getInterfaceType(callInterface)); +            if (!authorized)
+                throw new org.apache.openejb.ApplicationException(new \
EJBAccessException("Unauthorized Access by Principal Denied")); +
+            Class declaringClass = callMethod.getDeclaringClass();
+            if (EJBHome.class.isAssignableFrom(declaringClass) || \
EJBLocalHome.class.isAssignableFrom(declaringClass)) { +                if \
(callMethod.getName().startsWith("create")) { +                    return \
createEJBObject(deployInfo, callMethod); +                } else
+                    return null;// EJBHome.remove( ) and other EJBHome methods are \
not process by the container +            } else if (EJBObject.class == \
declaringClass || EJBLocalObject.class == declaringClass) { +                return \
null;// EJBObject.remove( ) and other EJBObject methods are not process by the \
container +            }
+
+            Object bean = instanceManager.getInstance(callContext);
+
+            callContext.setCurrentOperation(Operation.BUSINESS);
+            callContext.setCurrentAllowedStates(SingletonContext.getStates());
+
+            Method runMethod = deployInfo.getMatchingBeanMethod(callMethod);
+
+            callContext.set(Method.class, runMethod);
+            callContext.setInvokedInterface(callInterface);
+            Object retValue = _invoke(callInterface, callMethod, runMethod, args, \
bean, callContext); +            instanceManager.poolInstance(callContext, bean);
+
+            return retValue;
+
+        } finally {
+            ThreadContext.exit(oldCallContext);
+        }
+    }
+
+    private SecurityService getSecurityService() {
+        return securityService;
+    }
+
+    public SingletonInstanceManager getInstanceManager() {
+        return instanceManager;
+    }
+
+    /**
+     * @deprecated use type-safe {@link #_invoke(Class, java.lang.reflect.Method, \
java.lang.reflect.Method, Object[], Instance, org.apache.openejb.core.ThreadContext)} \
+     */ +    protected Object _invoke(Class callInterface, Method callMethod, Method \
runMethod, Object[] args, Object object, ThreadContext callContext) +            \
throws OpenEJBException { +        return _invoke(callInterface, callMethod, \
runMethod, args, (Instance) object, callContext); +    }
+
+    protected Object _invoke(Class callInterface, Method callMethod, Method \
runMethod, Object[] args, Instance instance, ThreadContext callContext) +            \
throws OpenEJBException { +
+        CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
+        TransactionPolicy txPolicy = \
deploymentInfo.getTransactionPolicy(callMethod); +        TransactionContext \
txContext = new TransactionContext(callContext, getTransactionManager()); +        \
txContext.callContext = callContext; +
+        txPolicy.beforeInvoke(instance, txContext);
+
+        Object returnValue = null;
+        try {
+            InterfaceType type = deploymentInfo.getInterfaceType(callInterface);
+            if (type == InterfaceType.SERVICE_ENDPOINT){
+                callContext.setCurrentOperation(Operation.BUSINESS_WS);
+                returnValue = invokeWebService(args, deploymentInfo, runMethod, \
instance, returnValue); +            } else {
+                List<InterceptorData> interceptors = \
deploymentInfo.getMethodInterceptors(runMethod); +                InterceptorStack \
interceptorStack = new InterceptorStack(instance.bean, runMethod, Operation.BUSINESS, \
interceptors, instance.interceptors); +                returnValue = \
interceptorStack.invoke(args); +            }
+        } catch (Throwable re) {// handle reflection exception
+            ExceptionType type = deploymentInfo.getExceptionType(re);
+            if (type == ExceptionType.SYSTEM) {
+                /* System Exception ****************************/
+
+                /**
+                 * The bean instance is not put into the pool via \
instanceManager.poolInstance +                 * and therefore the instance will be \
garbage collected and destroyed. +                 * For this reason the \
discardInstance method of the StatelessInstanceManager +                 * does \
nothing. +                 */
+
+                txPolicy.handleSystemException(re, instance, txContext);
+            } else {
+                /* Application Exception ***********************/
+
+                txPolicy.handleApplicationException(re, type == \
ExceptionType.APPLICATION_ROLLBACK, txContext); +            }
+        } finally {
+            instanceManager.poolInstance(callContext, instance);
+
+            txPolicy.afterInvoke(instance, txContext);
+        }
+
+        return returnValue;
+    }
+
+    private Object invokeWebService(Object[] args, CoreDeploymentInfo \
deploymentInfo, Method runMethod, Instance instance, Object returnValue) throws \
Exception { +        if (args.length != 2){
+            throw new IllegalArgumentException("WebService calls must follow format \
{messageContext, interceptor}."); +        }
+
+        Object messageContext = args[0];
+
+        // This object will be used as an interceptor in the stack and will be \
responsible +        // for unmarshalling the soap message parts into an argument \
list that will be +        // used for the actual method invocation.
+        //
+        // We just need to make it an interceptor in the OpenEJB sense and tack it \
on the end +        // of our stack.
+        Object interceptor = args[1];
+
+
+        //  Add the webservice interceptor to the list of interceptor instances
+        Map<String, Object> interceptors = new HashMap<String, \
Object>(instance.interceptors); +        {
+            interceptors.put(interceptor.getClass().getName(), interceptor);
+        }
+
+        //  Create an InterceptorData for the webservice interceptor to the list of \
interceptorDatas for this method +        List<InterceptorData> interceptorDatas = \
new ArrayList<InterceptorData>(deploymentInfo.getMethodInterceptors(runMethod)); +    \
{ +            InterceptorData providerData = new \
InterceptorData(interceptor.getClass()); +            ClassFinder finder = new \
ClassFinder(interceptor.getClass()); +            \
providerData.getAroundInvoke().addAll(finder.findAnnotatedMethods(AroundInvoke.class));
 +            interceptorDatas.add(providerData);
+        }
+
+        InterceptorStack interceptorStack = new InterceptorStack(instance.bean, \
runMethod, Operation.BUSINESS_WS, interceptorDatas, interceptors); +        Object[] \
params = new Object[runMethod.getParameterTypes().length]; +        if \
(messageContext instanceof javax.xml.rpc.handler.MessageContext) { +            \
ThreadContext.getThreadContext().set(javax.xml.rpc.handler.MessageContext.class, \
(javax.xml.rpc.handler.MessageContext) messageContext); +            returnValue = \
interceptorStack.invoke((javax.xml.rpc.handler.MessageContext) messageContext, \
params); +        } else if (messageContext instanceof \
javax.xml.ws.handler.MessageContext) { +            \
ThreadContext.getThreadContext().set(javax.xml.ws.handler.MessageContext.class, \
(javax.xml.ws.handler.MessageContext) messageContext); +            returnValue = \
interceptorStack.invoke((javax.xml.ws.handler.MessageContext) messageContext, \
params); +        }
+        return returnValue;
+    }
+
+    private TransactionManager getTransactionManager() {
+        return transactionManager;
+    }
+
+    protected ProxyInfo createEJBObject(org.apache.openejb.core.CoreDeploymentInfo \
deploymentInfo, Method callMethod) { +        return new ProxyInfo(deploymentInfo, \
null); +    }
+
+    public void discardInstance(Object instance, ThreadContext context) {
+//        instanceManager.discardInstance(context, instance);
+    }
+}

Propchange: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author Id Revision HeadURL

Added: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContext.java
                
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/ma \
in/java/org/apache/openejb/core/singleton/SingletonContext.java?rev=672566&view=auto \
                ==============================================================================
                
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContext.java \
                (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContext.java \
Sat Jun 28 11:48:28 2008 @@ -0,0 +1,75 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.singleton;
+
+import javax.transaction.TransactionManager;
+import javax.transaction.UserTransaction;
+
+import org.apache.openejb.core.BaseSessionContext;
+import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.spi.SecurityService;
+
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class SingletonContext extends BaseSessionContext {
+
+    protected final static State[] states = new State[Operation.values().length];
+
+    public static State[] getStates() {
+        return states;
+    }
+    
+    public SingletonContext(TransactionManager transactionManager, SecurityService \
securityService) { +        super(transactionManager, securityService);
+    }
+
+    public SingletonContext(TransactionManager transactionManager, SecurityService \
securityService, UserTransaction userTransaction) { +        \
super(transactionManager, securityService, userTransaction); +    }
+
+    protected State getState() {
+        Operation operation = \
ThreadContext.getThreadContext().getCurrentOperation(); +        State state = \
states[operation.ordinal()]; +
+        if (state == null) throw new IllegalArgumentException("Invalid operation " + \
operation + " for this context"); +
+        return state;
+    }
+
+    /**
+     * Business method from web service endpoint
+     */
+    private static class BusinessWsStatelessState extends SessionState {
+        public Class getInvokedBusinessInterface() {
+            throw new IllegalStateException();
+        }
+    }
+
+    static {
+        states[Operation.INJECTION.ordinal()] = new InjectionSessionState();
+        states[Operation.CREATE.ordinal()] = new LifecycleSessionState();
+        states[Operation.BUSINESS.ordinal()] = new BusinessSessionState();
+        states[Operation.BUSINESS_WS.ordinal()] = new BusinessWsStatelessState();
+        states[Operation.TIMEOUT.ordinal()] = new TimeoutSessionState();
+        states[Operation.POST_CONSTRUCT.ordinal()] = new \
PostConstructSessionState(); +        states[Operation.PRE_DESTROY.ordinal()] = new \
LifecycleSessionState(); +    }
+
+}

Propchange: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContext.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContext.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author Id Revision HeadURL

Propchange: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContext.java
                
------------------------------------------------------------------------------
    svn:mime-type = text/plain


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic