protected void passivate(StatefulBeanContext ctx) { ClassLoader oldCl = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(((EJBContainer) ctx.getContainer()).getClassloader()); synchronized(pm) { pm.passivateSession(ctx); } ++passivatedCount; } finally { Thread.currentThread().setContextClassLoader(oldCl); } }
/** * Sets the TCCL to the classloader of the container so * that the invocation happens in the context of the * container's classloader. Finally upon return resets * the TCCL to the previous classloader. */ public Object invoke(Invocation invocation) throws Throwable { assert invocation instanceof EJBContainerInvocation : "Unexpected invocation type " + invocation.getClass() + " - expected " + EJBContainerInvocation.class; // get hold of the EJBContainer from the invocation EJBContainer ejbContainer = EJBContainer.getEJBContainer(invocation.getAdvisor()); ClassLoader ejbContainerClassloader = ejbContainer.getClassloader(); ClassLoader previousClassLoader = Thread.currentThread().getContextClassLoader(); // TODO: Review for security manager privileged blocks try { // Set the TCCL to the EJBContainer's classloader Thread.currentThread().setContextClassLoader(ejbContainerClassloader); // move on return invocation.invokeNext(); } finally { // reset to original TCCL Thread.currentThread().setContextClassLoader(previousClassLoader); } }
public AnnotationRepositoryToMetaData(EJBContainer container) { if (container == null) throw new IllegalArgumentException("Null container"); Class<?> beanClass = container.getClazz(); if (beanClass == null) throw new IllegalArgumentException("Null bean class"); String name = container.getObjectName().getCanonicalName(); if (name == null) throw new IllegalArgumentException("Null name"); this.classLoader = container.getClassloader(); if (classLoader == null) throw new IllegalArgumentException("Null class"); MetaDataRetrieval classMetaData = ClassMetaDataRetrievalFactory.INSTANCE.getMetaDataRetrieval(new Scope(CommonLevels.CLASS, beanClass)); ScopeKey instanceScope = new ScopeKey(CommonLevels.INSTANCE, name); mutableMetaData = new MemoryMetaDataLoader(instanceScope); MetaDataRetrieval dynamicXml = new EJBMetaDataLoader(instanceScope, container); MetaDataContext classContext = new AbstractMetaDataContext(classMetaData); MetaDataRetrieval[] instance = { dynamicXml, mutableMetaData }; MetaDataContext instanceContext = new AbstractMetaDataContext(classContext, Arrays.asList(instance)); metaData = new MetaDataRetrievalToMetaDataBridge(instanceContext); }
JndiEnvironmentRefsGroup jndiEnvironment = new JndiEnvironmentImpl(beanMetaData, ejbContainer.getClassloader()); JndiEnvironmentRefsGroup jndiEnvironmentForInterceptor = new JndiEnvironmentImpl(interceptor, ejbContainer.getClassloader());