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";
+    }
+}