Author: dblevins
Date: Fri Apr 8 20:07:19 2011
New Revision: 1090420
URL: http://svn.apache.org/viewvc?rev=1090420&view=rev
Log:
OPENEJB-1183: javax.ejb.embeddable.EJBContainer
OPENEJB-1510: org.apache.openejb.OpenEjbContainer.inject(object)
Rewrite of EJBContainer and classpath scanning logic. Faster startup, less
memory, better exception handling, dependency injection support for the invoker.
Removed:
openejb/trunk/openejb3/examples/simple-stateless/src/main/resources/
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.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/DeploymentsResolver.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/junit/ApplicationComposer.java
openejb/trunk/openejb3/examples/simple-stateless/src/test/java/org/superbiz/calculator/CalculatorTest.java
openejb/trunk/openejb3/examples/spring-integration/src/test/java/org/superbiz/spring/MoviesTest.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java?rev=1090420&r1=1090419&r2=1090420&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java
Fri Apr 8 20:07:19 2011
@@ -26,6 +26,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import javax.ejb.embeddable.EJBContainer;
import javax.ejb.spi.EJBContainerProvider;
@@ -35,9 +36,22 @@ import javax.naming.NameNotFoundExceptio
import javax.naming.NamingException;
import org.apache.openejb.assembler.classic.AppInfo;
import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.config.AppModule;
import org.apache.openejb.config.ConfigurationFactory;
-import org.apache.openejb.config.DeploymentsResolver;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.config.NewLoaderLogic;
+import org.apache.openejb.config.ValidationFailedException;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.ManagedBean;
+import org.apache.openejb.jee.TransactionType;
+import org.apache.openejb.jee.oejb3.EjbDeployment;
+import org.apache.openejb.jee.oejb3.OpenejbJar;
import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.openejb.util.Join;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.OptionsLog;
import org.apache.xbean.naming.context.ContextFlyweight;
/**
@@ -45,10 +59,14 @@ import org.apache.xbean.naming.context.C
*/
public class OpenEjbContainer extends EJBContainer {
+ static Logger logger = Logger.getInstance(LogCategory.OPENEJB_STARTUP,
OpenEjbContainer.class);
+
+ private static OpenEjbContainer instance;
+
private final Context context;
private OpenEjbContainer(Context context) {
- this.context = context;
+ this.context = new GlobalContext(context);
}
@Override
@@ -66,34 +84,96 @@ public class OpenEjbContainer extends EJ
return context;
}
+ public <T> T inject(T object) {
+
+ assert object != null;
+
+ final Class<?> clazz = object.getClass();
+
+ final BeanContext context = resolve(clazz);
+
+ if (context == null) throw new
NoInjectionMetaDataException(clazz.getName());
+
+ final InjectionProcessor processor = new InjectionProcessor(object,
context.getInjections(), context.getJndiContext());
+
+ try {
+ return (T) processor.createInstance();
+ } catch (OpenEJBException e) {
+ throw new InjectionException(clazz.getName(), e);
+ }
+ }
+
+ private <T> BeanContext resolve(Class<?> clazz) {
+
+ final ContainerSystem containerSystem =
SystemInstance.get().getComponent(ContainerSystem.class);
+
+ while (clazz != null && clazz != Object.class) {
+
+ {
+ final BeanContext context =
containerSystem.getBeanContext(clazz.getName());
+
+ if (context != null) return context;
+ }
+
+ for (BeanContext context : containerSystem.deployments()) {
+
+ if (clazz == context.getBeanClass()) return context;
+
+ }
+
+ clazz = clazz.getSuperclass();
+ }
+
+ return null;
+ }
+
+ public static class NoInjectionMetaDataException extends
IllegalStateException {
+ public NoInjectionMetaDataException(String s) {
+ super(s);
+ }
+ }
+
+ public static class InjectionException extends IllegalStateException {
+ public InjectionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+ }
public static class Provider implements EJBContainerProvider {
@Override
- public EJBContainer createEJBContainer(Map<?, ?> properties) {
- if (isOtherProvider(properties)) return null;
+ public EJBContainer createEJBContainer(Map<?, ?> map) {
+ if (isOtherProvider(map)) return null;
+ if (instance != null) {
+ logger.warning("EJBContainer already initialized. Call
ejbContainer.close() to allow reinitialization");
+ return instance;
+ }
- String appId = (String) properties.get(EJBContainer.APP_NAME);
+ String appId = (String) map.get(EJBContainer.APP_NAME);
try {
- Properties props = new Properties();
- props.put(DeploymentsResolver.DEPLOYMENTS_CLASSPATH_PROPERTY,
Boolean.toString(false));
- //This causes scan of the entire classpath except for default
excludes. This may be quite slow.
- props.put(DeploymentsResolver.CLASSPATH_INCLUDE, ".*");
- props.putAll(properties);
+ Properties properties = new Properties();
+ properties.putAll(map);
+ SystemInstance.reset();
+ SystemInstance.init(properties);
+ SystemInstance.get().setProperty("openejb.embedded", "true");
+ SystemInstance.get().setProperty(EJBContainer.class.getName(),
"true");
- OpenEJB.init(props);
+ OptionsLog.install();
- ConfigurationFactory configurationFactory = new
ConfigurationFactory();
+ OpenEJB.init(properties);
- ClassLoader classLoader = getClass().getClassLoader();
+ final ConfigurationFactory configurationFactory = new
ConfigurationFactory();
- List<File> moduleLocations;
+ final List<File> moduleLocations;
- Object modules = properties.get(EJBContainer.MODULES);
+ final Object modules = map.get(EJBContainer.MODULES);
+
+ // will be updated if needed
+ ClassLoader classLoader = getClass().getClassLoader();
if (modules instanceof String) {
@@ -107,6 +187,7 @@ public class OpenEjbContainer extends EJ
} else if (modules instanceof String[]) {
+ // TODO Optimize this so we look specifically for modules
by name
moduleLocations =
configurationFactory.getModulesFromClassPath(null, classLoader);
int matched = 0;
@@ -127,7 +208,9 @@ public class OpenEjbContainer extends EJ
}
if (matched != ((String[])modules).length) {
- throw new IllegalStateException("some modules not
matched on classpath");
+
+ throw specifiedModulesNotFound();
+
}
} else if (modules instanceof File) {
@@ -152,58 +235,104 @@ public class OpenEjbContainer extends EJ
} else {
- throw new IllegalStateException("Unrecognized modules
property");
+ throw invalidModulesValue(modules);
}
-
if (moduleLocations.isEmpty()) {
- throw new IllegalStateException("No modules to deploy
found");
+
+ throw new NoModulesFoundException("No modules to deploy
found");
+
+ }
+
+ // TODO With this load method we can finally do some checking
on module ids to really implement EJBContainer.MODULES String/String[]
+ final AppModule appModule =
configurationFactory.loadApplication(classLoader, appId, moduleLocations);
+
+ final Set<String> callers = NewLoaderLogic.callers();
+ final EjbJar ejbJar = new EjbJar();
+ final OpenejbJar openejbJar = new OpenejbJar();
+
+ for (String caller : callers) {
+
+ final ManagedBean bean = ejbJar.addEnterpriseBean(new
ManagedBean(caller, caller));
+
+ // set it to bean so it can get UserTransaction injection
+ bean.setTransactionType(TransactionType.BEAN);
+
+ final EjbDeployment ejbDeployment =
openejbJar.addEjbDeployment(bean);
+
+ // important in case any other deploment id formats are
specified
+ ejbDeployment.setDeploymentId(caller);
}
- AppInfo appInfo =
configurationFactory.configureApplication(classLoader, appId, moduleLocations);
+ appModule.getEjbModules().add(new EjbModule(ejbJar,
openejbJar));
- Assembler assembler =
SystemInstance.get().getComponent(Assembler.class);
+
+
+ final AppInfo appInfo;
+ try {
+
+ appInfo =
configurationFactory.configureApplication(appModule);
+
+ } catch (ValidationFailedException e) {
+
+ logger.warning("configureApplication.loadFailed",
appModule.getModuleId(), e.getMessage()); // DO not include the stacktrace in
the message
+
+ throw new InvalidApplicationException(e);
+
+ } catch (OpenEJBException e) {
+ // DO NOT REMOVE THE EXCEPTION FROM THIS LOG MESSAGE
+ // removing this message causes NO messages to be printed
when embedded
+ logger.warning("configureApplication.loadFailed", e,
appModule.getModuleId(), e.getMessage());
+
+ throw new ConfigureApplicationException(e);
+ }
+
+ final Assembler assembler =
SystemInstance.get().getComponent(Assembler.class);
final AppContext appContext;
try {
appContext = assembler.createApplication(appInfo,
classLoader);
} catch (Exception e) {
- throw new IllegalStateException("Could not deploy embedded
app", e);
+ throw new AssembleApplicationException(e);
}
- final Context globalJndiContext =
appContext.getGlobalJndiContext();
- return new OpenEjbContainer(new ContextFlyweight() {
+ return instance = new
OpenEjbContainer(appContext.getGlobalJndiContext());
- @Override
- protected Context getContext() throws NamingException {
- return globalJndiContext;
- }
+ } catch (OpenEJBException e) {
- @Override
- protected Name getName(Name name) throws NamingException {
- String first = name.get(0);
- if (!first.startsWith("java:")) throw new
NameNotFoundException("Name must be in java: namespace");
- first = first.substring("java:".length());
- name = name.getSuffix(1);
- return name.add(0, first);
- }
+ throw new InitializationException(e);
- @Override
- protected String getName(String name) throws
NamingException {
- if (!name.startsWith("java:")) throw new
NameNotFoundException("Name must be in java: namespace");
- return name.substring("java:".length());
- }
- });
- } catch (OpenEJBException e) {
- throw new IllegalStateException(e);
} catch (MalformedURLException e) {
- throw new IllegalStateException(e);
+
+ throw new InitializationException(e);
+
+ } catch (Exception e) {
+
+ if (e instanceof IllegalStateException) {
+
+ throw (IllegalStateException) e;
+ }
+
+ throw new InitializationException(e);
}
}
+ // TODO, report some information
+ private IllegalStateException specifiedModulesNotFound() {
+ return new NoSuchModuleException("some modules not matched on
classpath");
+ }
+
+ private InvalidModulesPropertyException invalidModulesValue(Object
value) {
+ String[] spec = {"java.lang.String","java.lang.String[]",
"java.io.File", "java.io.File[]"};
+// TODO
+// String[] vendor = {"java.lang.Class","java.lang.Class[]",
"java.net.URL", "java.io.URL[]"};
+ String type = (value == null) ? null : value.getClass().getName();
+ return new InvalidModulesPropertyException(String.format("Invalid
'%s' value '%s'. Valid values are: %s", EJBContainer.MODULES, type,
Join.join(", ", spec)));
+ }
+
private static boolean isOtherProvider(Map<?, ?> properties) {
Object provider = properties.get(EJBContainer.PROVIDER);
@@ -229,4 +358,90 @@ public class OpenEjbContainer extends EJ
return matches;
}
}
+
+ private class GlobalContext extends ContextFlyweight {
+ private final Context globalJndiContext;
+
+ public GlobalContext(Context globalJndiContext) {
+ this.globalJndiContext = globalJndiContext;
+ }
+
+ @Override
+ protected Context getContext() throws NamingException {
+ return globalJndiContext;
+ }
+
+ @Override
+ protected Name getName(Name name) throws NamingException {
+ String first = name.get(0);
+ if (!first.startsWith("java:")) throw new
NameNotFoundException("Name must be in java: namespace");
+ first = first.substring("java:".length());
+ name = name.getSuffix(1);
+ return name.add(0, first);
+ }
+
+ @Override
+ protected String getName(String name) throws NamingException {
+ if (!name.startsWith("java:")) throw new
NameNotFoundException("Name must be in java: namespace");
+ return name.substring("java:".length());
+ }
+
+ @Override
+ public void bind(Name name, Object obj) throws NamingException {
+ if (name.size() == 1 && "bind".equals(name.get(0))) inject(obj);
+ else super.bind(name, obj);
+ }
+
+ @Override
+ public void bind(String name, Object obj) throws NamingException {
+ if (name != null && "bind".equals(name)) inject(obj);
+ else super.bind(name, obj);
+ }
+ }
+
+ public static class InitializationException extends IllegalStateException {
+ public InitializationException(String s) {
+ super(s);
+ }
+
+ public InitializationException(Throwable cause) {
+ super(cause);
+ }
+ }
+
+ public static class InvalidModulesPropertyException extends
InitializationException {
+ public InvalidModulesPropertyException(String s) {
+ super(s);
+ }
+ }
+
+ public static class NoSuchModuleException extends InitializationException {
+ public NoSuchModuleException(String s) {
+ super(s);
+ }
+ }
+
+ public static class NoModulesFoundException extends
InitializationException {
+ public NoModulesFoundException(String s) {
+ super(s);
+ }
+ }
+
+ public static class ConfigureApplicationException extends
InitializationException {
+ public ConfigureApplicationException(Throwable cause) {
+ super(cause);
+ }
+ }
+
+ public static class AssembleApplicationException extends
InitializationException {
+ public AssembleApplicationException(Throwable cause) {
+ super(cause);
+ }
+ }
+
+ public static class InvalidApplicationException extends
InitializationException {
+ public InvalidApplicationException(Throwable cause) {
+ super(cause);
+ }
+ }
}
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/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1090420&r1=1090419&r2=1090420&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
Fri Apr 8 20:07:19 2011
@@ -556,6 +556,25 @@ public class ConfigurationFactory implem
* @throws OpenEJBException on error
*/
public AppInfo configureApplication(ClassLoader classLoader, String id,
List<File> jarFiles) throws OpenEJBException {
+ AppModule collection = loadApplication(classLoader, id, jarFiles);
+
+ AppInfo appInfo;
+ try {
+ appInfo = configureApplication(collection);
+ } catch (ValidationFailedException e) {
+ logger.warning("configureApplication.loadFailed",
collection.getModuleId(), e.getMessage()); // DO not include the stacktrace in
the message
+ throw e;
+ } catch (OpenEJBException e) {
+ // DO NOT REMOVE THE EXCEPTION FROM THIS LOG MESSAGE
+ // removing this message causes NO messages to be printed when
embedded
+ logger.warning("configureApplication.loadFailed", e,
collection.getModuleId(), e.getMessage());
+ throw e;
+ }
+
+ return appInfo;
+ }
+
+ public AppModule loadApplication(ClassLoader classLoader, String id,
List<File> jarFiles) throws OpenEJBException {
final boolean standaloneModule = id == null;
if (standaloneModule) {
id = "";
@@ -608,21 +627,7 @@ public class ConfigurationFactory implem
throw e;
}
}
-
- AppInfo appInfo;
- try {
- appInfo = configureApplication(collection);
- } catch (ValidationFailedException e) {
- logger.warning("configureApplication.loadFailed", id,
e.getMessage()); // DO not include the stacktrace in the message
- throw e;
- } catch (OpenEJBException e) {
- // DO NOT REMOVE THE EXCEPTION FROM THIS LOG MESSAGE
- // removing this message causes NO messages to be printed when
embedded
- logger.warning("configureApplication.loadFailed", e, id,
e.getMessage());
- throw e;
- }
-
- return appInfo;
+ return collection;
}
public EjbJarInfo configureApplication(EjbJar ejbJar) throws
OpenEJBException {
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java?rev=1090420&r1=1090419&r2=1090420&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
Fri Apr 8 20:07:19 2011
@@ -189,18 +189,11 @@ public class DeploymentsResolver impleme
urlSet =
urlSet.excludePaths(System.getProperty("sun.boot.class.path", ""));
urlSet = urlSet.exclude(".*/JavaVM.framework/.*");
-// if (shouldFilter(include, exclude, requireDescriptors)) {
-// urlSet = NewLoaderLogic.applyBuiltinExcludes(urlSet);
-// }
-
// save the prefiltered list of jars before excluding system apps
// so that we can choose not to filter modules with descriptors on
the full list
UrlSet prefiltered = urlSet;
// we should exclude system apps before and apply user properties
after
-// if (filterSystemApps){
-// urlSet =
urlSet.exclude(".*/openejb-[^/]+(.(jar|ear|war)(!/)?|/target/(test-)?classes/?)");
-// }
final IncludeExcludeFilter filter = new
IncludeExcludeFilter(Filters.patterns(include), Filters.patterns(exclude));
// filter using user parameters
@@ -208,9 +201,12 @@ public class DeploymentsResolver impleme
if (prefiltered.size() == urlSet.size()) {
urlSet = NewLoaderLogic.applyBuiltinExcludes(urlSet);
+
+ if (filterSystemApps){
+ urlSet =
urlSet.exclude(".*/openejb-[^/]+(.(jar|ear|war)(!/)?|/target/(test-)?classes/?)");
+ }
}
-// urlSet = urlSet.exclude(exclude);
-// urlSet = urlSet.include(includes);
+
List<URL> urls = urlSet.getUrls();
int size = urls.size();
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=1090420&r1=1090419&r2=1090420&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
Fri Apr 8 20:07:19 2011
@@ -112,10 +112,9 @@ public class JndiEncInfoBuilder {
}
public void build(JndiConsumer jndiConsumer, String ejbName, String
moduleId, JndiEncInfo moduleJndiEnc, JndiEncInfo compJndiEnc) throws
OpenEJBException {
- assert ejbName != null;
- assert moduleJndiEnc != null : format("%s moduleJndiEnc is null",
ejbName);
- assert compJndiEnc != null : format("%s compJndiEnc is null", ejbName);
- assert jndiConsumer != null : format("%s jndiConsumer is null",
ejbName);
+ assert moduleJndiEnc != null;
+ assert compJndiEnc != null;
+ assert jndiConsumer != null;
URI moduleUri = null;
if (moduleId != null) {
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java?rev=1090420&r1=1090419&r2=1090420&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
Fri Apr 8 20:07:19 2011
@@ -264,7 +264,7 @@ public class ApplicationComposer extends
final ContainerSystem containerSystem =
SystemInstance.get().getComponent(ContainerSystem.class);
final BeanContext context =
containerSystem.getBeanContext(javaClass.getName());
- InjectionProcessor processor = new
InjectionProcessor(testInstance, context.getInjections(),
context.getJndiContext());
+ final InjectionProcessor processor = new
InjectionProcessor(testInstance, context.getInjections(),
context.getJndiContext());
processor.createInstance();
Modified:
openejb/trunk/openejb3/examples/simple-stateless/src/test/java/org/superbiz/calculator/CalculatorTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/simple-stateless/src/test/java/org/superbiz/calculator/CalculatorTest.java?rev=1090420&r1=1090419&r2=1090420&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/simple-stateless/src/test/java/org/superbiz/calculator/CalculatorTest.java
(original)
+++
openejb/trunk/openejb3/examples/simple-stateless/src/test/java/org/superbiz/calculator/CalculatorTest.java
Fri Apr 8 20:07:19 2011
@@ -16,8 +16,11 @@
*/
package org.superbiz.calculator;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Properties;
+import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;
import javax.naming.InitialContext;
@@ -26,14 +29,18 @@ import junit.framework.TestCase;
public class CalculatorTest extends TestCase {
//START SNIPPET: setup
- private InitialContext initialContext;
+ private Context context;
protected void setUp() throws Exception {
- Properties properties = new Properties();
- properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
- initialContext = new InitialContext(properties);
+// Map<Object, Object> map = new HashMap<Object, Object>();
+// map.put(EJBContainer.APP_NAME, "test");
+// EJBContainer ejbContainer = EJBContainer.createEJBContainer(map);
+ EJBContainer ejbContainer = EJBContainer.createEJBContainer();
+
+ context = ejbContainer.getContext();
}
+
//END SNIPPET: setup
/**
@@ -43,7 +50,7 @@ public class CalculatorTest extends Test
*/
//START SNIPPET: remote
public void testCalculatorViaRemoteInterface() throws Exception {
- Object object = initialContext.lookup("CalculatorImplRemote");
+ Object object =
context.lookup("java:global/simple-stateless/CalculatorImpl!"+CalculatorRemote.class.getName());
assertNotNull(object);
assertTrue(object instanceof CalculatorRemote);
@@ -60,7 +67,7 @@ public class CalculatorTest extends Test
*/
//START SNIPPET: local
public void testCalculatorViaLocalInterface() throws Exception {
- Object object = initialContext.lookup("CalculatorImplLocal");
+ Object object =
context.lookup("java:global/simple-stateless/CalculatorImpl");
assertNotNull(object);
assertTrue(object instanceof CalculatorLocal);
Modified:
openejb/trunk/openejb3/examples/spring-integration/src/test/java/org/superbiz/spring/MoviesTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/spring-integration/src/test/java/org/superbiz/spring/MoviesTest.java?rev=1090420&r1=1090419&r2=1090420&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/spring-integration/src/test/java/org/superbiz/spring/MoviesTest.java
(original)
+++
openejb/trunk/openejb3/examples/spring-integration/src/test/java/org/superbiz/spring/MoviesTest.java
Fri Apr 8 20:07:19 2011
@@ -28,6 +28,8 @@ public class MoviesTest extends TestCase
//Uncomment for debug logging
//org.apache.log4j.BasicConfigurator.configure();
+
System.setProperty("openejb.deployments.classpath.include",".*/spring-integration.*");
+
ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext("movies.xml");
// Can I lookup the Cineplex EJB via the Spring ApplicationContext