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