[jboss-cvs] JBossAS SVN: r102766 - projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Mar 23 04:55:57 EDT 2010
Author: wolfc
Date: 2010-03-23 04:55:57 -0400 (Tue, 23 Mar 2010)
New Revision: 102766
Modified:
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java
Log:
EJBTHREE-2056: allow for injection of EjbEncFactory
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java 2010-03-23 07:18:06 UTC (rev 102765)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java 2010-03-23 08:55:57 UTC (rev 102766)
@@ -64,9 +64,21 @@
import org.jboss.ejb3.tx.UserTransactionImpl;
import org.jboss.ejb3.tx.metadata.ApplicationExceptionComponentMetaDataLoaderFactory;
import org.jboss.ejb3.tx.metadata.ApplicationExceptionMetaDataBridge;
+import org.jboss.ejb3.util.Service;
import org.jboss.ejb3.vfs.spi.VirtualFile;
-import org.jboss.ejb3.util.Service;
-import org.jboss.injection.*;
+import org.jboss.injection.DependsHandler;
+import org.jboss.injection.EJBHandler;
+import org.jboss.injection.EJBInjectionContainer;
+import org.jboss.injection.EncInjector;
+import org.jboss.injection.ExtendedInjectionContainer;
+import org.jboss.injection.InjectionHandler;
+import org.jboss.injection.InjectionUtil;
+import org.jboss.injection.Injector;
+import org.jboss.injection.JndiInjectHandler;
+import org.jboss.injection.PersistenceContextHandler;
+import org.jboss.injection.PersistenceUnitHandler;
+import org.jboss.injection.ResourceHandler;
+import org.jboss.injection.WebServiceRefHandler;
import org.jboss.jca.spi.ComponentStack;
import org.jboss.logging.Logger;
import org.jboss.metadata.ejb.jboss.JBossAssemblyDescriptorMetaData;
@@ -83,20 +95,35 @@
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
-import javax.ejb.*;
+import javax.ejb.EJBException;
+import javax.ejb.Local;
+import javax.ejb.Remote;
+import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
-import javax.naming.*;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.LinkRef;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingException;
import javax.transaction.TransactionManager;
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
-import java.util.*;
+import java.lang.reflect.Proxy;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
@@ -109,7 +136,7 @@
* @version $Revision$
*/
@DisableAOP
-public abstract class EJBContainer
+public abstract class EJBContainer
implements Container, IndirectContainer<EJBContainer, DirectContainer<EJBContainer>>,
EJBInjectionContainer, ExtendedInjectionContainer, JavaEEComponent
{
@@ -122,9 +149,9 @@
private final BeanContainer beanContainer;
private DirectContainer<EJBContainer> directContainer;
-
- protected EjbEncFactory encFactory = new DefaultEjbEncFactory();
+ protected EjbEncFactory encFactory;
+
protected Pool pool;
protected String ejbName;
@@ -202,7 +229,7 @@
* @param beanMetaData the meta data for this bean or null
*/
- public EJBContainer(String name, Domain domain, ClassLoader cl,
+ protected EJBContainer(String name, Domain domain, ClassLoader cl,
String beanClassName, String ejbName, Hashtable ctxProperties,
Ejb3Deployment deployment, JBossEnterpriseBeanMetaData beanMetaData) throws ClassNotFoundException
{
@@ -246,16 +273,6 @@
//annotations = new AnnotationRepositoryToMetaData(this);
initialContextProperties = ctxProperties;
- try
- {
- Util.createSubcontext(getEnc(), "env");
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- bindORB();
- bindEJBContext();
if(deployment != null)
this.dependencyPolicy = deployment.createDependencyPolicy(this);
@@ -279,7 +296,7 @@
* @param beanMetaData the meta data for this bean or null
*/
- public EJBContainer(String name, Domain domain, ClassLoader cl,
+ protected EJBContainer(String name, Domain domain, ClassLoader cl,
String beanClassName, String ejbName, Hashtable ctxProperties,
JBossEnterpriseBeanMetaData beanMetaData) throws ClassNotFoundException
{
@@ -787,7 +804,31 @@
{
if (enc == null)
{
- enc = encFactory.getEnc(this);
+ if(encFactory == null)
+ {
+ // postpone the inevitable
+ //ClassLoader cl = AccessController.doPrivileged(currentContextClassLoader());
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ Class<?> interfaces[] = { Context.class };
+ InvocationHandler handler = new InvocationHandler() {
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
+ {
+ try
+ {
+ if(encFactory == null)
+ throw new IllegalStateException("EJBTHREE-2056: EjbEncFactory is null, usage of java:comp is not allowed before CREATE");
+ return method.invoke(encFactory.getEnc(EJBContainer.this), args);
+ }
+ catch(InvocationTargetException e)
+ {
+ throw e.getTargetException();
+ }
+ }
+ };
+ enc = (Context) Proxy.newProxyInstance(cl, interfaces, handler);
+ }
+ else
+ enc = encFactory.getEnc(this);
}
return enc;
}
@@ -889,6 +930,23 @@
{
// Blocking invocations until start()
this.blockInvocations();
+
+ if(encFactory == null)
+ {
+ log.debug("EJBTHREE-2056: Failed to get an EjbEncFactory, will create the default.");
+ encFactory = new DefaultEjbEncFactory();
+ }
+
+ try
+ {
+ Util.createSubcontext(getEnc(), "env");
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ bindORB();
+ bindEJBContext();
/*
initializeClassContainer();
@@ -1575,7 +1633,12 @@
{
return deployment;
}
-
+
+ public void setEjbEncFactory(EjbEncFactory encFactory)
+ {
+ this.encFactory = encFactory;
+ }
+
public abstract boolean hasJNDIBinding(String jndiName);
/**
More information about the jboss-cvs-commits
mailing list