You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2007/01/23 03:43:29 UTC

svn commit: r498898 - in /incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config: AutoConfigAndDeploy.java ConfigurationFactory.java GeronimoMappedName.java

Author: dblevins
Date: Mon Jan 22 18:43:24 2007
New Revision: 498898

URL: http://svn.apache.org/viewvc?view=rev&rev=498898
Log:
Enhanced the AutoConfigAndDeploy so that it can do the job of the AutoDeployer.
Added hack for Geronimo integration.

Added:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/GeronimoMappedName.java
Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoConfigAndDeploy.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationFactory.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoConfigAndDeploy.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoConfigAndDeploy.java?view=diff&rev=498898&r1=498897&r2=498898
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoConfigAndDeploy.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoConfigAndDeploy.java Mon Jan 22 18:43:24 2007
@@ -40,11 +40,29 @@
     public static Logger logger = Logger.getInstance("OpenEJB", "org.apache.openejb.util.resources");
 
     private final ConfigurationFactory configFactory;
+    private boolean autoCreateContainers = true;
+    private boolean autoCreateConnectors = true;
 
     public AutoConfigAndDeploy(ConfigurationFactory configFactory) {
         this.configFactory = configFactory;
     }
 
+    public boolean autoCreateConnectors() {
+        return autoCreateConnectors;
+    }
+
+    public void autoCreateConnectors(boolean autoCreateConnectors) {
+        this.autoCreateConnectors = autoCreateConnectors;
+    }
+
+    public boolean autoCreateContainers() {
+        return autoCreateContainers;
+    }
+
+    public void autoCreateContainers(boolean autoCreateContainers) {
+        this.autoCreateContainers = autoCreateContainers;
+    }
+
     public void init() throws OpenEJBException {
     }
 
@@ -76,8 +94,7 @@
 
         Bean[] beans = EjbJarUtils.getBeans(ejbModule.getEjbJar());
 
-        for (int i = 0; i < beans.length; i++) {
-            final Bean bean = beans[i];
+        for (Bean bean : beans) {
 
             EjbDeployment ejbDeployment = openejbJar.getDeploymentsByEjbName().get(bean.getEjbName());
             if (ejbDeployment == null) {
@@ -92,10 +109,14 @@
                 String containerId = getUsableContainer(containerInfoType);
 
                 if (containerId == null){
-                    ContainerInfo containerInfo = configFactory.configureService(containerInfoType);
-                    logger.warning("Auto-creating a container for bean " + ejbDeployment.getDeploymentId() + ": Container(type=" + bean.getType() + ", id=" + containerInfo.id + ")");
-                    configFactory.install(containerInfo);
-                    containerId = containerInfo.id;
+                    if (autoCreateContainers) {
+                        ContainerInfo containerInfo = configFactory.configureService(containerInfoType);
+                        logger.warning("Auto-creating a container for bean " + ejbDeployment.getDeploymentId() + ": Container(type=" + bean.getType() + ", id=" + containerInfo.id + ")");
+                        configFactory.install(containerInfo);
+                        containerId = containerInfo.id;
+                    } else {
+                        throw new OpenEJBException("A container of type " + bean.getType() + " must be declared in the configuration file for bean: "+bean.getEjbName());
+                    }
                 }
 
                 ejbDeployment.setContainerId(containerId);
@@ -107,9 +128,13 @@
             // create the container if it doesn't exist
             if (!configFactory.getContainerIds().contains(ejbDeployment.getContainerId())) {
 
-                ContainerInfo containerInfo = configFactory.configureService(ConfigurationFactory.getContainerInfoType(bean.getType()));
-                logger.warning("Auto-creating a container for bean " + ejbDeployment.getDeploymentId() + ": Container(type=" + bean.getType() + ", id=" + containerInfo.id + ")");
-                configFactory.install(containerInfo);
+                if (autoCreateContainers){
+                    ContainerInfo containerInfo = configFactory.configureService(ConfigurationFactory.getContainerInfoType(bean.getType()));
+                    logger.warning("Auto-creating a container for bean " + ejbDeployment.getDeploymentId() + ": Container(type=" + bean.getType() + ", id=" + containerInfo.id + ")");
+                    configFactory.install(containerInfo);
+                } else {
+                    throw new OpenEJBException("A container of type " + bean.getType() + " must be declared in the configuration file for bean: "+bean.getEjbName());
+                }
 
             }
 
@@ -129,10 +154,15 @@
                     if (!connectorMap.contains(resRefName)) {
                         String name = resRefName.replaceFirst(".*/", "");
                         if (!connectorMap.contains(name)) {
-                            ConnectorInfo connectorInfo = configFactory.configureService(ConnectorInfo.class);
-                            id = connectorInfo.id = name;
-                            logger.warning("Auto-creating a connector for res-ref-name '" + resRefName + "' in bean '" + ejbDeployment.getDeploymentId() + "': Connector(id=" + id + ").  THERE IS LITTLE CHANCE THIS WILL WORK!");
-                            configFactory.install(connectorInfo);
+
+                            if (autoCreateConnectors) {
+                                ConnectorInfo connectorInfo = configFactory.configureService(ConnectorInfo.class);
+                                id = connectorInfo.id = name;
+                                logger.warning("Auto-creating a connector for res-ref-name '" + resRefName + "' in bean '" + ejbDeployment.getDeploymentId() + "': Connector(id=" + id + ").  THERE IS LITTLE CHANCE THIS WILL WORK!");
+                                configFactory.install(connectorInfo);
+                            } else {
+                                throw new OpenEJBException("Cannot find a connector named '"+resRefName+"' or '"+name+"' to auto-link for bean: "+bean.getEjbName()+" resource-ref "+resRefName);
+                            }
                         }
                     }
                     logger.warning("Auto-linking res-ref-name '" + resRefName + "' in bean " + ejbDeployment.getDeploymentId() + " to Connector(id=" + id + ")");
@@ -143,7 +173,12 @@
 
                     List<String> connectorMap = configFactory.getConnectorIds();
                     if (!connectorMap.contains(link.getResId())) {
-                        logger.error("Bad resource-link in bean '" + ejbDeployment.getDeploymentId() + "': No such connector with specified res-id: ResourceLink(res-ref-name=" + link.getResRefName() + ", res-id" + link.getResId() + ")");
+                        String message = "Bad resource-link in bean '" + ejbDeployment.getDeploymentId() + "': No such connector with specified res-id: ResourceLink(res-ref-name=" + link.getResRefName() + ", res-id" + link.getResId() + ")";
+                        if (!autoCreateConnectors){
+                            throw new OpenEJBException(message);
+                        }
+
+                        logger.error(message);
 
                         String id = null;
                         if (connectorMap.size() > 0) {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationFactory.java?view=diff&rev=498898&r1=498897&r2=498898
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationFactory.java Mon Jan 22 18:43:24 2007
@@ -96,13 +96,19 @@
 
         DynamicDeployer deployer;
         if (offline) {
-            deployer = new AutoDeployer(this);
-
+            AutoConfigAndDeploy autoConfigAndDeploy = new AutoConfigAndDeploy(this);
+            autoConfigAndDeploy.autoCreateConnectors(false);
+            autoConfigAndDeploy.autoCreateContainers(false);
+            deployer = autoConfigAndDeploy;
         } else {
             deployer = new AutoConfigAndDeploy(this);
         }
 
         deployer = new AnnotationDeployer(deployer);
+
+        if (System.getProperty("duct tape") != null){
+            deployer = new GeronimoMappedName(deployer);
+        }
 
         boolean shouldValidate = !SystemInstance.get().getProperty("openejb.validation.skip", "false").equalsIgnoreCase("true");
         if (shouldValidate) {

Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/GeronimoMappedName.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/GeronimoMappedName.java?view=auto&rev=498898
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/GeronimoMappedName.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/GeronimoMappedName.java Mon Jan 22 18:43:24 2007
@@ -0,0 +1,98 @@
+/**
+ * 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.openejb.alt.config;
+
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.EjbRef;
+import org.apache.openejb.jee.EjbLocalRef;
+import org.apache.openejb.jee.MessageDestinationRef;
+import org.apache.openejb.jee.PersistenceContextRef;
+import org.apache.openejb.jee.PersistenceUnitRef;
+import org.apache.openejb.jee.ResourceRef;
+import org.apache.openejb.jee.ResourceEnvRef;
+import org.apache.openejb.jee.ServiceRef;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class GeronimoMappedName implements DynamicDeployer {
+
+    private static final String MAPPED_NAME_PREFIX = "jndi:java:comp/geronimo/env/";
+
+    private final DynamicDeployer deployer;
+
+    public GeronimoMappedName(DynamicDeployer deployer) {
+        this.deployer = deployer;
+    }
+
+    public AppModule deploy(AppModule appModule) throws OpenEJBException {
+        mapReferences(appModule);
+        appModule = deployer.deploy(appModule);
+        mapReferences(appModule);
+        return appModule;
+    }
+
+    private void mapReferences(AppModule appModule) {
+        for (EjbModule ejbModule : appModule.getEjbModules()) {
+            mapReferences(ejbModule.getEjbJar());
+        }
+    }
+
+    private void mapReferences(EjbJar ejbJar) {
+        if (ejbJar == null){
+            return;
+        }
+
+        for (EnterpriseBean enterpriseBean : ejbJar.getEnterpriseBeans()) {
+            for (EjbRef ref : enterpriseBean.getEjbRef()) {
+                String refName = ref.getEjbRefName();
+                ref.setMappedName(MAPPED_NAME_PREFIX + refName);
+            }
+            for (EjbLocalRef ref : enterpriseBean.getEjbLocalRef()) {
+                String refName = ref.getEjbRefName();
+                ref.setMappedName(MAPPED_NAME_PREFIX + refName);
+            }
+            for (MessageDestinationRef ref : enterpriseBean.getMessageDestinationRef()) {
+                String refName = ref.getMessageDestinationRefName();
+                ref.setMappedName(MAPPED_NAME_PREFIX + refName);
+            }
+            for (PersistenceContextRef ref : enterpriseBean.getPersistenceContextRef()) {
+                String refName = ref.getPersistenceContextRefName();
+                ref.setMappedName(MAPPED_NAME_PREFIX + refName);
+            }
+            for (PersistenceUnitRef ref : enterpriseBean.getPersistenceUnitRef()) {
+                String refName = ref.getPersistenceUnitRefName();
+                ref.setMappedName(MAPPED_NAME_PREFIX + refName);
+            }
+            for (ResourceRef ref : enterpriseBean.getResourceRef()) {
+                String refName = ref.getResRefName();
+                ref.setMappedName(MAPPED_NAME_PREFIX + refName);
+            }
+            for (ResourceEnvRef ref : enterpriseBean.getResourceEnvRef()) {
+                String refName = ref.getResourceEnvRefName();
+                ref.setMappedName(MAPPED_NAME_PREFIX + refName);
+            }
+            for (ServiceRef ref : enterpriseBean.getServiceRef()) {
+                String refName = ref.getServiceRefName();
+                ref.setMappedName(MAPPED_NAME_PREFIX + refName);
+            }
+        }
+    }
+
+}