Author: andygumbrecht
Date: Thu Dec 20 10:28:57 2012
New Revision: 1424393

URL: http://svn.apache.org/viewvc?rev=1424393&view=rev
Log:
Use a case insensitive key fallback for CoreContainerSystem AppContexts.
Ensure generated file is closed on error and, because createTempFile can be 
temperamental, give it another chance.
Finals and overrides.

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmpJarBuilder.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityContextHandler.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1424393&r1=1424392&r2=1424393&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 Thu Dec 20 10:28:57 2012
@@ -706,7 +706,7 @@ public class Assembler extends Assembler
                 }
             }
 
-            List<BeanContext> allDeployments = initEjbs(classLoader, appInfo, 
appContext, injections, new ArrayList<BeanContext>(), null);
+            final List<BeanContext> allDeployments = initEjbs(classLoader, 
appInfo, appContext, injections, new ArrayList<BeanContext>(), null);
 
             new CdiBuilder().build(appInfo, appContext, allDeployments);
 
@@ -830,7 +830,7 @@ public class Assembler extends Assembler
         for (final EjbJarInfo ejbJar : appInfo.ejbJars) {
             boolean skip = false;
             if (!appInfo.webAppAlone) {
-                for (WebAppInfo webapp : appInfo.webApps) {
+                for (final WebAppInfo webapp : appInfo.webApps) {
                     if ((webappId == null && 
ejbJar.moduleId.equals(webapp.moduleId))
                             || (webappId != null && 
!ejbJar.moduleId.equals(webappId))) {
                         skip = true;
@@ -1779,7 +1779,7 @@ public class Assembler extends Assembler
 
             // WorkManager: the resource adapter can use this to dispatch 
messages or perform tasks
             final WorkManager workManager;
-            if (transactionManager instanceof GeronimoTransactionManager) {
+            if 
(GeronimoTransactionManager.class.isInstance(transactionManager)) {
                 final GeronimoTransactionManager geronimoTransactionManager = 
(GeronimoTransactionManager) transactionManager;
                 final TransactionContextHandler txWorkContextHandler = new 
TransactionContextHandler(geronimoTransactionManager);
 

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmpJarBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmpJarBuilder.java?rev=1424393&r1=1424392&r2=1424393&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmpJarBuilder.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmpJarBuilder.java
 Thu Dec 20 10:28:57 2012
@@ -71,8 +71,11 @@ public class CmpJarBuilder {
         }
 
         boolean threwException = false;
-        final JarOutputStream jarOutputStream = openJarFile();
+        JarOutputStream jarOutputStream = null;
+
         try {
+            jarOutputStream = openJarFile(this);
+
             // Generate CMP implementation classes
             for (final EjbJarInfo ejbJar : appInfo.ejbJars) {
                 for (final EnterpriseBeanInfo beanInfo : 
ejbJar.enterpriseBeans) {
@@ -92,7 +95,9 @@ public class CmpJarBuilder {
             threwException = true;
             throw e;
         } finally {
+
             close(jarOutputStream);
+
             if (threwException) {
                 if (!jarFile.delete()) {
                     jarFile.deleteOnExit();
@@ -234,25 +239,36 @@ public class CmpJarBuilder {
         }
     }
 
-    private JarOutputStream openJarFile() throws IOException {
-        if (jarFile != null) {
+    private static synchronized JarOutputStream openJarFile(final 
CmpJarBuilder instance) throws IOException {
+        if (instance.jarFile != null) {
             throw new IllegalStateException("Jar file is closed");
         }
 
         // if url caching is enabled, generate the file directly in the cache 
dir, so it doesn't have to be recoppied
-        jarFile = File.createTempFile("OpenEJB_Generated_", ".jar", 
UrlCache.cacheDir);
+        try {
+            instance.jarFile = File.createTempFile("OpenEJB_Generated_", 
".jar", UrlCache.cacheDir);
+        } catch (IOException e) {
+
+            //Try
+            try {
+                Thread.sleep(50);
+            } catch (InterruptedException ie) {
+                //Ignore
+            }
+            instance.jarFile = File.createTempFile("OpenEJB_Generated_", 
".jar", UrlCache.cacheDir);
+        }
 
         Thread.yield();
 
-        jarFile.deleteOnExit();
-        return new JarOutputStream(IO.write(jarFile));
+        instance.jarFile.deleteOnExit();
+        return new JarOutputStream(IO.write(instance.jarFile));
     }
 
     private void close(final JarOutputStream jarOutputStream) {
         if (jarOutputStream != null) {
             try {
                 jarOutputStream.close();
-            } catch (IOException ignored) {
+            } catch (Throwable ignored) {
             }
         }
     }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java?rev=1424393&r1=1424392&r2=1424393&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
 Thu Dec 20 10:28:57 2012
@@ -654,11 +654,12 @@ class AppInfoBuilder {
         }
     }
 
+    @SuppressWarnings("unchecked")
     private String findRelatedWebApp(final AppModule appModule, final String 
rootUrl) {
-        for (WebModule webModule : appModule.getWebModules()) {
+        for (final WebModule webModule : appModule.getWebModules()) {
             final List<URL> pXmls = (List<URL>) 
webModule.getAltDDs().get(DeploymentLoader.EAR_WEBAPP_PERSISTENCE_XML_JARS);
             if (pXmls != null) {
-                for (URL url : pXmls) {
+                for (final URL url : pXmls) {
                     if (url.toExternalForm().contains(rootUrl)) {
                         return webModule.getModuleId();
                     }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1424393&r1=1424392&r2=1424393&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 Thu Dec 20 10:28:57 2012
@@ -530,10 +530,10 @@ public class DeploymentLoader implements
             DeploymentsResolver.loadFromClasspath(base, filteredUrls, 
appModule.getClassLoader());
             addPersistenceUnits(appModule, filteredUrls.toArray(new 
URL[filteredUrls.size()]));
 
-            for (WebModule webModule : appModule.getWebModules()) {
+            for (final WebModule webModule : appModule.getWebModules()) {
                 final List<URL> scannableUrls = webModule.getScannableUrls();
                 final List<URL> foundRootUrls = new ArrayList<URL>();
-                for (URL url : scannableUrls) {
+                for (final URL url : scannableUrls) {
                     if (!addPersistenceUnits(appModule, url).isEmpty()) {
                         foundRootUrls.add(url);
                     }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java?rev=1424393&r1=1424392&r2=1424393&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
 Thu Dec 20 10:28:57 2012
@@ -32,6 +32,7 @@ import java.util.concurrent.ConcurrentHa
  * @org.apache.xbean.XBean element="containerSystem"
  */
 public class CoreContainerSystem implements 
org.apache.openejb.spi.ContainerSystem {
+
     private final Map<Object, AppContext> apps = new ConcurrentHashMap<Object, 
AppContext>();
     private final Map<Object, BeanContext> deployments = new 
ConcurrentHashMap<Object, BeanContext>();
     private final Map<Object, Container> containers = new 
ConcurrentHashMap<Object, Container>();
@@ -42,15 +43,15 @@ public class CoreContainerSystem impleme
      * Constructs a CoreContainerSystem and initializes the root JNDI context.
      * It also creates three sub contexts, namely
      * <ul>
-     *  <li>java:openejb/local</li>
-     *  <li>java:openejb/client</li>
-     *  <li>java:openejb/Deployment</li>
+     * <li>java:openejb/local</li>
+     * <li>java:openejb/client</li>
+     * <li>java:openejb/Deployment</li>
      * </ul>
      *
-     *@throws RuntimeException if there is a problem during initialization of 
the root context
-     * @param jndiFactory
+     * @param jndiFactory JndiFactory
+     * @throws RuntimeException if there is a problem during initialization of 
the root context
      */
-    public CoreContainerSystem(JndiFactory jndiFactory) {
+    public CoreContainerSystem(final JndiFactory jndiFactory) {
 
         if (jndiFactory == null) {
             throw new NullPointerException("JndiFactory required");
@@ -58,56 +59,61 @@ public class CoreContainerSystem impleme
         jndiContext = jndiFactory.createRootContext();
         try {
             if (!(jndiContext.lookup("openejb/local") instanceof Context)
-            || !(jndiContext.lookup("openejb/remote") instanceof Context)
-            || !(jndiContext.lookup("openejb/client") instanceof Context)
-            || !(jndiContext.lookup("openejb/Deployment") instanceof Context)
-            || !(jndiContext.lookup("openejb/global") instanceof Context)) {
+                || !(jndiContext.lookup("openejb/remote") instanceof Context)
+                || !(jndiContext.lookup("openejb/client") instanceof Context)
+                || !(jndiContext.lookup("openejb/Deployment") instanceof 
Context)
+                || !(jndiContext.lookup("openejb/global") instanceof Context)) 
{
                 throw new OpenEJBRuntimeException("core openejb naming context 
not properly initialized.  It must have subcontexts for openejb/local, 
openejb/remote, openejb/client, and openejb/Deployment already present");
             }
-        }
-        catch (javax.naming.NamingException exception) {
+        } catch (javax.naming.NamingException exception) {
             throw new OpenEJBRuntimeException("core openejb naming context not 
properly initialized.  It must have subcontexts for openejb/local, 
openejb/remote, openejb/client, and openejb/Deployment already present", 
exception);
         }
         SystemInstance.get().setComponent(JndiFactory.class, jndiFactory);
     }
+
     /**
      * Returns the DeploymentInfo for an EJB with the given deploymentID.
-     * 
+     *
      * @param deploymentID The deployment ID of an EJB
      */
-    public BeanContext getBeanContext(Object deploymentID) {
+    @Override
+    public BeanContext getBeanContext(final Object deploymentID) {
         return deployments.get(deploymentID);
     }
 
+    @Override
     public BeanContext[] deployments() {
         return deployments.values().toArray(new 
BeanContext[deployments.size()]);
     }
 
-    public void addDeployment(BeanContext deployment) {
+    public void addDeployment(final BeanContext deployment) {
         this.deployments.put(deployment.getDeploymentID(), deployment);
     }
 
-    public void removeBeanContext(BeanContext info){
+    public void removeBeanContext(final BeanContext info) {
         this.deployments.remove(info.getDeploymentID());
     }
 
-    public Container getContainer(Object id) {
+    @Override
+    public Container getContainer(final Object id) {
         return containers.get(id);
     }
 
-    public Container [] containers() {
-        return containers.values().toArray(new Container [containers.size()]);
+    @Override
+    public Container[] containers() {
+        return containers.values().toArray(new Container[containers.size()]);
     }
 
-    public void addContainer(Object id, Container c) {
+    public void addContainer(final Object id, final Container c) {
         containers.put(id, c);
     }
 
-    public void removeContainer(Object id) {
+    public void removeContainer(final Object id) {
         containers.remove(id);
     }
 
-    public WebContext getWebContext(String id) {
+    @Override
+    public WebContext getWebContext(final String id) {
         return webDeployments.get(id);
     }
 
@@ -115,14 +121,15 @@ public class CoreContainerSystem impleme
         return webDeployments.values().toArray(new 
WebContext[webDeployments.size()]);
     }
 
-    public void addWebContext(WebContext webDeployment) {
+    public void addWebContext(final WebContext webDeployment) {
         this.webDeployments.put(webDeployment.getId(), webDeployment);
     }
 
-    public void removeWebContext(WebContext info){
+    public void removeWebContext(final WebContext info) {
         this.webDeployments.remove(info.getId());
     }
 
+    @Override
     public Context getJNDIContext() {
         return jndiContext;
     }
@@ -133,19 +140,33 @@ public class CoreContainerSystem impleme
     }
 
     @Override
-    public AppContext getAppContext(Object id) {
-        return apps.get(id);
+    public AppContext getAppContext(final Object id) {
+
+        AppContext context = apps.get(id);
+
+        if (null == context && null != id) {
+            context = apps.get(id.toString().toLowerCase());
+        }
+
+        return context;
     }
 
-    public void addAppContext(AppContext appContext) {
-        apps.put(appContext.getId(), appContext);
+    public void addAppContext(final AppContext appContext) {
+        apps.put(appContext.getId().toLowerCase(), appContext);
     }
-    
-    public void removeAppContext(Object id) {
-        apps.remove(id);
+
+    public AppContext removeAppContext(final Object id) {
+
+        AppContext context = apps.remove(id);
+
+        if (null == context && null != id) {
+            context = apps.remove(id.toString().toLowerCase());
+        }
+
+        return context;
     }
 
-    public synchronized Object[] getAppContextKeys(){
+    public synchronized Object[] getAppContextKeys() {
         return apps.keySet().toArray();
     }
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityContextHandler.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityContextHandler.java?rev=1424393&r1=1424392&r2=1424393&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityContextHandler.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityContextHandler.java
 Thu Dec 20 10:28:57 2012
@@ -31,22 +31,24 @@ public class SecurityContextHandler impl
     private ConnectorCallbackHandler callbackHandler;
        private final String securityRealmName;
 
-       public SecurityContextHandler(String securityRealmName) {
+       public SecurityContextHandler(final String securityRealmName) {
                this.securityRealmName = securityRealmName;
        }
 
-       public void before(SecurityContext securityContext) throws 
WorkCompletedException {
+       @Override
+    public void before(final SecurityContext securityContext) throws 
WorkCompletedException {
         if (securityContext != null) {
             callbackHandler = new ConnectorCallbackHandler(securityRealmName);
             
-            Subject clientSubject = new Subject();
+            final Subject clientSubject = new Subject();
                        securityContext.setupSecurityContext(callbackHandler, 
clientSubject, null);
         }
     }
 
-    public void after(SecurityContext securityContext) throws 
WorkCompletedException {
-       SecurityService securityService = 
SystemInstance.get().getComponent(SecurityService.class);
-       Object loginObj = securityService.disassociate();
+    @Override
+    public void after(final SecurityContext securityContext) throws 
WorkCompletedException {
+       final SecurityService securityService = 
SystemInstance.get().getComponent(SecurityService.class);
+       final Object loginObj = securityService.disassociate();
        if (loginObj != null) {
                try {
                                securityService.logout(loginObj);
@@ -55,11 +57,13 @@ public class SecurityContextHandler impl
        }
     }
 
-       public boolean supports(Class<? extends WorkContext> clazz) {
+       @Override
+    public boolean supports(final Class<? extends WorkContext> clazz) {
                return SecurityContext.class.isAssignableFrom(clazz);
        }
 
-       public boolean required() {
+       @Override
+    public boolean required() {
                return false;
        }
 


Reply via email to