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 2010/06/10 22:20:02 UTC
svn commit: r953443 [1/2] - in
/openejb/branches/openejb-jcdi/assembly/openejb-tomcat:
openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/
openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/
Author: dblevins
Date: Thu Jun 10 20:20:01 2010
New Revision: 953443
URL: http://svn.apache.org/viewvc?rev=953443&view=rev
Log:
Javadoc and reformatting
Modified:
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/BackportUtil.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextListener.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/GlobalListenerSupport.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBContext.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBNamingContextListener.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBValve.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ProcessAnnotatedListenersListener.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiSupport.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatLoader.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatSecurityService.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatThreadContextListener.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatWebAppBuilder.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/LoaderServlet.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatEmbedder.java
openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatHook.java
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/BackportUtil.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/BackportUtil.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/BackportUtil.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/BackportUtil.java Thu Jun 10 20:20:01 2010
@@ -17,11 +17,11 @@
package org.apache.openejb.tomcat.catalina;
import org.apache.catalina.Wrapper;
-import org.apache.catalina.deploy.NamingResources;
import org.apache.catalina.core.NamingContextListener;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.core.StandardWrapper;
import org.apache.catalina.deploy.ContextService;
+import org.apache.catalina.deploy.NamingResources;
import org.apache.openejb.tomcat.common.TomcatVersion;
import javax.servlet.Servlet;
@@ -37,7 +37,7 @@ public class BackportUtil {
private static API api;
static {
- if (TomcatVersion.v6.isTheVersion()){
+ if (TomcatVersion.v6.isTheVersion()) {
api = new Tomcat6();
} else {
api = new Tomcat55();
@@ -66,8 +66,11 @@ public class BackportUtil {
public static interface API {
Servlet getServlet(Wrapper wrapper);
+
String findServiceName(NamingResources naming, String refName);
+
NamingContextListener getNamingContextListener(StandardContext standardContext);
+
void removeService(NamingContextListener namingContextListener, String serviceName);
}
@@ -83,7 +86,7 @@ public class BackportUtil {
public String findServiceName(NamingResources naming, String referenceName) {
ContextService service = naming.findService(referenceName);
- return (service != null)?service.getName():null;
+ return (service != null) ? service.getName() : null;
}
public void removeService(NamingContextListener namingContextListener, String serviceName) {
@@ -132,7 +135,7 @@ public class BackportUtil {
field.setAccessible(true);
return field;
} catch (Exception e2) {
- throw (IllegalStateException) new IllegalStateException("Unable to find or access the '"+name+"' field in "+clazz.getName()).initCause(e2);
+ throw (IllegalStateException) new IllegalStateException("Unable to find or access the '" + name + "' field in " + clazz.getName()).initCause(e2);
}
}
});
@@ -141,5 +144,4 @@ public class BackportUtil {
}
-
}
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextListener.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextListener.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextListener.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextListener.java Thu Jun 10 20:20:01 2010
@@ -18,20 +18,83 @@
package org.apache.openejb.tomcat.catalina;
import org.apache.catalina.core.StandardContext;
-import org.apache.catalina.core.StandardServer;
import org.apache.catalina.core.StandardHost;
+import org.apache.catalina.core.StandardServer;
+/**
+ * Listener interface for web context.
+ *
+ * @version $Rev$ $Date$
+ */
public interface ContextListener {
+
+ /**
+ * Web context is initialized.
+ *
+ * @param context web context
+ */
void init(StandardContext context);
+
+ /**
+ * Called before starting context.
+ *
+ * @param context web context
+ */
void beforeStart(StandardContext context);
+
+ /**
+ * Called when starting context.
+ *
+ * @param context web context
+ */
void start(StandardContext context);
+
+ /**
+ * Called after starting context.
+ *
+ * @param context web context
+ */
void afterStart(StandardContext context);
+
+ /**
+ * Called before stopping context.
+ *
+ * @param context web context
+ */
void beforeStop(StandardContext context);
+
+ /**
+ * Called when stopping context.
+ *
+ * @param context web context
+ */
void stop(StandardContext context);
+
+ /**
+ * Called after starting context.
+ *
+ * @param context web context
+ */
void afterStop(StandardContext context);
+
+ /**
+ * Called when destroying context.
+ *
+ * @param context web context
+ */
void destroy(StandardContext context);
+ /**
+ * Called after stopping server
+ *
+ * @param standardServer server instance
+ */
void afterStop(StandardServer standardServer);
+ /**
+ * Called on periodic events.
+ *
+ * @param standardHost host
+ */
void checkHost(StandardHost standardHost);
}
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/GlobalListenerSupport.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/GlobalListenerSupport.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/GlobalListenerSupport.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/GlobalListenerSupport.java Thu Jun 10 20:20:01 2010
@@ -18,10 +18,10 @@
package org.apache.openejb.tomcat.catalina;
import org.apache.catalina.Container;
+import org.apache.catalina.Lifecycle;
import org.apache.catalina.LifecycleEvent;
import org.apache.catalina.LifecycleListener;
import org.apache.catalina.Service;
-import org.apache.catalina.Lifecycle;
import org.apache.catalina.core.ContainerBase;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.core.StandardEngine;
@@ -35,10 +35,30 @@ import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
+/**
+ * Observers events from Tomcat to configure
+ * web applications etc.
+ *
+ * @version $Rev$ $Date$
+ */
public class GlobalListenerSupport implements PropertyChangeListener, LifecycleListener {
+
+ /**
+ * Tomcat server instance
+ */
private final StandardServer standardServer;
+
+ /**
+ * Listener for context, host, server operations
+ */
private final ContextListener contextListener;
+ /**
+ * Creates a new instance.
+ *
+ * @param standardServer tomcat server instance
+ * @param contextListener context listener instance
+ */
public GlobalListenerSupport(StandardServer standardServer, ContextListener contextListener) {
if (standardServer == null) throw new NullPointerException("standardServer is null");
if (contextListener == null) throw new NullPointerException("contextListener is null");
@@ -46,6 +66,9 @@ public class GlobalListenerSupport imple
this.contextListener = contextListener; // this.contextListener is now an instance of TomcatWebAppBuilder
}
+ /**
+ * {@inheritDoc}
+ */
public void lifecycleEvent(LifecycleEvent event) {
Object source = event.getSource();
if (source instanceof StandardContext) {
@@ -83,6 +106,9 @@ public class GlobalListenerSupport imple
}
}
+ /**
+ * Starts operation.
+ */
public void start() {
// hook the hosts so we get notified before contexts are started
standardServer.addPropertyChangeListener(this);
@@ -92,10 +118,19 @@ public class GlobalListenerSupport imple
}
}
+ /**
+ * Stops operation.
+ */
public void stop() {
standardServer.removePropertyChangeListener(this);
}
+
+ /**
+ * Service is added.
+ *
+ * @param service tomcat service
+ */
private void serviceAdded(Service service) {
Container container = service.getContainer();
if (container instanceof StandardEngine) {
@@ -104,6 +139,11 @@ public class GlobalListenerSupport imple
}
}
+ /**
+ * Service removed.
+ *
+ * @param service tomcat service
+ */
private void serviceRemoved(Service service) {
Container container = service.getContainer();
if (container instanceof StandardEngine) {
@@ -112,6 +152,11 @@ public class GlobalListenerSupport imple
}
}
+ /**
+ * Engine is added.
+ *
+ * @param engine tomcat engine
+ */
private void engineAdded(StandardEngine engine) {
addContextListener(engine);
for (Container child : engine.findChildren()) {
@@ -122,6 +167,11 @@ public class GlobalListenerSupport imple
}
}
+ /**
+ * Engine is removed.
+ *
+ * @param engine tomcat engine
+ */
private void engineRemoved(StandardEngine engine) {
for (Container child : engine.findChildren()) {
if (child instanceof StandardHost) {
@@ -131,6 +181,11 @@ public class GlobalListenerSupport imple
}
}
+ /**
+ * Host is added.
+ *
+ * @param host tomcat host.
+ */
private void hostAdded(StandardHost host) {
addContextListener(host);
host.addLifecycleListener(this);
@@ -142,6 +197,12 @@ public class GlobalListenerSupport imple
}
}
+
+ /**
+ * Host is removed.
+ *
+ * @param host tomcat host
+ */
private void hostRemoved(StandardHost host) {
for (Container child : host.findChildren()) {
if (child instanceof StandardContext) {
@@ -151,11 +212,21 @@ public class GlobalListenerSupport imple
}
}
+ /**
+ * New context is added.
+ *
+ * @param context tomcat context
+ */
private void contextAdded(StandardContext context) {
// put this class as the first listener so we can process the application before any classes are loaded
forceFirstLifecycleListener(context);
}
+ /**
+ * Update context lifecycle listeners.
+ *
+ * @param context tomcat context.
+ */
private void forceFirstLifecycleListener(StandardContext context) {
LifecycleListener[] listeners = context.findLifecycleListeners();
@@ -176,7 +247,7 @@ public class GlobalListenerSupport imple
OWBLifecycleListener owbListener = new OWBLifecycleListener();
context.addLifecycleListener(owbListener);
context.addContainerListener(owbListener);
-
+
// add back all listeners
for (LifecycleListener listener : listeners) {
if (listener != this) {
@@ -185,10 +256,18 @@ public class GlobalListenerSupport imple
}
}
+ /**
+ * Context is removed.
+ *
+ * @param context tomcat context
+ */
@SuppressWarnings({"UnusedDeclaration"})
private void contextRemoved(StandardContext context) {
}
+ /**
+ * {@inheritDoc}
+ */
public void propertyChange(PropertyChangeEvent event) {
if ("service".equals(event.getPropertyName())) {
Object oldValue = event.getOldValue();
@@ -223,11 +302,20 @@ public class GlobalListenerSupport imple
}
}
+ /**
+ * Setting monitoreable child field.
+ *
+ * @param containerBase host or engine
+ */
+ @SuppressWarnings("unchecked")
private void addContextListener(ContainerBase containerBase) {
+ boolean accessible = false;
+ Field field = null;
try {
- Field field = ContainerBase.class.getDeclaredField("children");
+ field = ContainerBase.class.getDeclaredField("children");
+ accessible = field.isAccessible();
field.setAccessible(true);
- Map children = (Map) field.get(containerBase);
+ Map<Object, Object> children = (Map<Object, Object>) field.get(containerBase);
if (children instanceof GlobalListenerSupport.MoniterableHashMap) {
return;
}
@@ -235,17 +323,24 @@ public class GlobalListenerSupport imple
field.set(containerBase, children);
} catch (Exception e) {
e.printStackTrace();
+ } finally {
+ if (field != null) {
+ if (!accessible) {
+ field.setAccessible(false);
+ }
+ }
}
}
- @SuppressWarnings({"unchecked"})
- public static class MoniterableHashMap extends HashMap {
+ //Hashmap for monitoring children of engine and host
+ public static class MoniterableHashMap extends HashMap<Object, Object> {
+ private static final long serialVersionUID = 1L;
private final Object source;
private final String propertyName;
private final PropertyChangeListener listener;
- public MoniterableHashMap(Map m, Object source, String propertyName, PropertyChangeListener listener) {
+ public MoniterableHashMap(Map<Object, Object> m, Object source, String propertyName, PropertyChangeListener listener) {
super(m);
this.source = source;
this.propertyName = propertyName;
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBContext.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBContext.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBContext.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBContext.java Thu Jun 10 20:20:01 2010
@@ -18,8 +18,6 @@
package org.apache.openejb.tomcat.catalina;
import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.util.Logger;
-import org.apache.openejb.util.LogCategory;
import javax.naming.Binding;
import javax.naming.Context;
@@ -30,124 +28,230 @@ import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import java.util.Hashtable;
+/**
+ * {@link Context} implementation for using it
+ * via Tomcat integration.
+ *
+ * @version $Rev$ $Date$
+ */
public class OpenEJBContext implements Context {
+ /**
+ * Default constructor.
+ */
+ public OpenEJBContext() {
+ super();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public Object lookup(Name name) throws NamingException {
return getThreadContext().lookup(name);
}
+ /**
+ * {@inheritDoc}
+ */
public Object lookup(String name) throws NamingException {
return getThreadContext().lookup(name);
}
+ /**
+ * {@inheritDoc}
+ */
public void bind(Name name, Object obj) throws NamingException {
getThreadContext().bind(name, obj);
}
+ /**
+ * {@inheritDoc}
+ */
public void bind(String name, Object obj) throws NamingException {
getThreadContext().bind(name, obj);
}
+ /**
+ * {@inheritDoc}
+ */
public void rebind(Name name, Object obj) throws NamingException {
getThreadContext().rebind(name, obj);
}
+ /**
+ * {@inheritDoc}
+ */
public void rebind(String name, Object obj) throws NamingException {
getThreadContext().rebind(name, obj);
}
+ /**
+ * {@inheritDoc}
+ */
public void unbind(Name name) throws NamingException {
getThreadContext().unbind(name);
}
+ /**
+ * {@inheritDoc}
+ */
public void unbind(String name) throws NamingException {
getThreadContext().unbind(name);
}
+ /**
+ * {@inheritDoc}
+ */
public void rename(Name oldName, Name newName) throws NamingException {
getThreadContext().rename(oldName, newName);
}
+ /**
+ * {@inheritDoc}
+ */
public void rename(String oldName, String newName) throws NamingException {
getThreadContext().rename(oldName, newName);
}
+ /**
+ * {@inheritDoc}
+ */
public NamingEnumeration<NameClassPair> list(Name name) throws NamingException {
return getThreadContext().list(name);
}
+ /**
+ * {@inheritDoc}
+ */
public NamingEnumeration<NameClassPair> list(String name) throws NamingException {
return getThreadContext().list(name);
}
+ /**
+ * {@inheritDoc}
+ */
public NamingEnumeration<Binding> listBindings(Name name) throws NamingException {
return getThreadContext().listBindings(name);
}
+ /**
+ * {@inheritDoc}
+ */
public NamingEnumeration<Binding> listBindings(String name) throws NamingException {
return getThreadContext().listBindings(name);
}
+ /**
+ * {@inheritDoc}
+ */
public void destroySubcontext(Name name) throws NamingException {
getThreadContext().destroySubcontext(name);
}
+ /**
+ * {@inheritDoc}
+ */
public void destroySubcontext(String name) throws NamingException {
getThreadContext().destroySubcontext(name);
}
+ /**
+ * {@inheritDoc}
+ */
public Context createSubcontext(Name name) throws NamingException {
return getThreadContext().createSubcontext(name);
}
+ /**
+ * {@inheritDoc}
+ */
public Context createSubcontext(String name) throws NamingException {
return getThreadContext().createSubcontext(name);
}
+ /**
+ * {@inheritDoc}
+ */
public Object lookupLink(Name name) throws NamingException {
return getThreadContext().lookupLink(name);
}
+ /**
+ * {@inheritDoc}
+ */
public Object lookupLink(String name) throws NamingException {
return getThreadContext().lookupLink(name);
}
+ /**
+ * {@inheritDoc}
+ */
public NameParser getNameParser(Name name) throws NamingException {
return getThreadContext().getNameParser(name);
}
+ /**
+ * {@inheritDoc}
+ */
public NameParser getNameParser(String name) throws NamingException {
return getThreadContext().getNameParser(name);
}
+ /**
+ * {@inheritDoc}
+ */
public Name composeName(Name name, Name prefix) throws NamingException {
return getThreadContext().composeName(name, prefix);
}
+ /**
+ * {@inheritDoc}
+ */
public String composeName(String name, String prefix) throws NamingException {
return getThreadContext().composeName(name, prefix);
}
+ /**
+ * {@inheritDoc}
+ */
public Object addToEnvironment(String propName, Object propVal) throws NamingException {
return getThreadContext().addToEnvironment(propName, propVal);
}
+ /**
+ * {@inheritDoc}
+ */
public Object removeFromEnvironment(String propName) throws NamingException {
return getThreadContext().removeFromEnvironment(propName);
}
+ /**
+ * {@inheritDoc}
+ */
public Hashtable<?, ?> getEnvironment() throws NamingException {
return getThreadContext().getEnvironment();
}
+ /**
+ * {@inheritDoc}
+ */
public void close() throws NamingException {
getThreadContext().close();
}
+ /**
+ * {@inheritDoc}
+ */
public String getNameInNamespace() throws NamingException {
return "";
}
+ /**
+ * Gets current context deployment context.
+ *
+ * @return context of deployment
+ * @throws NamingException for exception
+ */
private Context getThreadContext() throws NamingException {
ThreadContext threadContext = ThreadContext.getThreadContext();
Context context = threadContext.getDeploymentInfo().getJndiEnc();
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBNamingContextListener.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBNamingContextListener.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBNamingContextListener.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBNamingContextListener.java Thu Jun 10 20:20:01 2010
@@ -276,7 +276,7 @@ public class OpenEJBNamingContextListene
PassthroughFactory.add(resourceInfo, value);
Assembler assembler = (Assembler) SystemInstance.get().getComponent(org.apache.openejb.spi.Assembler.class);
- logger.info("Importing a Tomcat Resource with id '" + resourceInfo.id + "' of type '" + type + "'.");
+ logger.info("Importing a Tomcat Resource with id '" + resourceInfo.id + "' of type '" + type + "'.");
try {
assembler.createResource(resourceInfo);
} catch (OpenEJBException e) {
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBValve.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBValve.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBValve.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBValve.java Thu Jun 10 20:20:01 2010
@@ -51,7 +51,7 @@ public class OpenEJBValve extends ValveB
}
private TomcatSecurityService getSecurityService() {
- SecurityService securityService = SystemInstance.get().getComponent(SecurityService.class);
+ SecurityService securityService = SystemInstance.get().getComponent(SecurityService.class);
if (securityService instanceof TomcatSecurityService) {
return (TomcatSecurityService) securityService;
}
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ProcessAnnotatedListenersListener.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ProcessAnnotatedListenersListener.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ProcessAnnotatedListenersListener.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ProcessAnnotatedListenersListener.java Thu Jun 10 20:20:01 2010
@@ -16,23 +16,23 @@
*/
package org.apache.openejb.tomcat.catalina;
-import org.apache.catalina.ContainerListener;
import org.apache.catalina.ContainerEvent;
+import org.apache.catalina.ContainerListener;
import org.apache.catalina.core.StandardContext;
import org.apache.openejb.tomcat.common.LegacyAnnotationProcessor;
import java.util.ArrayList;
-import java.util.List;
import java.util.Arrays;
-import java.util.Set;
import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
/**
* The StandardContext only calls these events for the listeners in the
* getApplicationLifecycleListeners() list and not for any listeners in the
* getApplicationEventListeners() list. This is a big pain as we need to
* do annotation processing for both. The code gets a bit tricky as a result.
- *
+ * <p/>
* Note this class only pertains to Tomcat 5.5.x and before, not 6.0.x and after.
*
* @version $Rev$ $Date$
@@ -56,6 +56,7 @@ public class ProcessAnnotatedListenersLi
/**
* We must process all the listeners on the very first "beforeContextInitialized" event of this Container
+ *
* @param event
*/
private void listenerStart(ContainerEvent event) {
@@ -80,10 +81,11 @@ public class ProcessAnnotatedListenersLi
/**
* We must process all the listeners on the very last "afterContextDestroyed" event of this Container
- *
+ * <p/>
* Looking at the code it's possible that if a ContainerListener threw an exception in the
* afterContextDestroyed event that the afterContextDestroyed will get fired again in the catch block,
* so we need to watch for that. We use a set to ensure we can track uniqe events.
+ *
* @param event
*/
private void listenerStop(ContainerEvent event) {
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java Thu Jun 10 20:20:01 2010
@@ -29,7 +29,6 @@ import org.apache.naming.ContextAccessCo
import org.apache.naming.factory.Constants;
import org.apache.openejb.Injection;
import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.assembler.classic.EjbLocalReferenceInfo;
import org.apache.openejb.assembler.classic.EjbReferenceInfo;
import org.apache.openejb.assembler.classic.EnvEntryInfo;
@@ -46,6 +45,9 @@ import org.apache.openejb.core.webservic
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.persistence.JtaEntityManager;
import org.apache.openejb.persistence.JtaEntityManagerRegistry;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.openejb.tomcat.common.EjbFactory;
+import org.apache.openejb.tomcat.common.NamingUtil;
import static org.apache.openejb.tomcat.common.NamingUtil.DEPLOYMENT_ID;
import static org.apache.openejb.tomcat.common.NamingUtil.EXTENDED;
import static org.apache.openejb.tomcat.common.NamingUtil.EXTERNAL;
@@ -61,19 +63,17 @@ import static org.apache.openejb.tomcat.
import static org.apache.openejb.tomcat.common.NamingUtil.WS_PORT_QNAME;
import static org.apache.openejb.tomcat.common.NamingUtil.WS_QNAME;
import static org.apache.openejb.tomcat.common.NamingUtil.setStaticValue;
-import org.apache.openejb.tomcat.common.EjbFactory;
-import org.apache.openejb.tomcat.common.WsFactory;
-import org.apache.openejb.tomcat.common.ResourceFactory;
-import org.apache.openejb.tomcat.common.PersistenceUnitFactory;
import org.apache.openejb.tomcat.common.PersistenceContextFactory;
+import org.apache.openejb.tomcat.common.PersistenceUnitFactory;
+import org.apache.openejb.tomcat.common.ResourceFactory;
import org.apache.openejb.tomcat.common.UserTransactionFactory;
-import org.apache.openejb.tomcat.common.NamingUtil;
+import org.apache.openejb.tomcat.common.WsFactory;
+import javax.naming.Context;
+import javax.naming.NamingException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.transaction.UserTransaction;
-import javax.naming.Context;
-import javax.naming.NamingException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -536,7 +536,7 @@ public class TomcatJndiBuilder {
}
}
- if (wsdlUrl == null ) {
+ if (wsdlUrl == null) {
throw new IllegalArgumentException("WSDL file " + ref.wsdlFile + " for web service-ref " + ref.referenceName + " not found");
}
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiSupport.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiSupport.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiSupport.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiSupport.java Thu Jun 10 20:20:01 2010
@@ -16,11 +16,11 @@
*/
package org.apache.openejb.tomcat.catalina;
+import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.RpcContainer;
-import org.apache.openejb.DeploymentInfo;
-import org.apache.openejb.core.RpcContainerWrapper;
import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.core.RpcContainerWrapper;
import javax.naming.Context;
import java.lang.reflect.InvocationTargetException;
@@ -63,7 +63,7 @@ public class TomcatJndiSupport extends R
setupDeployment((org.apache.openejb.core.CoreDeploymentInfo) info);
}
- public static Map<Object,Context> contexts = new HashMap<Object,Context>();
+ public static Map<Object, Context> contexts = new HashMap<Object, Context>();
private void setupDeployment(org.apache.openejb.core.CoreDeploymentInfo deployment) {
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatLoader.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatLoader.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatLoader.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatLoader.java Thu Jun 10 20:20:01 2010
@@ -28,11 +28,6 @@ import org.apache.catalina.Service;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.core.StandardServer;
import org.apache.openejb.OpenEJB;
-import org.apache.openejb.util.Logger;
-import org.apache.openejb.util.LogCategory;
-import org.apache.openejb.util.OptionsLog;
-import org.apache.openejb.tomcat.installer.Installer;
-import org.apache.openejb.tomcat.installer.Paths;
import org.apache.openejb.assembler.classic.WebAppBuilder;
import org.apache.openejb.core.ServerFederation;
import org.apache.openejb.core.ThreadContext;
@@ -43,6 +38,11 @@ import org.apache.openejb.server.Service
import org.apache.openejb.server.ServiceManager;
import org.apache.openejb.server.ejbd.EjbServer;
import org.apache.openejb.server.webservices.WsRegistry;
+import org.apache.openejb.tomcat.installer.Installer;
+import org.apache.openejb.tomcat.installer.Paths;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.OptionsLog;
import java.io.BufferedInputStream;
import java.io.File;
@@ -62,9 +62,9 @@ import java.util.Properties;
* <li/>tomcat.version if not set
* <li/>tomcat.built if not set
* </ul>
- *
+ * <p/>
* <h1>Integration Actions</h1>
- *
+ * <p/>
* <ul>
* <li/>Setup ServiceJar: set openejb.provider.default -> org.apache.openejb.tomcat
* We therefore will load this file: META-INF/org.apache.openejb.tomcat/service-jar.xml
@@ -72,33 +72,54 @@ import java.util.Properties;
* <li/>
* <li/>
* </ul>
- *
+ * <p/>
* See {@link org.apache.openejb.config.ServiceUtils#defaultProviderURL}
*
- *
- *
* @version $Revision: 617255 $ $Date: 2008-01-31 13:58:36 -0800 (Thu, 31 Jan 2008) $
*/
public class TomcatLoader implements Loader {
+
+ /**
+ * OpenEJB Server Daemon
+ */
private EjbServer ejbServer;
+
+ /**
+ * OpenEJB Service Manager that manage services
+ */
private ServiceManager manager;
+
+ /**
+ * Platform OpenEJB works
+ */
private final String platform;
+ /**
+ * Creates a new instance.
+ */
public TomcatLoader() {
platform = "tomcat";
}
+ /**
+ * Â {@inheritDoc}
+ */
public void init(Properties properties) throws Exception {
+
// Enable System EJBs like the MEJB and DeployerEJB
properties.setProperty("openejb.deployments.classpath", "true");
properties.setProperty("openejb.deployments.classpath.filter.systemapps", "false");
+
+ //Sets default service provider
System.setProperty("openejb.provider.default", "org.apache.openejb." + platform);
// Loader maybe the first thing executed in a new classloader
// so we must attempt to initialize the system instance.
SystemInstance.init(properties);
+
+ //Install Log
OptionsLog.install();
-
+
// install conf/openejb.xml and conf/logging.properties files
String openejbWarDir = properties.getProperty("openejb.war");
if (openejbWarDir != null) {
@@ -116,13 +137,16 @@ public class TomcatLoader implements Loa
return;
}
+ FileInputStream fin = null;
// Read in and apply the conf/system.properties
try {
File conf = SystemInstance.get().getBase().getDirectory("conf");
+
+ //Look for custom system properties
File file = new File(conf, "system.properties");
- if (file.exists()){
+ if (file.exists()) {
Properties systemProperties = new Properties();
- FileInputStream fin = new FileInputStream(file);
+ fin = new FileInputStream(file);
InputStream in = new BufferedInputStream(fin);
systemProperties.load(in);
System.getProperties().putAll(systemProperties);
@@ -131,9 +155,14 @@ public class TomcatLoader implements Loa
SystemInstance.get().getProperties().putAll(systemProperties);
}
} catch (IOException e) {
- System.out.println("Processing conf/system.properties failed: "+e.getMessage());
+ System.out.println("Processing conf/system.properties failed: " + e.getMessage());
+ } finally {
+ if (fin != null) {
+ fin.close();
+ }
}
+ //Those are set by TomcatHook, why re-set here???
System.setProperty("openejb.home", SystemInstance.get().getHome().getDirectory().getAbsolutePath());
System.setProperty("openejb.base", SystemInstance.get().getBase().getDirectory().getAbsolutePath());
@@ -159,7 +188,7 @@ public class TomcatLoader implements Loa
ejbServer = new EjbServer();
SystemInstance.get().setComponent(EjbServer.class, ejbServer);
OpenEJB.init(properties, new ServerFederation());
-
+
Properties ejbServerProps = new Properties();
ejbServerProps.putAll(properties);
ejbServerProps.setProperty("openejb.ejbd.uri", "http://127.0.0.1:8080/openejb/ejb");
@@ -203,7 +232,11 @@ public class TomcatLoader implements Loa
});
}
+ /**
+ * Destroy system.
+ */
public void destroy() {
+ //Stop ServiceManager
if (manager != null) {
try {
manager.stop();
@@ -211,6 +244,8 @@ public class TomcatLoader implements Loa
}
manager = null;
}
+
+ //Stop Ejb server
if (ejbServer != null) {
try {
ejbServer.stop();
@@ -218,9 +253,17 @@ public class TomcatLoader implements Loa
}
ejbServer = null;
}
+
+ //Destroy OpenEJB system
OpenEJB.destroy();
}
+ /**
+ * Process running web applications for ejb deployments.
+ *
+ * @param tomcatWebAppBuilder tomcat web app builder instance
+ * @param standardServer tomcat server instance
+ */
private void processRunningApplications(TomcatWebAppBuilder tomcatWebAppBuilder, StandardServer standardServer) {
for (Service service : standardServer.findServices()) {
if (service.getContainer() instanceof Engine) {
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatSecurityService.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatSecurityService.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatSecurityService.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatSecurityService.java Thu Jun 10 20:20:01 2010
@@ -17,13 +17,13 @@
*/
package org.apache.openejb.tomcat.catalina;
-import org.apache.catalina.Realm;
-import org.apache.catalina.Service;
import org.apache.catalina.Engine;
-import org.apache.catalina.ServerFactory;
+import org.apache.catalina.Realm;
import org.apache.catalina.Server;
-import org.apache.openejb.core.security.AbstractSecurityService;
+import org.apache.catalina.ServerFactory;
+import org.apache.catalina.Service;
import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.core.security.AbstractSecurityService;
import org.apache.openejb.spi.CallerPrincipal;
import javax.security.auth.Subject;
@@ -31,11 +31,11 @@ import javax.security.auth.login.LoginEx
import java.security.Principal;
import java.util.HashSet;
import java.util.LinkedHashSet;
-import java.util.Set;
import java.util.LinkedList;
+import java.util.Set;
import java.util.UUID;
-public class TomcatSecurityService extends AbstractSecurityService {
+public class TomcatSecurityService extends AbstractSecurityService {
static protected final ThreadLocal<LinkedList<Subject>> runAsStack = new ThreadLocal<LinkedList<Subject>>() {
protected LinkedList<Subject> initialValue() {
return new LinkedList<Subject>();
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatThreadContextListener.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatThreadContextListener.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatThreadContextListener.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatThreadContextListener.java Thu Jun 10 20:20:01 2010
@@ -20,28 +20,57 @@ package org.apache.openejb.tomcat.catali
import org.apache.naming.ContextBindings;
import org.apache.openejb.core.ThreadContext;
import org.apache.openejb.core.ThreadContextListener;
-import org.apache.openejb.util.Logger;
import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
import javax.naming.NamingException;
import java.lang.reflect.Method;
+/**
+ * Tomcat thread context listener.
+ *
+ * @version $Rev$ $Date$
+ */
public class TomcatThreadContextListener implements ThreadContextListener {
+
+ /**
+ * Logger instance for tomcat
+ */
private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB.createChild("tomcat"), "org.apache.openejb.util.resources");
+
+ /**
+ * OpenEJB context name
+ */
private static final String OPENEJB_CONTEXT = "OpenEJBContext";
+
+ /**
+ * getThreadName method in class ContextBindings
+ */
protected Method method;
+ /**
+ * Creates a new instance.
+ */
public TomcatThreadContextListener() {
ContextBindings.bindContext(OPENEJB_CONTEXT, new OpenEJBContext());
+ boolean accessible = false;
try {
// someone decided to make the getThreadName package protected so we have to use reflection
method = ContextBindings.class.getDeclaredMethod("getThreadName");
+ accessible = method.isAccessible();
method.setAccessible(true);
} catch (NoSuchMethodException e) {
logger.error("Expected ContextBinding to have the method getThreadName()");
+ } finally {
+ if (!accessible) {
+ method.setAccessible(accessible);
+ }
}
}
+ /**
+ * {@inheritDoc}
+ */
public void contextEntered(ThreadContext oldContext, ThreadContext newContext) {
// save off the old context if possible
try {
@@ -59,7 +88,9 @@ public class TomcatThreadContextListener
}
}
-
+ /**
+ * {@inheritDoc}
+ */
public void contextExited(ThreadContext exitedContext, ThreadContext reenteredContext) {
// unbind the new context
ContextBindings.unbindThread(OPENEJB_CONTEXT);
@@ -70,25 +101,33 @@ public class TomcatThreadContextListener
try {
ContextBindings.bindThread(data.oldContextName);
} catch (NamingException e) {
+ logger.error("Exception in method contextExited", e);
}
}
}
+ /**
+ * Gets thread name.
+ *
+ * @return thread name
+ * @throws NamingException for exception
+ */
private Object getThreadName() throws NamingException {
- // someone decided to make the getThreadName package protected so we have to use reflection
try {
Object threadName = method.invoke(null);
return threadName;
} catch (Exception e) {
+ logger.error("Exception in method getThreadName", e);
return null;
}
}
+ //Internal stuff to hold old context name
private static class Data {
private Object oldContextName;
- public Data(Object oldContext) {
- this.oldContextName = oldContext;
+ public Data(Object oldContextName) {
+ this.oldContextName = oldContextName;
}
}
}
Modified: openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatWebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatWebAppBuilder.java?rev=953443&r1=953442&r2=953443&view=diff
==============================================================================
--- openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatWebAppBuilder.java (original)
+++ openejb/branches/openejb-jcdi/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatWebAppBuilder.java Thu Jun 10 20:20:01 2010
@@ -17,12 +17,6 @@
*/
package org.apache.openejb.tomcat.catalina;
-import static org.apache.openejb.tomcat.catalina.BackportUtil.getServlet;
-import static org.apache.openejb.tomcat.catalina.BackportUtil.*;
-
-import org.apache.openejb.tomcat.catalina.owb.OWBLifecycleListener;
-import org.apache.openejb.tomcat.common.LegacyAnnotationProcessor;
-import org.apache.openejb.tomcat.common.TomcatVersion;
import org.apache.catalina.Container;
import org.apache.catalina.Engine;
import org.apache.catalina.LifecycleListener;
@@ -30,10 +24,10 @@ import org.apache.catalina.Loader;
import org.apache.catalina.ServerFactory;
import org.apache.catalina.Service;
import org.apache.catalina.Wrapper;
+import org.apache.catalina.core.ContainerBase;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.core.StandardServer;
-import org.apache.catalina.core.ContainerBase;
import org.apache.catalina.deploy.ContextEnvironment;
import org.apache.catalina.deploy.ContextResource;
import org.apache.catalina.deploy.ContextResourceLink;
@@ -42,41 +36,46 @@ import org.apache.catalina.startup.Conte
import org.apache.catalina.startup.HostConfig;
import org.apache.naming.ContextAccessController;
import org.apache.naming.ContextBindings;
-import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.Injection;
import org.apache.openejb.ClassLoaderUtil;
-import org.apache.openejb.spi.ContainerSystem;
-import org.apache.openejb.server.webservices.WsServlet;
-import org.apache.openejb.server.webservices.WsService;
+import org.apache.openejb.Injection;
+import org.apache.openejb.OpenEJBException;
import org.apache.openejb.assembler.classic.AppInfo;
import org.apache.openejb.assembler.classic.Assembler;
-import org.apache.openejb.util.LinkResolver;
+import org.apache.openejb.assembler.classic.ConnectorInfo;
+import org.apache.openejb.assembler.classic.EjbJarInfo;
import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
+import org.apache.openejb.assembler.classic.InjectionBuilder;
import org.apache.openejb.assembler.classic.WebAppBuilder;
import org.apache.openejb.assembler.classic.WebAppInfo;
-import org.apache.openejb.assembler.classic.EjbJarInfo;
-import org.apache.openejb.assembler.classic.ConnectorInfo;
-import org.apache.openejb.assembler.classic.InjectionBuilder;
import org.apache.openejb.config.AnnotationDeployer;
import org.apache.openejb.config.AppModule;
+import org.apache.openejb.config.ClientModule;
import org.apache.openejb.config.ConfigurationFactory;
import org.apache.openejb.config.DeploymentLoader;
import org.apache.openejb.config.EjbModule;
import org.apache.openejb.config.ReadDescriptors;
import org.apache.openejb.config.UnknownModuleTypeException;
import org.apache.openejb.config.WebModule;
-import org.apache.openejb.config.ClientModule;
+import org.apache.openejb.core.CoreContainerSystem;
+import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.core.CoreWebDeploymentInfo;
import org.apache.openejb.core.interceptor.InterceptorData;
import org.apache.openejb.core.ivm.naming.SystemComponentReference;
import org.apache.openejb.core.webservices.JaxWsUtils;
-import org.apache.openejb.core.CoreDeploymentInfo;
-import org.apache.openejb.core.CoreWebDeploymentInfo;
-import org.apache.openejb.core.CoreContainerSystem;
import org.apache.openejb.jee.EnvEntry;
import org.apache.openejb.jee.FacesConfig;
import org.apache.openejb.jee.ParamValue;
import org.apache.openejb.jee.WebApp;
import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.webservices.WsService;
+import org.apache.openejb.server.webservices.WsServlet;
+import org.apache.openejb.spi.ContainerSystem;
+import static org.apache.openejb.tomcat.catalina.BackportUtil.getNamingContextListener;
+import static org.apache.openejb.tomcat.catalina.BackportUtil.getServlet;
+import org.apache.openejb.tomcat.catalina.owb.OWBLifecycleListener;
+import org.apache.openejb.tomcat.common.LegacyAnnotationProcessor;
+import org.apache.openejb.tomcat.common.TomcatVersion;
+import org.apache.openejb.util.LinkResolver;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.URLs;
@@ -97,32 +96,82 @@ import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
-import java.util.HashMap;
-import java.util.Iterator;
+/**
+ * Web application builder.
+ *
+ * @version $Rev$ $Date$
+ */
public class TomcatWebAppBuilder implements WebAppBuilder, ContextListener {
+
+ /**
+ * Flag for ignore context
+ */
public static final String IGNORE_CONTEXT = TomcatWebAppBuilder.class.getName() + ".IGNORE";
+
+ /**
+ * Logger instance
+ */
private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB.createChild("tomcat"), "org.apache.openejb.util.resources");
+ /**
+ * Context information for web applications
+ */
private final TreeMap<String, ContextInfo> infos = new TreeMap<String, ContextInfo>();
+
+ /**
+ * Global listener for Tomcat fired events.
+ */
private final GlobalListenerSupport globalListenerSupport;
+
+ /**
+ * OpenEJB configuration factory instance
+ */
private final ConfigurationFactory configurationFactory;
- private final Map<String,HostConfig> deployers = new TreeMap<String,HostConfig>();
+
+ /**
+ * Tomcat host config elements
+ */
+ //Key is the host name
+ private final Map<String, HostConfig> deployers = new TreeMap<String, HostConfig>();
+
+ /**
+ * Deployed web applications
+ */
// todo merge this map witth the infos map above
- private final Map<String,DeployedApplication> deployedApps = new TreeMap<String,DeployedApplication>();
+ private final Map<String, DeployedApplication> deployedApps = new TreeMap<String, DeployedApplication>();
+
+ /**
+ * OpenEJB deployment loader instance
+ */
private final DeploymentLoader deploymentLoader;
+
+ /**
+ * OpenEJB assembler instance
+ */
private Assembler assembler;
+
+ /**
+ * OpenEJB container system
+ */
private CoreContainerSystem containerSystem;
+ /**
+ * Creates a new web application builder
+ * instance.
+ */
public TomcatWebAppBuilder() {
StandardServer standardServer = (StandardServer) ServerFactory.getServer();
globalListenerSupport = new GlobalListenerSupport(standardServer, this);
+ //Getting host config listeners
for (Service service : standardServer.findServices()) {
if (service.getContainer() instanceof Engine) {
Engine engine = (Engine) service.getContainer();
@@ -140,25 +189,23 @@ public class TomcatWebAppBuilder impleme
}
}
- // MBeanServer mbeanServer;
- // List mbeanServers = MBeanServerFactory.findMBeanServer(null);
- // if (mbeanServers.size() > 0) {
- // mbeanServer = (MBeanServer) mbeanServers.get(0);
- // } else {
- // mbeanServer = MBeanServerFactory.createMBeanServer();
- // }
-
configurationFactory = new ConfigurationFactory();
deploymentLoader = new DeploymentLoader();
assembler = (Assembler) SystemInstance.get().getComponent(org.apache.openejb.spi.Assembler.class);
containerSystem = (CoreContainerSystem) SystemInstance.get().getComponent(ContainerSystem.class);
}
+ /**
+ * Start operation.
+ */
public void start() {
globalListenerSupport.start();
}
+ /**
+ * Stop operation.
+ */
public void stop() {
globalListenerSupport.stop();
}
@@ -167,6 +214,9 @@ public class TomcatWebAppBuilder impleme
// OpenEJB WebAppBuilder
//
+ /**
+ * {@inheritDoc}
+ */
public void deployWebApps(AppInfo appInfo, ClassLoader classLoader) throws Exception {
for (WebAppInfo webApp : appInfo.webApps) {
if (getContextInfo(webApp) == null) {
@@ -199,6 +249,9 @@ public class TomcatWebAppBuilder impleme
}
}
+ /**
+ * {@inheritDoc}
+ */
public void undeployWebApps(AppInfo appInfo) throws Exception {
for (WebAppInfo webApp : appInfo.webApps) {
ContextInfo contextInfo = getContextInfo(webApp);
@@ -212,6 +265,12 @@ public class TomcatWebAppBuilder impleme
}
}
+
+ /**
+ * Deletes given directory.
+ *
+ * @param dir directory
+ */
private void deleteDir(File dir) {
if (dir == null) return;
if (dir.isFile()) return;
@@ -225,60 +284,62 @@ public class TomcatWebAppBuilder impleme
dir.delete();
}
- //
- // Tomcat Listener
- //
-
+ /**
+ * {@inheritDoc}
+ */
public void init(StandardContext standardContext) {
}
+ /**
+ * {@inheritDoc}
+ */
public void beforeStart(StandardContext standardContext) {
}
+ /**
+ * {@inheritDoc}
+ */
// context class loader is now defined, but no classes should have been loaded
+ @SuppressWarnings("unchecked")
public void start(StandardContext standardContext) {
if (standardContext.getServletContext().getAttribute(IGNORE_CONTEXT) != null) return;
-
- boolean isOwb = standardContext.getServletContext().getAttribute(OWBLifecycleListener.IGNORE_OWB_LIBRARY) != null ? true : false;
-
- if (isOwb)
- {
+
+ boolean isOwb = standardContext.getServletContext().getAttribute(OWBLifecycleListener.IGNORE_OWB_LIBRARY) != null ? true : false;
+
+ if (isOwb) {
//Adding OpenwebBeans Implementation JAR
- Loader loader = standardContext.getLoader();
+ Loader loader = standardContext.getLoader();
List<File> files = findOpenWebBeansJar("openwebbeans");
- for(File file : files)
- {
- loader.addRepository(file.toURI().toString());
+ for (File file : files) {
+ loader.addRepository(file.toURI().toString());
}
-
+
ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
- try
- {
+ try {
Thread.currentThread().setContextClassLoader(standardContext.getLoader().getClassLoader());
-
+
Class<?> owbConfig = standardContext.getLoader().getClassLoader().loadClass("org.apache.webbeans.config.OpenWebBeansConfiguration");
- Method setProperty = owbConfig.getMethod("setProperty", new Class[]{String.class,Object.class});
+ Method setProperty = owbConfig.getMethod("setProperty", new Class[]{String.class, Object.class});
Method getInstance = owbConfig.getMethod("getInstance", new Class[]{});
Object ocjConfig = getInstance.invoke(null, new Object[]{});
- setProperty.invoke(ocjConfig, new Object[]{"org.apache.webbeans.spi.deployer.useEjbMetaDataDiscoveryService","true"});
- setProperty.invoke(ocjConfig, new Object[]{"org.apache.webbeans.spi.ResourceInjectionService","org.apache.webbeans.ejb.resource.OpenEjbResourceInjectionService"});
+ setProperty.invoke(ocjConfig, new Object[]{"org.apache.webbeans.spi.deployer.useEjbMetaDataDiscoveryService", "true"});
+ setProperty.invoke(ocjConfig, new Object[]{"org.apache.webbeans.spi.ResourceInjectionService", "org.apache.webbeans.ejb.resource.OpenEjbResourceInjectionService"});
}
- catch (Exception e)
- {
+ catch (Exception e) {
e.printStackTrace();
}
- finally
- {
+ finally {
Thread.currentThread().setContextClassLoader(oldCl);
}
}
-
+
Assembler assembler = getAssembler();
if (assembler == null) {
logger.warning("OpenEJB has not been initialized so war will not be scanned for nested modules " + standardContext.getPath());
return;
}
+ //Look for context info, maybe context is already scanned
ContextInfo contextInfo = getContextInfo(standardContext);
if (contextInfo == null) {
AppModule appModule = loadApplication(standardContext);
@@ -289,65 +350,57 @@ public class TomcatWebAppBuilder impleme
contextInfo.appInfo = appInfo;
assembler.createApplication(contextInfo.appInfo, standardContext.getLoader().getClassLoader());
-
- if(isOwb)
- {
+
+ if (isOwb) {
ContainerSystem containerSystem = SystemInstance.get().getComponent(ContainerSystem.class);
List<EjbJarInfo> ejbJarInfos = appInfo.ejbJars;
- for(EjbJarInfo jarInfo : ejbJarInfos)
- {
+ for (EjbJarInfo jarInfo : ejbJarInfos) {
List<EnterpriseBeanInfo> ebInfos = jarInfo.enterpriseBeans;
- for(EnterpriseBeanInfo ebInfo : ebInfos)
- {
- CoreDeploymentInfo info = (CoreDeploymentInfo)containerSystem.getDeploymentInfo(ebInfo.ejbDeploymentId);
-
+ for (EnterpriseBeanInfo ebInfo : ebInfos) {
+ CoreDeploymentInfo info = (CoreDeploymentInfo) containerSystem.getDeploymentInfo(ebInfo.ejbDeploymentId);
+
Class<?> interceptorClazz = standardContext.getLoader().getClassLoader().loadClass("org.apache.webbeans.ejb.common.interceptor.OpenWebBeansEjbInterceptor");
InterceptorData interceptorData = new InterceptorData(interceptorClazz);
interceptorData.getAroundInvoke().add(interceptorClazz.getMethod("callToOwbInterceptors", new Class[]{InvocationContext.class}));
interceptorData.getPostConstruct().add(interceptorClazz.getMethod("afterConstruct", new Class[]{InvocationContext.class}));
interceptorData.getPreDestroy().add(interceptorClazz.getMethod("preDestroy", new Class[]{InvocationContext.class}));
-
+
info.getCallbackInterceptors().add(interceptorData);
-
+
List<InterceptorData> datas = new ArrayList<InterceptorData>();
- for(InterceptorData data : info.getCallbackInterceptors())
- {
+ for (InterceptorData data : info.getCallbackInterceptors()) {
datas.add(data);
}
-
+
info.setCallbackInterceptors(datas);
-
+
//Adding AroundInvokes
InterceptorData interceptorData2 = new InterceptorData(interceptorClazz);
interceptorData2.getAroundInvoke().add(interceptorClazz.getMethod("callToOwbInterceptors", new Class[]{InvocationContext.class}));
-
+
List<Class> interfaces = info.getBusinessLocalInterfaces();
- for(Class cls : interfaces)
- {
+ for (Class cls : interfaces) {
Method[] methods = cls.getMethods();
- for(Method method : methods)
- {
+ for (Method method : methods) {
Method beanMethod = info.getBeanClass().getMethod(method.getName(), method.getParameterTypes());
List<InterceptorData> aroundInvokes = new ArrayList<InterceptorData>();
List<InterceptorData> oldAroundInvokes = info.getMethodInterceptors(beanMethod);
- if(oldAroundInvokes != null && !oldAroundInvokes.isEmpty())
- {
- for(InterceptorData aroundInvoked : oldAroundInvokes)
- {
+ if (oldAroundInvokes != null && !oldAroundInvokes.isEmpty()) {
+ for (InterceptorData aroundInvoked : oldAroundInvokes) {
aroundInvokes.add(aroundInvoked);
}
}
-
+
aroundInvokes.add(interceptorData2);
-
+
//Adding to last interceptor
info.setMethodInterceptors(beanMethod, aroundInvokes);
}
}
-
+
}
- }
- }
+ }
+ }
// todo add watched resources to context
} catch (Exception e) {
logger.error("Unable to deploy collapsed ear in war " + standardContext.getPath() + ": Exception: " + e.getMessage(), e);
@@ -390,12 +443,15 @@ public class TomcatWebAppBuilder impleme
}
}
+ /**
+ * {@inheritDoc}
+ */
public void afterStart(StandardContext standardContext) {
if (standardContext.getServletContext().getAttribute(IGNORE_CONTEXT) != null) return;
// if appInfo is null this is a failed deployment... just ignore
ContextInfo contextInfo = getContextInfo(standardContext);
- if (contextInfo.appInfo == null) return;
+ if (contextInfo != null && contextInfo.appInfo == null) return;
WsService wsService = SystemInstance.get().getComponent(WsService.class);
if (wsService != null) {
@@ -468,7 +524,7 @@ public class TomcatWebAppBuilder impleme
}
ContextAccessController.setReadOnly(listenerName);
- if (!TomcatVersion.hasAnnotationProcessingSupport()){
+ if (!TomcatVersion.hasAnnotationProcessingSupport()) {
try {
Context compEnv = (Context) ContextBindings.getClassLoader().lookup("comp/env");
@@ -489,12 +545,23 @@ public class TomcatWebAppBuilder impleme
standardContext.getPipeline().addValve(openejbValve);
}
+ /**
+ * {@inheritDoc}
+ */
public void beforeStop(StandardContext standardContext) {
+ //No operation
}
+ /**
+ * {@inheritDoc}
+ */
public void stop(StandardContext standardContext) {
+ //No operation
}
+ /**
+ * {@inheritDoc}
+ */
public void afterStop(StandardContext standardContext) {
if (standardContext.getServletContext().getAttribute(IGNORE_CONTEXT) != null) return;
@@ -509,9 +576,16 @@ public class TomcatWebAppBuilder impleme
removeContextInfo(standardContext);
}
+ /**
+ * {@inheritDoc}
+ */
public void destroy(StandardContext standardContext) {
+ //No operation
}
+ /**
+ * {@inheritDoc}
+ */
public void afterStop(StandardServer standardServer) {
// clean ear based webapps after shutdown
for (ContextInfo contextInfo : infos.values()) {
@@ -527,6 +601,9 @@ public class TomcatWebAppBuilder impleme
}
}
+ /**
+ * {@inheritDoc}
+ */
public void checkHost(StandardHost standardHost) {
if (standardHost.getAutoDeploy()) {
// Undeploy any modified application
@@ -549,7 +626,8 @@ public class TomcatWebAppBuilder impleme
for (File file : files) {
String name = file.getName();
// ignore war files
- if (name.toLowerCase().endsWith(".war") || name.equals("ROOT") || name.equalsIgnoreCase("META-INF") || name.equalsIgnoreCase("WEB-INF")) continue;
+ if (name.toLowerCase().endsWith(".war") || name.equals("ROOT") || name.equalsIgnoreCase("META-INF") || name.equalsIgnoreCase("WEB-INF"))
+ continue;
// ignore unpacked web apps
if (file.isDirectory() && new File(file, "WEB-INF").exists()) continue;
// ignore unpacked apps where packed version is present (packed version is owner)
@@ -607,6 +685,14 @@ public class TomcatWebAppBuilder impleme
}
}
+ /**
+ * Returns true if given application is deployed
+ * false otherwise.
+ *
+ * @param file web application file
+ * @param standardHost host
+ * @return true if given application is deployed
+ */
private boolean isDeployed(File file, StandardHost standardHost) {
if (deployedApps.containsKey(file.getAbsolutePath())) {
return true;
@@ -621,22 +707,42 @@ public class TomcatWebAppBuilder impleme
return file.isFile() && standardHost.findChild(name) != null;
}
+ /**
+ * Returns true if given context is root web appliction
+ * false otherwise.
+ *
+ * @param standardContext tomcat context
+ * @return true if given context is root web appliction
+ */
private boolean isRootApplication(StandardContext standardContext) {
- return "".equals(standardContext.getPath());
+ return "".equals(standardContext.getPath());
}
+ /**
+ * Returns application base of the given host.
+ *
+ * @param standardHost tomcat host
+ * @return application base of the given host
+ */
protected File appBase(StandardHost standardHost) {
File file = new File(standardHost.getAppBase());
if (!file.isAbsolute()) {
file = new File(System.getProperty("catalina.base"), standardHost.getAppBase());
}
try {
- file= file.getCanonicalFile();
+ file = file.getCanonicalFile();
} catch (IOException e) {
}
return file;
}
+ /**
+ * Creates an openejb {@link AppModule} instance
+ * from given tomcat context.
+ *
+ * @param standardContext tomcat context instance
+ * @return a openejb application module
+ */
private AppModule loadApplication(StandardContext standardContext) {
// create the web module
WebModule webModule = createWebModule(standardContext);
@@ -665,9 +771,9 @@ public class TomcatWebAppBuilder impleme
logger.info("Found ejb module " + moduleType.getSimpleName() + " in war " + standardContext.getPath());
-
+
// create the ejb module and set its moduleId to the webapp context root name
- EjbModule ejbModule = new EjbModule(webModule.getClassLoader(), getEjbModuleId(standardContext),file.getAbsolutePath(), null, null);
+ EjbModule ejbModule = new EjbModule(webModule.getClassLoader(), getEjbModuleId(standardContext), file.getAbsolutePath(), null, null);
ejbModule.setClientModule(new ClientModule(null, ejbModule.getClassLoader(), ejbModule.getJarLocation(), null, ejbModule.getModuleId()));
// EJB deployment descriptors
@@ -702,17 +808,27 @@ public class TomcatWebAppBuilder impleme
return appModule;
}
+
/**
* Strips off the / from the context root and returns the remaining String
+ *
* @param standardContext
* @return the name of the context root for the webapp
*/
private String getEjbModuleId(StandardContext standardContext) {
- String ejbModuleId = standardContext.getName();
- if(ejbModuleId.startsWith("/"))
- ejbModuleId = ejbModuleId.substring(1);
- return ejbModuleId;
- }
+ String ejbModuleId = standardContext.getName();
+ if (ejbModuleId.startsWith("/"))
+ ejbModuleId = ejbModuleId.substring(1);
+ return ejbModuleId;
+ }
+
+ /**
+ * Creates a new {@link WebModule} instance from given
+ * tomcat context instance.
+ *
+ * @param standardContext tomcat context instance
+ * @return a openejb web module
+ */
private WebModule createWebModule(StandardContext standardContext) {
// todo replace this code with DeploymentLoader
ServletContext servletContext = standardContext.getServletContext();
@@ -737,12 +853,12 @@ public class TomcatWebAppBuilder impleme
webModule.setHost(standardContext.getHostname());
// add faces configurations
try {
- addFacesConfigs(webModule);
- } catch (OpenEJBException e1) {
- logger.error("Unable to add faces config modules in " + standardContext.getPath() + ": Exception: " + e1.getMessage(), e1);
- // TODO :kmalhi:: Remove stack trace after testing
- e1.printStackTrace();
- }
+ addFacesConfigs(webModule);
+ } catch (OpenEJBException e1) {
+ logger.error("Unable to add faces config modules in " + standardContext.getPath() + ": Exception: " + e1.getMessage(), e1);
+ // TODO :kmalhi:: Remove stack trace after testing
+ e1.printStackTrace();
+ }
// Add all Tomcat env entries to context so they can be overriden by the env.properties file
NamingResources naming = standardContext.getNamingResources();
for (ContextEnvironment environment : naming.findEnvironments()) {
@@ -786,19 +902,21 @@ public class TomcatWebAppBuilder impleme
return webModule;
}
+
/**
- * Finds all faces configuration files and stores them in the WebModule
- * @param webModule
- * @throws OpenEJBException
+ * Finds all faces configuration files and stores them in the WebModule.
+ *
+ * @param webModule web module
+ * @throws OpenEJBException for exception
*/
private static void addFacesConfigs(WebModule webModule) throws OpenEJBException {
- //*************************IMPORTANT*******************************************
- // This method is an exact copy of org.apache.openejb.config.DeploymentLoader.addFacesConfigs(WebModule webModule)
- // Any changes to this method here would most probably need to also be reflected in the DeploymentLoader.addFacesConfigs method.
- //*************************IMPORTANT*******************************************
+ //*************************IMPORTANT*******************************************
+ // This method is an exact copy of org.apache.openejb.config.DeploymentLoader.addFacesConfigs(WebModule webModule)
+ // Any changes to this method here would most probably need to also be reflected in the DeploymentLoader.addFacesConfigs method.
+ //*************************IMPORTANT*******************************************
// TODO : kmalhi :: Add support to scrape META-INF/faces-config.xml in jar files
- // look at section 10.4.2 of the JSF v1.2 spec, bullet 1 for details
- Set<URL> facesConfigLocations = new HashSet<URL>();
+ // look at section 10.4.2 of the JSF v1.2 spec, bullet 1 for details
+ Set<URL> facesConfigLocations = new HashSet<URL>();
// web.xml contains faces config locations in the context parameter javax.faces.CONFIG_FILES
File warFile = new File(webModule.getJarLocation());
@@ -806,56 +924,56 @@ public class TomcatWebAppBuilder impleme
if (webApp != null) {
List<ParamValue> contextParam = webApp.getContextParam();
for (ParamValue value : contextParam) {
- boolean foundContextParam = value.getParamName().trim().equals("javax.faces.CONFIG_FILES");
- if(foundContextParam){
- // the value is a comma separated list of config files
- String commaDelimitedListOfFiles = value.getParamValue().trim();
- String[] configFiles = commaDelimitedListOfFiles.split(",");
- // trim any extra spaces in each file
- String[] trimmedConfigFiles = new String[configFiles.length];
- for (int i = 0; i < configFiles.length; i++) {
- trimmedConfigFiles[i] = configFiles[i].trim();
- }
- // convert each file to a URL and add it to facesConfigLocations
- for (String location : trimmedConfigFiles) {
- if(!location.startsWith("/"))
- logger.error("A faces configuration file should be context relative when specified in web.xml. Please fix the value of context parameter javax.faces.CONFIG_FILES for the file "+location);
- try {
- File file = new File(warFile, location).getCanonicalFile().getAbsoluteFile();
- URL url = file.toURI().toURL();
- facesConfigLocations.add(url);
-
- } catch (IOException e) {
- logger.error("Faces configuration file location bad: " + location, e);
- }
- }
- break;
- }
- }
-
+ boolean foundContextParam = value.getParamName().trim().equals("javax.faces.CONFIG_FILES");
+ if (foundContextParam) {
+ // the value is a comma separated list of config files
+ String commaDelimitedListOfFiles = value.getParamValue().trim();
+ String[] configFiles = commaDelimitedListOfFiles.split(",");
+ // trim any extra spaces in each file
+ String[] trimmedConfigFiles = new String[configFiles.length];
+ for (int i = 0; i < configFiles.length; i++) {
+ trimmedConfigFiles[i] = configFiles[i].trim();
+ }
+ // convert each file to a URL and add it to facesConfigLocations
+ for (String location : trimmedConfigFiles) {
+ if (!location.startsWith("/"))
+ logger.error("A faces configuration file should be context relative when specified in web.xml. Please fix the value of context parameter javax.faces.CONFIG_FILES for the file " + location);
+ try {
+ File file = new File(warFile, location).getCanonicalFile().getAbsoluteFile();
+ URL url = file.toURI().toURL();
+ facesConfigLocations.add(url);
+
+ } catch (IOException e) {
+ logger.error("Faces configuration file location bad: " + location, e);
+ }
+ }
+ break;
+ }
+ }
+
}
// Search for WEB-INF/faces-config.xml
- File webInf = new File(warFile,"WEB-INF");
- if(webInf.isDirectory()){
- File facesConfigFile = new File(webInf,"faces-config.xml");
- if(facesConfigFile.exists()){
- try {
- facesConfigFile = facesConfigFile.getCanonicalFile().getAbsoluteFile();
- URL url = facesConfigFile.toURI().toURL();
- facesConfigLocations.add(url);
- } catch (IOException e) {
- // TODO: kmalhi:: Remove the printStackTrace after testing
- e.printStackTrace();
- }
- }
+ File webInf = new File(warFile, "WEB-INF");
+ if (webInf.isDirectory()) {
+ File facesConfigFile = new File(webInf, "faces-config.xml");
+ if (facesConfigFile.exists()) {
+ try {
+ facesConfigFile = facesConfigFile.getCanonicalFile().getAbsoluteFile();
+ URL url = facesConfigFile.toURI().toURL();
+ facesConfigLocations.add(url);
+ } catch (IOException e) {
+ // TODO: kmalhi:: Remove the printStackTrace after testing
+ e.printStackTrace();
+ }
+ }
}
// load the faces configuration files
// TODO:kmalhi:: Its good to have separate FacesConfig objects for multiple configuration files, but what if there is a conflict where the same
// managebean is declared in two different files, which one wins? -- check the jsf spec, Hopefully JSF should be able to check for this and
// flag an error and not allow the application to be deployed.
for (URL location : facesConfigLocations) {
- FacesConfig facesConfig = ReadDescriptors.readFacesConfig(location);
+ FacesConfig facesConfig = ReadDescriptors.readFacesConfig(location);
webModule.getFacesConfigs().add(facesConfig);
if ("file".equals(location.getProtocol())) {
webModule.getWatchedResources().add(URLs.toFilePath(location));
@@ -863,6 +981,12 @@ public class TomcatWebAppBuilder impleme
}
}
+ /**
+ * Remove jndi references from related info map.
+ *
+ * @param webApp web application instance
+ * @param name jndi reference name
+ */
private void removeRef(WebApp webApp, String name) {
webApp.getEnvEntryMap().remove(name);
webApp.getEjbRefMap().remove(name);
@@ -874,6 +998,12 @@ public class TomcatWebAppBuilder impleme
webApp.getResourceEnvRefMap().remove(name);
}
+ /**
+ * Gets urls in a web application.
+ *
+ * @param standardContext context
+ * @return list of url
+ */
private List<URL> getUrls(StandardContext standardContext) {
List<URL> urls = null;
try {
@@ -887,17 +1017,26 @@ public class TomcatWebAppBuilder impleme
return urls;
}
- //
- // helper methods
- //
-
+ /**
+ * Binds given object into given component context.
+ *
+ * @param comp context
+ * @param name name of the binding
+ * @param value binded object
+ */
private void safeBind(Context comp, String name, Object value) {
try {
comp.bind(name, value);
} catch (NamingException e) {
+ logger.error("Error in safeBind method", e);
}
}
+ /**
+ * Gets openejb assembler instance.
+ *
+ * @return assembler
+ */
private Assembler getAssembler() {
if (assembler == null) {
assembler = (Assembler) SystemInstance.get().getComponent(org.apache.openejb.spi.Assembler.class);
@@ -905,6 +1044,11 @@ public class TomcatWebAppBuilder impleme
return assembler;
}
+ /**
+ * Gets container system for openejb.
+ *
+ * @return openejb container system
+ */
private CoreContainerSystem getContainerSystem() {
if (containerSystem == null) {
containerSystem = (CoreContainerSystem) SystemInstance.get().getComponent(ContainerSystem.class);
@@ -912,18 +1056,37 @@ public class TomcatWebAppBuilder impleme
return containerSystem;
}
+ /**
+ * Gets id of the context. Context id
+ * is host name + context root name.
+ *
+ * @param standardContext context instance
+ * @return id of the context
+ */
private String getId(StandardContext standardContext) {
String contextRoot = standardContext.getName();
if (!contextRoot.startsWith("/")) contextRoot = "/" + contextRoot;
return standardContext.getHostname() + contextRoot;
}
+ /**
+ * Gets context info for given context.
+ *
+ * @param standardContext context
+ * @return context info
+ */
private ContextInfo getContextInfo(StandardContext standardContext) {
String id = getId(standardContext);
ContextInfo contextInfo = infos.get(id);
return contextInfo;
}
+ /**
+ * Gets context info for given web app info.
+ *
+ * @param webAppInfo web application info
+ * @return context info
+ */
private ContextInfo getContextInfo(WebAppInfo webAppInfo) {
String host = webAppInfo.host;
if (host == null) host = "localhost";
@@ -933,6 +1096,13 @@ public class TomcatWebAppBuilder impleme
return contextInfo;
}
+ /**
+ * Add new context info.
+ *
+ * @param host host name
+ * @param standardContext context
+ * @return context info
+ */
private ContextInfo addContextInfo(String host, StandardContext standardContext) {
String contextRoot = standardContext.getName();
if (!contextRoot.startsWith("/")) contextRoot = "/" + contextRoot;
@@ -945,6 +1115,11 @@ public class TomcatWebAppBuilder impleme
return contextInfo;
}
+ /**
+ * Removes context info from map.
+ *
+ * @param standardContext context
+ */
private void removeContextInfo(StandardContext standardContext) {
String id = getId(standardContext);
infos.remove(id);
@@ -959,7 +1134,7 @@ public class TomcatWebAppBuilder impleme
private static class DeployedApplication {
private AppInfo appInfo;
- private final Map<File,Long> watchedResource = new HashMap<File,Long>();
+ private final Map<File, Long> watchedResource = new HashMap<File, Long>();
public DeployedApplication(File base, AppInfo appInfo) {
this.appInfo = appInfo;
@@ -1002,10 +1177,11 @@ public class TomcatWebAppBuilder impleme
return false;
}
}
-
+
/**
* Gets path to jar file that has namePrefix
* and in the openejb.war/lib location.
+ *
* @param namePrefix prefix of the jar file
* @return path to file
*/
@@ -1013,7 +1189,7 @@ public class TomcatWebAppBuilder impleme
String openejbWarLocation = SystemInstance.get().getProperty("openejb.war");
File openejbWar = new File(openejbWarLocation);
File openEJBLibDir = new File(openejbWar, "openwebbeans");
-
+
List<File> files = new ArrayList<File>();
if (openEJBLibDir == null) return null;