You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/03/05 23:22:38 UTC
svn commit: r1297254 - in /openejb/trunk/openejb:
container/openejb-core/src/main/java/org/apache/openejb/assembler/
container/openejb-core/src/main/java/org/apache/openejb/cdi/
container/openejb-core/src/main/java/org/apache/openejb/config/ container/...
Author: rmannibucau
Date: Mon Mar 5 22:22:38 2012
New Revision: 1297254
URL: http://svn.apache.org/viewvc?rev=1297254&view=rev
Log:
rewriting a bit the way scan.xml is used (to valid), adding bm variable in scripting language to be able to use CDI some simple beans
Added:
openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/Bar.java
openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/BeanManagerHelperTest.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBValidatorService.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurableClasspathArchive.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/EmptyResourcesClassLoader.java
openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java
openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/OpenEJBScripter.java
openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/OpenEJBGroovyShellTest.java
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java?rev=1297254&r1=1297253&r2=1297254&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java Mon Mar 5 22:22:38 2012
@@ -41,6 +41,7 @@ import javax.ejb.TransactionManagement;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.Collection;
@@ -214,6 +215,7 @@ public class DeployerEjb implements Depl
}
// dump it
+ OutputStream os = null;
try {
final AdditionalDeployments additionalDeployments;
if (config.exists() && config.length() > 0) {
@@ -242,9 +244,12 @@ public class DeployerEjb implements Depl
}
}
}
- JaxbOpenejb.marshal(AdditionalDeployments.class, additionalDeployments, IO.write(config));
+ os = IO.write(config);
+ JaxbOpenejb.marshal(AdditionalDeployments.class, additionalDeployments, os);
} catch (Exception e) {
LOGGER.error("can't save the added app, will not be present next time you'll start", e);
+ } finally {
+ IO.close(os);
}
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBValidatorService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBValidatorService.java?rev=1297254&r1=1297253&r2=1297254&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBValidatorService.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBValidatorService.java Mon Mar 5 22:22:38 2012
@@ -33,7 +33,7 @@ public class OpenEJBValidatorService imp
@Override
public ValidatorFactory getDefaultValidatorFactory() {
try {
- return (ValidatorFactory)new InitialContext().lookup("java:comp/ValidatorFactory");
+ return (ValidatorFactory) new InitialContext().lookup("java:comp/ValidatorFactory");
} catch (NamingException e) {
throw new OpenEJBRuntimeException(e);
}
@@ -42,7 +42,7 @@ public class OpenEJBValidatorService imp
@Override
public Validator getDefaultValidator() {
try {
- return (Validator)new InitialContext().lookup("java:comp/Validator");
+ return (Validator) new InitialContext().lookup("java:comp/Validator");
} catch (NamingException e) {
throw new OpenEJBRuntimeException(e);
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurableClasspathArchive.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurableClasspathArchive.java?rev=1297254&r1=1297253&r2=1297254&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurableClasspathArchive.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurableClasspathArchive.java Mon Mar 5 22:22:38 2012
@@ -1,5 +1,6 @@
package org.apache.openejb.config;
+import org.apache.openejb.core.EmptyResourcesClassLoader;
import org.apache.openejb.loader.SystemInstance;
import org.apache.xbean.finder.archive.Archive;
import org.apache.xbean.finder.archive.ClassesArchive;
@@ -12,10 +13,10 @@ import org.apache.xbean.finder.filter.Pa
import java.io.IOException;
import java.net.URL;
+import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -59,13 +60,23 @@ public class ConfigurableClasspathArchiv
public static Archive archive(final Module module, final URL location, boolean forceDescriptor) {
final ClassLoader loader = module.getClassLoader();
+ final String name = "META-INF/" + name();
try {
- final URL scanXml = (URL) module.getAltDDs().get(SystemInstance.get().getProperty(SCAN_XML_PROPERTY, SCAN_XML_NAME));
- if (scanXml == null) {
+ URL scanXml = new URLClassLoader(new URL[] { location }, new EmptyResourcesClassLoader()).getResource(name);
+ if (scanXml == null && !forceDescriptor) {
return ClasspathArchive.archive(loader, location);
+ } else if (scanXml == null) {
+ return new ClassesArchive();
+ }
+
+ // read descriptors
+ ScanUtil.ScanHandler scan;
+ if (scanXml != null) {
+ scan = ScanUtil.read(scanXml);
+ } else {
+ scan = new ScanUtil.ScanHandler();
}
- final ScanUtil.ScanHandler scan = ScanUtil.read(scanXml);
final Archive packageArchive = packageArchive(scan.getPackages(), loader, location);
final Archive classesArchive = classesArchive(scan.getPackages(), scan.getClasses(), loader);
@@ -83,6 +94,10 @@ public class ConfigurableClasspathArchiv
}
}
+ private static String name() {
+ return SystemInstance.get().getProperty(SCAN_XML_PROPERTY, SCAN_XML_NAME);
+ }
+
public static Archive packageArchive(final Set<String> packageNames, final ClassLoader loader, final URL url) {
if (!packageNames.isEmpty()) {
return new FilteredArchive(ClasspathArchive.archive(loader, url), filters(packageNames));
@@ -132,22 +147,24 @@ public class ConfigurableClasspathArchiv
return false;
}
- protected static class FakeModule extends Module {
+ public static class FakeModule extends Module {
public FakeModule(final ClassLoader loader) {
- this(loader, Collections.EMPTY_MAP);
+ this(loader, null);
}
public FakeModule(final ClassLoader loader, final Map<String, Object> altDD) {
- this(loader, altDD, System.getProperty(SCAN_XML_PROPERTY, SCAN_XML_NAME));
+ this(loader, altDD, name());
}
public FakeModule(final ClassLoader loader, final Map<String, Object> altDD, final String name) {
super(false);
setClassLoader(loader);
- URL scanXml = (URL) altDD.get(name);
- if (scanXml == null) {
- scanXml = loader.getResource(name);
+ final URL scanXml;
+ if (altDD == null) {
+ scanXml = loader.getResource("META-INF/" + name);
+ } else {
+ scanXml = (URL) altDD.get(name);
}
if (scanXml != null) {
getAltDDs().put(SCAN_XML_NAME, scanXml);
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/EmptyResourcesClassLoader.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/EmptyResourcesClassLoader.java?rev=1297254&r1=1297253&r2=1297254&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/EmptyResourcesClassLoader.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/EmptyResourcesClassLoader.java Mon Mar 5 22:22:38 2012
@@ -5,6 +5,10 @@ import java.net.URL;
import java.util.Enumeration;
public class EmptyResourcesClassLoader extends ClassLoader {
+ public EmptyResourcesClassLoader() {
+ super(null);
+ }
+
@Override
public Enumeration<URL> getResources(String name) throws IOException {
return new Enumeration<URL>() {
Modified: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java?rev=1297254&r1=1297253&r2=1297254&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java (original)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java Mon Mar 5 22:22:38 2012
@@ -35,6 +35,7 @@ import org.apache.xbean.recipe.Option;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -88,7 +89,7 @@ public class CliRunnable implements Runn
UrlSet urlSet = new UrlSet(loader);
urlSet = urlSet.exclude(loader.getParent());
- final IAnnotationFinder finder = new AnnotationFinder(new ConfigurableClasspathArchive(loader, true, urlSet.getUrls()));
+ final IAnnotationFinder finder = new AnnotationFinder(new ConfigurableClasspathArchive(new ConfigurableClasspathArchive.FakeModule(loader, Collections.EMPTY_MAP), true, urlSet.getUrls()));
for (Annotated<Class<?>> cmd : finder.findMetaAnnotatedClasses(Command.class)) {
try {
final Command annotation = cmd.getAnnotation(Command.class);
Modified: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/OpenEJBScripter.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/OpenEJBScripter.java?rev=1297254&r1=1297253&r2=1297254&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/OpenEJBScripter.java (original)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/OpenEJBScripter.java Mon Mar 5 22:22:38 2012
@@ -16,11 +16,15 @@
*/
package org.apache.openejb.server.cli;
+import org.apache.openejb.AppContext;
import org.apache.openejb.BeanContext;
+import org.apache.openejb.OpenEJBRuntimeException;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.util.proxy.ProxyEJB;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
@@ -30,6 +34,7 @@ import javax.script.ScriptException;
import javax.script.SimpleBindings;
import java.util.HashMap;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class OpenEJBScripter {
@@ -78,6 +83,8 @@ public class OpenEJBScripter {
private static Bindings binding() {
final Bindings bindings = new SimpleBindings();
+ bindings.put("bm", new BeanManagerHelper());
+
final ContainerSystem cs = SystemInstance.get().getComponent(ContainerSystem.class);
for (BeanContext beanContext : cs.deployments()) {
if (BeanContext.Comp.class.equals(beanContext.getBeanClass())) {
@@ -100,4 +107,43 @@ public class OpenEJBScripter {
}
return bindings;
}
+
+ public static class BeanManagerHelper {
+ public Object beanFromClass(final String appName, final String classname) {
+ final AppContext appContext = appContext(appName);
+ final BeanManager bm = appContext.getBeanManager();
+ final Class<?> clazz;
+ try {
+ clazz = appContext.getClassLoader().loadClass(classname);
+ } catch (ClassNotFoundException e) {
+ throw new OpenEJBRuntimeException(e);
+ }
+ final Set<Bean<?>> beans = bm.getBeans(clazz);
+ return instance(bm, beans, clazz);
+ }
+
+ public Object beanFromName(final String appName, final String name) {
+ final BeanManager bm = beanManager(appName);
+ final Set<Bean<?>> beans = bm.getBeans(name);
+ return instance(bm, beans, Object.class);
+ }
+
+ private <T> T instance(final BeanManager bm, final Set<Bean<?>> beans, final Class<T> clazz) {
+ final Bean<?> bean = bm.resolve(beans);
+ return (T) bm.getReference(bean, clazz, bm.createCreationalContext(bean));
+ }
+
+ private BeanManager beanManager(final String appName) {
+ return appContext(appName).getBeanManager();
+ }
+
+ private AppContext appContext(final String appName) {
+ final ContainerSystem cs = SystemInstance.get().getComponent(ContainerSystem.class);
+ final AppContext appContext = cs.getAppContext(appName);
+ if (appContext == null) {
+ throw new OpenEJBRuntimeException("can't find application " + appName);
+ }
+ return appContext;
+ }
+ }
}
Added: openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/Bar.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/Bar.java?rev=1297254&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/Bar.java (added)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/Bar.java Mon Mar 5 22:22:38 2012
@@ -0,0 +1,10 @@
+package org.apache.openejb.server.groovy;
+
+import javax.inject.Named;
+
+@Named
+public class Bar {
+ public String test() {
+ return "ok";
+ }
+}
Added: openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/BeanManagerHelperTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/BeanManagerHelperTest.java?rev=1297254&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/BeanManagerHelperTest.java (added)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/BeanManagerHelperTest.java Mon Mar 5 22:22:38 2012
@@ -0,0 +1,52 @@
+package org.apache.openejb.server.groovy;
+
+import org.apache.openejb.jee.Beans;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.junit.Module;
+import org.apache.openejb.server.cli.OpenEJBScripter;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.inject.Named;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(ApplicationComposer.class)
+public class BeanManagerHelperTest {
+ private static OpenEJBScripter.BeanManagerHelper helper = new OpenEJBScripter.BeanManagerHelper();
+
+ @Module
+ public Beans ejbJar() {
+ final Beans beans = new Beans();
+ beans.addManagedClass(Pojo.class);
+ return beans;
+ }
+
+ @Before
+ public void resetID() {
+ Pojo.ID = 5;
+ }
+
+ @Test
+ public void getInstanceFromClass() {
+ for (int i = 1; i < 5; i++) {
+ final Pojo pojo = (Pojo) helper.beanFromClass("BeanManagerHelperTest", Pojo.class.getName());
+ assertEquals(5 + i, pojo.id);
+ }
+ }
+
+ @Test
+ public void getInstanceFromName() {
+ for (int i = 1; i < 5; i++) {
+ final Pojo pojo = (Pojo) helper.beanFromName("BeanManagerHelperTest", "pojo");
+ assertEquals(5 + i, pojo.id);
+ }
+ }
+
+ @Named
+ public static class Pojo {
+ public static int ID;
+ public int id = ++ID;
+ }
+}
Modified: openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/OpenEJBGroovyShellTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/OpenEJBGroovyShellTest.java?rev=1297254&r1=1297253&r2=1297254&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/OpenEJBGroovyShellTest.java (original)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/test/java/org/apache/openejb/server/groovy/OpenEJBGroovyShellTest.java Mon Mar 5 22:22:38 2012
@@ -24,6 +24,8 @@ import org.junit.Test;
import javax.ejb.embeddable.EJBContainer;
import javax.script.ScriptException;
+import java.util.Properties;
+
import static org.junit.Assert.assertEquals;
public class OpenEJBGroovyShellTest {
@@ -31,7 +33,9 @@ public class OpenEJBGroovyShellTest {
@BeforeClass
public static void start() {
- container = EJBContainer.createEJBContainer();
+ final Properties properties = new Properties();
+ properties.setProperty(EJBContainer.APP_NAME, OpenEJBGroovyShellTest.class.getSimpleName());
+ container = EJBContainer.createEJBContainer(properties);
}
@AfterClass
@@ -45,4 +49,11 @@ public class OpenEJBGroovyShellTest {
final Object out = shell.evaluate("groovy", "Foo.foo()");
assertEquals("foo", out);
}
+
+ @Test
+ public void callUsingCDI() throws ScriptException {
+ final OpenEJBScripter shell = new OpenEJBScripter();
+ final Object out = shell.evaluate("groovy", "bm.beanFromName('OpenEJBGroovyShellTest', 'bar').test()");
+ assertEquals("ok", out);
+ }
}