You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by rm...@apache.org on 2013/05/14 18:48:35 UTC
git commit: DELTASPIKE-366 openejb cdictrl update + basic properties
usage tests
Updated Branches:
refs/heads/master 37653501d -> 9a85f05a4
DELTASPIKE-366 openejb cdictrl update + basic properties usage tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/commit/9a85f05a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/tree/9a85f05a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/diff/9a85f05a
Branch: refs/heads/master
Commit: 9a85f05a4a3ee2616634dffd1cf19388e2ac6ef8
Parents: 3765350
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Tue May 14 18:48:22 2013 +0200
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Tue May 14 18:48:22 2013 +0200
----------------------------------------------------------------------
.../cdise/openejb/OpenEjbContainerControl.java | 85 ++++++++-----
.../OpenEJbContainerControlConfigurationTest.java | 103 +++++++++++++++
.../apache/deltaspike/cdise/openejb/bean/Foo.java | 26 ++++
3 files changed, 182 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/9a85f05a/deltaspike/cdictrl/impl-openejb/src/main/java/org/apache/deltaspike/cdise/openejb/OpenEjbContainerControl.java
----------------------------------------------------------------------
diff --git a/deltaspike/cdictrl/impl-openejb/src/main/java/org/apache/deltaspike/cdise/openejb/OpenEjbContainerControl.java b/deltaspike/cdictrl/impl-openejb/src/main/java/org/apache/deltaspike/cdise/openejb/OpenEjbContainerControl.java
index aa9dbe6..680b320 100644
--- a/deltaspike/cdictrl/impl-openejb/src/main/java/org/apache/deltaspike/cdise/openejb/OpenEjbContainerControl.java
+++ b/deltaspike/cdictrl/impl-openejb/src/main/java/org/apache/deltaspike/cdise/openejb/OpenEjbContainerControl.java
@@ -18,34 +18,55 @@
*/
package org.apache.deltaspike.cdise.openejb;
-import javax.ejb.embeddable.EJBContainer;
+import org.apache.deltaspike.cdise.api.CdiContainer;
+import org.apache.deltaspike.cdise.api.ContextControl;
+import org.apache.openejb.OpenEjbContainer;
+import org.apache.openejb.core.LocalInitialContext;
+import org.apache.openejb.core.LocalInitialContextFactory;
+import org.apache.webbeans.config.WebBeansContext;
+
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
-import javax.inject.Inject;
+import javax.naming.Context;
+import javax.naming.InitialContext;
import javax.naming.NamingException;
-import java.util.HashMap;
import java.util.Map;
+import java.util.Properties;
import java.util.Set;
-import org.apache.webbeans.config.WebBeansContext;
-
-import org.apache.deltaspike.cdise.api.CdiContainer;
-import org.apache.deltaspike.cdise.api.ContextControl;
-
/**
- * OpenWebBeans specific implementation of {@link org.apache.deltaspike.cdise.api.CdiContainer}.
+ * OpenEJB specific implementation of {@link org.apache.deltaspike.cdise.api.CdiContainer}.
*/
@SuppressWarnings("UnusedDeclaration")
public class OpenEjbContainerControl implements CdiContainer
{
+ // global container config
+ private static final Properties PROPERTIES = new Properties();
+
+ static
+ {
+ // global properties
+ PROPERTIES.setProperty(Context.INITIAL_CONTEXT_FACTORY, LocalInitialContextFactory.class.getName());
+ PROPERTIES.setProperty(LocalInitialContext.ON_CLOSE, LocalInitialContext.Close.DESTROY.name());
+ try
+ {
+ OpenEjbContainerControl.class.getClassLoader().loadClass("org.apache.openejb.server.ServiceManager");
+ PROPERTIES.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true");
+ }
+ catch (final Exception e)
+ {
+ // ignored
+ }
+ }
+
+
private ContextControl ctxCtrl = null;
private Bean<ContextControl> ctxCtrlBean = null;
private CreationalContext<ContextControl> ctxCtrlCreationalContext = null;
- private EJBContainer openEjbContainer = null;
+ private Context context = null;
- @Inject
private BeanManager beanManager;
@Override
@@ -63,36 +84,29 @@ public class OpenEjbContainerControl implements CdiContainer
@Override
public synchronized void boot(Map<?, ?> properties)
{
- if (openEjbContainer == null)
+ if (context == null)
{
// this immediately boots the container
- openEjbContainer = EJBContainer.createEJBContainer(properties);
+ final Properties p = new Properties();
+ p.putAll(PROPERTIES);
+ if (properties != null) // override with user config
+ {
+ p.putAll(properties);
+ }
- // this magic code performs injection
try
{
- openEjbContainer.getContext().bind("inject", this);
+ context = new InitialContext(p);
}
- catch (NamingException e)
+ catch (final NamingException e)
{
- throw new RuntimeException("Could not perform OpenEJB injection", e);
+ throw new RuntimeException(e);
}
- if (beanManager == null)
- {
- // this happens if the OpenEJB injection didnt work
- beanManager = WebBeansContext.getInstance().getBeanManagerImpl();
- }
+ beanManager = WebBeansContext.currentInstance().getBeanManagerImpl();
}
}
- protected Map<?,?> getConfiguration()
- {
- Map<String, String> config = new HashMap<String, String>();
-
- return config;
- }
-
@Override
public synchronized void shutdown()
{
@@ -102,10 +116,17 @@ public class OpenEjbContainerControl implements CdiContainer
}
- if (openEjbContainer != null)
+ if (context != null)
{
- openEjbContainer.close();
- openEjbContainer = null;
+ try
+ {
+ context.close();
+ }
+ catch (final NamingException e)
+ {
+ // no-op
+ }
+ context = null;
}
ctxCtrl = null;
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/9a85f05a/deltaspike/cdictrl/impl-openejb/src/test/java/org/apache/deltaspike/cdise/openejb/OpenEJbContainerControlConfigurationTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/cdictrl/impl-openejb/src/test/java/org/apache/deltaspike/cdise/openejb/OpenEJbContainerControlConfigurationTest.java b/deltaspike/cdictrl/impl-openejb/src/test/java/org/apache/deltaspike/cdise/openejb/OpenEJbContainerControlConfigurationTest.java
new file mode 100644
index 0000000..de8309d
--- /dev/null
+++ b/deltaspike/cdictrl/impl-openejb/src/test/java/org/apache/deltaspike/cdise/openejb/OpenEJbContainerControlConfigurationTest.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.cdise.openejb;
+
+import org.apache.deltaspike.cdise.api.CdiContainer;
+import org.apache.deltaspike.cdise.api.CdiContainerLoader;
+import org.apache.deltaspike.cdise.openejb.bean.Foo;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.junit.Test;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.naming.NamingException;
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.HashMap;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class OpenEJbContainerControlConfigurationTest
+{
+ @Test
+ public void ensureDataSourceExist()
+ {
+ final CdiContainer container = CdiContainerLoader.getCdiContainer();
+ container.boot(new HashMap<Object, Object>()
+ {{
+ put("foo", "new://Resource?type=DataSource");
+ put("foo.JdbcUrl", "jdbc:hsqldb:mem:foo");
+ put("foo.JtaManaged", "false");
+ }});
+
+ try
+ {
+ final DataSource ds = DataSource.class.cast(SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext().lookup("java:openejb/Resource/foo"));
+ Connection c = null;
+ try {
+ c = ds.getConnection();
+ assertEquals("jdbc:hsqldb:mem:foo", c.getMetaData().getURL());
+ }
+ catch (SQLException e)
+ {
+ fail(e.getMessage());
+ }
+ finally
+ {
+ try
+ {
+ if (c != null) {
+ c.close();
+ }
+ }
+ catch (SQLException e)
+ {
+ // no-op
+ }
+ }
+ }
+ catch (final NamingException e)
+ {
+ fail(e.getMessage());
+ }
+ finally
+ {
+ container.shutdown();
+ }
+ }
+
+ @Test
+ public void basicInjection() // useless because of tcks but nice to have when working on this specific container
+ {
+ final CdiContainer container = CdiContainerLoader.getCdiContainer();
+ container.boot();
+
+ try
+ {
+ final BeanManager beanManager = container.getBeanManager();
+ assertEquals("foo", Foo.class.cast(beanManager.getReference(beanManager.resolve(beanManager.getBeans(Foo.class)), Foo.class, null)).name());
+ }
+ finally
+ {
+ container.shutdown();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/9a85f05a/deltaspike/cdictrl/impl-openejb/src/test/java/org/apache/deltaspike/cdise/openejb/bean/Foo.java
----------------------------------------------------------------------
diff --git a/deltaspike/cdictrl/impl-openejb/src/test/java/org/apache/deltaspike/cdise/openejb/bean/Foo.java b/deltaspike/cdictrl/impl-openejb/src/test/java/org/apache/deltaspike/cdise/openejb/bean/Foo.java
new file mode 100644
index 0000000..079f7a5
--- /dev/null
+++ b/deltaspike/cdictrl/impl-openejb/src/test/java/org/apache/deltaspike/cdise/openejb/bean/Foo.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.cdise.openejb.bean;
+
+public class Foo
+{
+ public String name() {
+ return "foo";
+ }
+}