Author: dblevins
Date: Sun Jun 20 17:28:50 2010
New Revision: 956379
URL: http://svn.apache.org/viewvc?rev=956379&view=rev
Log:
No-interface bean view for @ManagedBean
In the processes, moved 'localBean' variable to EnterpriseBeanInfo
Moved BusinessLocalBeanReference next to BusinessLocalReference
Added:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/BusinessLocalBeanReference.java
- copied, changed from r954999,
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/openejb/BusinessLocalBeanReference.java
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/managed/
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/managed/ManagedBeanTest.java
- copied, changed from r954999,
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulTest.java
Removed:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/openejb/BusinessLocalBeanReference.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbResolver.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/assembler/classic/JndiBuilder.java
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/StatefulBeanInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/StatelessBeanInfo.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/JndiEncInfoBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedHomeHandler.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbResolver.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbResolver.java?rev=956379&r1=956378&r2=956379&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbResolver.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbResolver.java
Sun Jun 20 17:28:50 2010
@@ -116,27 +116,7 @@ public class EjbResolver {
addInterfaces(new Interfaces(businessLocal, Type.LOCAL,
bean.ejbDeploymentId));
}
- boolean isLocalBean = false;
- if (bean instanceof StatelessBeanInfo) {
- StatelessBeanInfo statelessBean = (StatelessBeanInfo) bean;
- if (statelessBean.localbean) {
- isLocalBean = true;
- }
- }
- if (bean instanceof StatefulBeanInfo) {
- StatefulBeanInfo statefulBean = (StatefulBeanInfo) bean;
- if (statefulBean.localbean) {
- isLocalBean = true;
- }
- }
- if (bean instanceof SingletonBeanInfo) {
- SingletonBeanInfo singletonBeanInfo = (SingletonBeanInfo) bean;
- if (singletonBeanInfo.localbean) {
- isLocalBean = true;
- }
- }
-
- if (isLocalBean) {
+ if (bean.localbean) {
addInterfaces(new Interfaces(bean.ejbClass, Type.LOCAL,
bean.ejbDeploymentId));
}
}
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/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?rev=956379&r1=956378&r2=956379&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
Sun Jun 20 17:28:50 2010
@@ -217,7 +217,6 @@ class EnterpriseBeanBuilder {
}
}
deployment.setExtendedEntityManagerFactories(new
Index<EntityManagerFactory, Map>(extendedEntityManagerFactories));
- deployment.setLocalbean(((StatefulBeanInfo) bean).localbean);
}
if (ejbType.isSession() || ejbType.isMessageDriven()) {
@@ -227,16 +226,14 @@ class EnterpriseBeanBuilder {
if (ejbType.isSession()) {
// Allow dependsOn to work for all session beans
deployment.getDependsOn().addAll(bean.dependsOn);
+
+ // @LocalBean should work for any kind of Session Bean
+ deployment.setLocalbean(bean.localbean);
}
if (ejbType == BeanType.SINGLETON) {
deployment.setBeanManagedConcurrency("Bean".equalsIgnoreCase(bean.concurrencyType));
deployment.setLoadOnStartup(bean.loadOnStartup);
- deployment.setLocalbean(((SingletonBeanInfo) bean).localbean);
- }
-
- if (ejbType == BeanType.STATELESS) {
- deployment.setLocalbean(((StatelessBeanInfo) bean).localbean);
}
if (ejbType.isEntity()) {
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/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanInfo.java?rev=956379&r1=956378&r2=956379&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
Sun Jun 20 17:28:50 2010
@@ -50,6 +50,8 @@ public abstract class EnterpriseBeanInfo
public String local;
public final List<String> businessLocal = new ArrayList<String>();
public final List<String> businessRemote = new ArrayList<String>();
+ public boolean localbean;
+
public String ejbClass;
public String ejbName;
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=956379&r1=956378&r2=956379&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
Sun Jun 20 17:28:50 2010
@@ -27,8 +27,7 @@ import javax.jms.MessageListener;
import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.InterfaceType;
import org.apache.openejb.core.CoreDeploymentInfo;
-import org.apache.openejb.core.ivm.naming.*;
-import org.apache.openejb.core.ivm.naming.openejb.BusinessLocalBeanReference;
+import org.apache.openejb.core.ivm.naming.BusinessLocalBeanReference;
import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
Modified:
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/main/java/org/apache/openejb/assembler/classic/SingletonBeanInfo.java?rev=956379&r1=956378&r2=956379&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/SingletonBeanInfo.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/SingletonBeanInfo.java
Sun Jun 20 17:28:50 2010
@@ -17,8 +17,6 @@
package org.apache.openejb.assembler.classic;
public class SingletonBeanInfo extends EnterpriseBeanInfo {
- public boolean localbean;
-
public SingletonBeanInfo() {
type = SINGLETON;
}
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/StatefulBeanInfo.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/StatefulBeanInfo.java?rev=956379&r1=956378&r2=956379&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/StatefulBeanInfo.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/StatefulBeanInfo.java
Sun Jun 20 17:28:50 2010
@@ -31,8 +31,6 @@ public class StatefulBeanInfo extends En
public final List<InitMethodInfo> initMethods = new
ArrayList<InitMethodInfo>();
public final List<RemoveMethodInfo> removeMethods = new
ArrayList<RemoveMethodInfo>();
- public boolean localbean;
-
public final List<CallbackInfo> afterBegin = new ArrayList<CallbackInfo>();
public final List<CallbackInfo> beforeCompletion = new
ArrayList<CallbackInfo>();
public final List<CallbackInfo> afterCompletion = new
ArrayList<CallbackInfo>();
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/StatelessBeanInfo.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/StatelessBeanInfo.java?rev=956379&r1=956378&r2=956379&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/StatelessBeanInfo.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/StatelessBeanInfo.java
Sun Jun 20 17:28:50 2010
@@ -17,8 +17,6 @@
package org.apache.openejb.assembler.classic;
public class StatelessBeanInfo extends EnterpriseBeanInfo {
- public boolean localbean;
-
public StatelessBeanInfo() {
type = STATELESS;
}
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/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java?rev=956379&r1=956378&r2=956379&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
Sun Jun 20 17:28:50 2010
@@ -489,7 +489,6 @@ public class EjbJarInfoBuilder {
if (s.getSessionType() == SessionType.STATEFUL) {
bean = new StatefulBeanInfo();
StatefulBeanInfo stateful = ((StatefulBeanInfo) bean);
- stateful.localbean = s.getLocalBean() != null;
copyCallbacks(s.getPostActivate(), stateful.postActivate);
copyCallbacks(s.getPrePassivate(), stateful.prePassivate);
@@ -533,12 +532,13 @@ public class EjbJarInfoBuilder {
bean.loadOnStartup = s.getInitOnStartup();
// See JndiEncInfoBuilder.buildDependsOnRefs for processing of
DependsOn
// bean.dependsOn.addAll(s.getDependsOn());
- ((SingletonBeanInfo)bean).localbean = s.getLocalBean() != null;
} else {
bean = new StatelessBeanInfo();
- ((StatelessBeanInfo)bean).localbean = s.getLocalBean() != null;
}
+ bean.localbean = s.getLocalBean() != null;
+
+
bean.timeoutMethod = toInfo(s.getTimeoutMethod());
copyCallbacks(s.getAroundInvoke(), bean.aroundInvoke);
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java?rev=956379&r1=956378&r2=956379&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java
Sun Jun 20 17:28:50 2010
@@ -454,22 +454,7 @@ public class JndiEncInfoBuilder {
}
private boolean isLocalBean(EnterpriseBeanInfo beanInfo) {
- if (beanInfo == null) return false;
-
- if (beanInfo instanceof StatelessBeanInfo) {
- StatelessBeanInfo statelessBeanInfo = (StatelessBeanInfo) beanInfo;
- return statelessBeanInfo.localbean;
- }
- if (beanInfo instanceof StatefulBeanInfo) {
- StatefulBeanInfo statefulBeanInfo = (StatefulBeanInfo) beanInfo;
- return statefulBeanInfo.localbean;
- }
- if (beanInfo instanceof SingletonBeanInfo) {
- SingletonBeanInfo singletonBeanInfo = (SingletonBeanInfo) beanInfo;
- return singletonBeanInfo.localbean;
- }
-
- return false;
+ return beanInfo != null && beanInfo.localbean;
}
private EnterpriseBeanInfo getBeanInfo(String moduleId, String
deploymentId) {
Copied:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/BusinessLocalBeanReference.java
(from r954999,
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/openejb/BusinessLocalBeanReference.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/BusinessLocalBeanReference.java?p2=openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/BusinessLocalBeanReference.java&p1=openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/openejb/BusinessLocalBeanReference.java&r1=954999&r2=956379&rev=956379&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/openejb/BusinessLocalBeanReference.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/BusinessLocalBeanReference.java
Sun Jun 20 17:28:50 2010
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.openejb.core.ivm.naming.openejb;
+package org.apache.openejb.core.ivm.naming;
import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.core.ivm.naming.Reference;
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java?rev=956379&r1=956378&r2=956379&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
Sun Jun 20 17:28:50 2010
@@ -33,7 +33,6 @@ import javax.ejb.EJBLocalHome;
import javax.ejb.RemoveException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
-import javax.ejb.SessionSynchronization;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.persistence.EntityManager;
@@ -164,6 +163,17 @@ public class ManagedContainer implements
}
}
+ Class businessLocalBeanHomeInterface =
deploymentInfo.getBusinessLocalBeanInterface();
+ if (businessLocalBeanHomeInterface != null) {
+ for (Method method :
DeploymentInfo.BusinessLocalBeanHome.class.getMethods()) {
+ if (method.getName().startsWith("create")) {
+ methods.put(method, MethodType.CREATE);
+ } else if (method.getName().equals("remove")) {
+ methods.put(method, MethodType.REMOVE);
+ }
+ }
+ }
+
Class businessRemoteHomeInterface =
deploymentInfo.getBusinessRemoteInterface();
if (businessRemoteHomeInterface != null) {
for (Method method :
DeploymentInfo.BusinessRemoteHome.class.getMethods()) {
@@ -352,10 +362,11 @@ public class ManagedContainer implements
// Register for synchronization callbacks
registerSessionSynchronization(instance, createContext);
-
+
// Invoke create for legacy beans
if
(!callMethod.getDeclaringClass().equals(DeploymentInfo.BusinessLocalHome.class)
&&
-
!callMethod.getDeclaringClass().equals(DeploymentInfo.BusinessRemoteHome.class)){
+
!callMethod.getDeclaringClass().equals(DeploymentInfo.BusinessRemoteHome.class)
&&
+
!callMethod.getDeclaringClass().equals(DeploymentInfo.BusinessLocalBeanHome.class))
{
// Setup for business invocation
Method createOrInit =
deploymentInfo.getMatchingBeanMethod(callMethod);
@@ -923,10 +934,8 @@ public class ManagedContainer implements
ThreadContext oldCallContext = ThreadContext.enter(callContext);
try {
- Method afterBegin =
SessionSynchronization.class.getMethod("afterBegin");
-
- List<InterceptorData> interceptors =
deploymentInfo.getMethodInterceptors(afterBegin);
- InterceptorStack interceptorStack = new
InterceptorStack(instance.bean, afterBegin, Operation.AFTER_BEGIN,
interceptors, instance.interceptors);
+ List<InterceptorData> interceptors =
deploymentInfo.getCallbackInterceptors();
+ InterceptorStack interceptorStack = new
InterceptorStack(instance.bean, null, Operation.AFTER_BEGIN, interceptors,
instance.interceptors);
interceptorStack.invoke();
} catch (Exception e) {
@@ -962,10 +971,9 @@ public class ManagedContainer implements
try {
instance.setInUse(true);
- Method beforeCompletion =
SessionSynchronization.class.getMethod("beforeCompletion");
-
- List<InterceptorData> interceptors =
instance.deploymentInfo.getMethodInterceptors(beforeCompletion);
- InterceptorStack interceptorStack = new
InterceptorStack(instance.bean, beforeCompletion, Operation.BEFORE_COMPLETION,
interceptors, instance.interceptors);
+ CoreDeploymentInfo deploymentInfo =
instance.deploymentInfo;
+ List<InterceptorData> interceptors =
deploymentInfo.getCallbackInterceptors();
+ InterceptorStack interceptorStack = new
InterceptorStack(instance.bean, null, Operation.BEFORE_COMPLETION,
interceptors, instance.interceptors);
interceptorStack.invoke();
instance.setInUse(false);
@@ -1003,10 +1011,10 @@ public class ManagedContainer implements
try {
instance.setInUse(true);
if (synchronization.isCallSessionSynchronization()) {
- Method afterCompletion =
SessionSynchronization.class.getMethod("afterCompletion", boolean.class);
- List<InterceptorData> interceptors =
instance.deploymentInfo.getMethodInterceptors(afterCompletion);
- InterceptorStack interceptorStack = new
InterceptorStack(instance.bean, afterCompletion, Operation.AFTER_COMPLETION,
interceptors, instance.interceptors);
+ CoreDeploymentInfo deploymentInfo =
instance.deploymentInfo;
+ List<InterceptorData> interceptors =
deploymentInfo.getCallbackInterceptors();
+ InterceptorStack interceptorStack = new
InterceptorStack(instance.bean, null, Operation.AFTER_COMPLETION, interceptors,
instance.interceptors);
interceptorStack.invoke(status == Status.COMMITTED);
}
instance.setTransaction(null);
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedHomeHandler.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedHomeHandler.java?rev=956379&r1=956378&r2=956379&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedHomeHandler.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedHomeHandler.java
Sun Jun 20 17:28:50 2010
@@ -17,6 +17,7 @@
package org.apache.openejb.core.managed;
import java.lang.reflect.Method;
+import java.lang.reflect.Field;
import java.util.List;
import javax.ejb.RemoveException;
@@ -35,12 +36,22 @@ public class ManagedHomeHandler extends
public Object createProxy(Object primaryKey) {
Object proxy = super.createProxy(primaryKey);
- EjbObjectProxyHandler handler = (EjbObjectProxyHandler)
ProxyManager.getInvocationHandler(proxy);
+ EjbObjectProxyHandler handler = null;
- registerHandler(handler.getRegistryId(), handler);
+ try {
+ handler = (EjbObjectProxyHandler)
ProxyManager.getInvocationHandler(proxy);
+ } catch (Exception e) {
+ // try getting the invocation handler from the localbean
+ try {
+ Field field =
proxy.getClass().getDeclaredField("invocationHandler");
+ field.setAccessible(true);
+ handler = (EjbObjectProxyHandler) field.get(proxy);
+ } catch (Exception e1) {
+ }
+ }
+ registerHandler(handler.getRegistryId(), handler);
return proxy;
-
}
protected Object findX(Class interfce, Method method, Object[] args,
Object proxy) throws Throwable {
Copied:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/managed/ManagedBeanTest.java
(from r954999,
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulTest.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/managed/ManagedBeanTest.java?p2=openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/managed/ManagedBeanTest.java&p1=openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulTest.java&r1=954999&r2=956379&rev=956379&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulTest.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/managed/ManagedBeanTest.java
Sun Jun 20 17:28:50 2010
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.openejb.core.stateful;
+package org.apache.openejb.core.managed;
import junit.framework.TestCase;
import org.apache.openejb.assembler.classic.Assembler;
@@ -23,10 +23,15 @@ import org.apache.openejb.assembler.clas
import org.apache.openejb.config.ConfigurationFactory;
import org.apache.openejb.core.ivm.naming.InitContextFactory;
import org.apache.openejb.jee.EjbJar;
-import org.apache.openejb.jee.StatefulBean;
+import org.apache.openejb.jee.ManagedBean;
+import org.apache.openejb.loader.SystemInstance;
-import javax.ejb.Stateful;
+import javax.ejb.TransactionAttribute;
+import static javax.ejb.TransactionAttributeType.REQUIRED;
import javax.naming.InitialContext;
+import javax.transaction.Status;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
/**
* This test case serves as a nice tiny template for other test cases
@@ -34,7 +39,7 @@ import javax.naming.InitialContext;
*
* @version $Rev$ $Date$
*/
-public class StatefulTest extends TestCase {
+public class ManagedBeanTest extends TestCase {
@Override
protected void setUp() throws Exception {
@@ -48,7 +53,7 @@ public class StatefulTest extends TestCa
assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
EjbJar ejbJar = new EjbJar();
- ejbJar.addEnterpriseBean(new StatefulBean(MyBean.class));
+ ejbJar.addEnterpriseBean(new ManagedBean(MyBean.class));
assembler.createApplication(config.configureApplication(ejbJar));
}
@@ -58,15 +63,76 @@ public class StatefulTest extends TestCa
MyBean myBean = (MyBean) context.lookup("MyBeanLocalBean");
assertEquals("pan", myBean.echo("nap"));
+
+ //TODO -- implement this
+// assertTrue(myBean.noTransaction());
+// assertTrue(myBean.inTransaction());
+//
+// try {
+// myBean.noDestroyBean();
+// fail("Should have thrown MyRuntimeException");
+// } catch (MyRuntimeException e) {
+// // good -- this was expected
+// }
+//
+// // Instance should still be alive
+// assertEquals("pan", myBean.echo("nap"));
}
+ public static class MyRuntimeException extends RuntimeException {
+ public MyRuntimeException(String message) {
+ super(message);
+ }
+ }
- @Stateful
public static class MyBean {
+ /**
+ * This should not remove the bean
+ */
+ public void noDestroyBean() {
+ throw new MyRuntimeException("I threw an exception");
+ }
+
+ /**
+ * Plain business method to test bean is still alive
+ *
+ * @param string a string to reverse
+ * @return the reversed string
+ */
public String echo(String string) {
StringBuilder sb = new StringBuilder(string);
return sb.reverse().toString();
}
+
+ /**
+ * This method should not run in a transaction
+ *
+ * @return true if not in Transaction
+ */
+ public boolean noTransaction() {
+ return !inTransaction();
+ }
+
+ private boolean inTransaction() {
+ try {
+ TransactionManager transactionManager =
SystemInstance.get().getComponent(TransactionManager.class);
+ int status = transactionManager.getStatus();
+ return status == Status.STATUS_ACTIVE || status ==
Status.STATUS_MARKED_ROLLBACK;
+ } catch (SystemException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * This method should run in a transaction
+ *
+ * @return true if in Transaction
+ */
+ @TransactionAttribute(REQUIRED)
+ public boolean withTransaction() {
+ return inTransaction();
+ }
+
}
-}
+}
\ No newline at end of file