You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by xu...@apache.org on 2010/08/27 09:14:26 UTC
svn commit: r990059 - in
/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core:
./ entity/ interceptor/ managed/ mdb/ singleton/ stateful/ stateless/
Author: xuhaihong
Date: Fri Aug 27 07:14:25 2010
New Revision: 990059
URL: http://svn.apache.org/viewvc?rev=990059&view=rev
Log:
OpenEJB-1196 javax.ejb.EJBContext.getContextData(), use threadlocal to share the context data from InvocationContext
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContext.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContext.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java?rev=990059&r1=990058&r2=990059&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java Fri Aug 27 07:14:25 2010
@@ -29,6 +29,7 @@ import javax.ejb.EJBContext;
import javax.ejb.EJBHome;
import javax.ejb.EJBLocalHome;
import javax.ejb.TimerService;
+import javax.interceptor.InvocationContext;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.transaction.HeuristicMixedException;
@@ -51,7 +52,7 @@ import java.util.Properties;
public abstract class BaseContext implements EJBContext, Serializable {
public static enum Call {
- getEJBObject, getEJBLocalObject, isCallerInRole, setRollbackOnly, getCallerPrincipal, getRollbackOnly, getTimerService, getUserTransaction, getBusinessObject, timerMethod, getInvokedBusinessInterface, UserTransactionMethod, getMessageContext, getPrimaryKey
+ getEJBObject, getEJBLocalObject, isCallerInRole, setRollbackOnly, getCallerPrincipal, getRollbackOnly, getTimerService, getUserTransaction, getBusinessObject, timerMethod, getInvokedBusinessInterface, UserTransactionMethod, getMessageContext, getPrimaryKey, getContextData
}
@@ -74,8 +75,10 @@ public abstract class BaseContext implem
}
public Map<String, Object> getContextData() {
- throw new UnsupportedOperationException("not yet implemented");
+ check(Call.getContextData);
+ return ThreadContext.getThreadContext().get(InvocationContext.class).getContextData();
}
+
public EJBHome getEJBHome() {
ThreadContext threadContext = ThreadContext.getThreadContext();
DeploymentInfo di = threadContext.getDeploymentInfo();
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java?rev=990059&r1=990058&r2=990059&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java Fri Aug 27 07:14:25 2010
@@ -19,10 +19,11 @@ package org.apache.openejb.core;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.atomic.AtomicBoolean;
+import org.apache.openejb.core.transaction.TransactionPolicy;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
-import org.apache.openejb.core.transaction.TransactionPolicy;
public class ThreadContext {
private static final Logger log = Logger.getInstance(LogCategory.OPENEJB, "org.apache.openejb.util.resources");
@@ -164,7 +165,7 @@ public class ThreadContext {
public BaseContext.State[] setCurrentAllowedStates(BaseContext.State[] newAllowedStates) {
return null;
}
-
+
@SuppressWarnings({"unchecked"})
public <T> T get(Class<T> type) {
return (T)data.get(type);
@@ -175,6 +176,11 @@ public class ThreadContext {
return (T) data.put(type, value);
}
+ @SuppressWarnings({ "unchecked" })
+ public <T> T remove(Class<T> type) {
+ return (T) data.remove(type);
+ }
+
public boolean isDiscardInstance() {
return discardInstance;
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java?rev=990059&r1=990058&r2=990059&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java Fri Aug 27 07:14:25 2010
@@ -89,6 +89,7 @@ public class EntityContext extends BaseC
final Operation operation = ThreadContext.getThreadContext().getCurrentOperation();
switch (call) {
case getUserTransaction:
+ case getContextData:
throw illegal(call, operation);
case getPrimaryKey:
case getEJBLocalObject:
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java?rev=990059&r1=990058&r2=990059&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java Fri Aug 27 07:14:25 2010
@@ -66,6 +66,7 @@ public class InterceptorStack {
interceptors.add(interceptor);
}
}
+
}
private static final ThreadLocal<Stack> stack = new ThreadLocal<Stack>();
@@ -118,20 +119,35 @@ public class InterceptorStack {
}
public Object invoke(Object... parameters) throws Exception {
- InvocationContext invocationContext = createInvocationContext(parameters);
- Object value = invocationContext.proceed();
- return value;
+ try {
+ InvocationContext invocationContext = createInvocationContext(parameters);
+ ThreadContext.getThreadContext().set(InvocationContext.class, invocationContext);
+ Object value = invocationContext.proceed();
+ return value;
+ } finally {
+ ThreadContext.getThreadContext().remove(InvocationContext.class);
+ }
}
public Object invoke(javax.xml.ws.handler.MessageContext messageContext, Object... parameters) throws Exception {
- InvocationContext invocationContext = new JaxWsInvocationContext(operation, interceptors, beanInstance, targetMethod, messageContext, parameters);
- Object value = invocationContext.proceed();
- return value;
+ try {
+ InvocationContext invocationContext = new JaxWsInvocationContext(operation, interceptors, beanInstance, targetMethod, messageContext, parameters);
+ ThreadContext.getThreadContext().set(InvocationContext.class, invocationContext);
+ Object value = invocationContext.proceed();
+ return value;
+ } finally {
+ ThreadContext.getThreadContext().remove(InvocationContext.class);
+ }
}
public Object invoke(javax.xml.rpc.handler.MessageContext messageContext, Object... parameters) throws Exception {
- InvocationContext invocationContext = new JaxRpcInvocationContext(operation, interceptors, beanInstance, targetMethod, messageContext, parameters);
- Object value = invocationContext.proceed();
- return value;
+ try {
+ InvocationContext invocationContext = new JaxRpcInvocationContext(operation, interceptors, beanInstance, targetMethod, messageContext, parameters);
+ ThreadContext.getThreadContext().set(InvocationContext.class, invocationContext);
+ Object value = invocationContext.proceed();
+ return value;
+ } finally {
+ ThreadContext.getThreadContext().remove(InvocationContext.class);
+ }
}
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContext.java?rev=990059&r1=990058&r2=990059&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContext.java Fri Aug 27 07:14:25 2010
@@ -45,6 +45,7 @@ public class ManagedContext extends Base
case getEJBLocalObject:
case getEJBObject:
case getBusinessObject:
+ case getContextData:
switch (operation) {
case INJECTION:
throw illegal(call, operation);
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java?rev=990059&r1=990058&r2=990059&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java Fri Aug 27 07:14:25 2010
@@ -51,6 +51,7 @@ public class MdbContext extends BaseCont
switch (call) {
case getUserTransaction:
case getTimerService:
+ case getContextData:
switch (operation) {
case INJECTION:
throw illegal(call, operation);
Modified: 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/main/java/org/apache/openejb/core/singleton/SingletonContext.java?rev=990059&r1=990058&r2=990059&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContext.java Fri Aug 27 07:14:25 2010
@@ -42,6 +42,7 @@ public class SingletonContext extends Ba
case getBusinessObject:
case getUserTransaction:
case getTimerService:
+ case getContextData:
switch (operation) {
case INJECTION:
throw illegal(call, operation);
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java?rev=990059&r1=990058&r2=990059&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java Fri Aug 27 07:14:25 2010
@@ -45,6 +45,7 @@ public class StatefulContext extends Bas
case getEJBLocalObject:
case getEJBObject:
case getBusinessObject:
+ case getContextData:
switch (operation) {
case INJECTION:
throw illegal(call, operation);
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java?rev=990059&r1=990058&r2=990059&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java Fri Aug 27 07:14:25 2010
@@ -46,6 +46,7 @@ public class StatelessContext extends Ba
case getBusinessObject:
case getUserTransaction:
case getTimerService:
+ case getContextData:
switch (operation) {
case INJECTION:
throw illegal(call, operation);