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 2014/02/19 00:11:15 UTC

svn commit: r1569554 - in /tomee/tomee/trunk: container/openejb-core/src/main/java/org/apache/openejb/ container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ container/openejb-core/src/main/java/org/apache/openejb/config/ container/...

Author: dblevins
Date: Tue Feb 18 23:11:14 2014
New Revision: 1569554

URL: http://svn.apache.org/r1569554
Log:
TOMEE-1127 - New Event: @Observes LifecycleEvent
Rename EventHelper to Extensions, add javadoc

Added:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/Extensions.java
      - copied, changed from r1569446, tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/EventHelper.java
Removed:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/EventHelper.java
Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
    tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java

Copied: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/Extensions.java (from r1569446, tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/EventHelper.java)
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/Extensions.java?p2=tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/Extensions.java&p1=tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/EventHelper.java&r1=1569446&r2=1569554&rev=1569554&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/EventHelper.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/Extensions.java Tue Feb 18 23:11:14 2014
@@ -14,9 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.openejb.util;
+package org.apache.openejb;
 
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
 import org.apache.xbean.finder.ResourceFinder;
 
 import java.io.IOException;
@@ -24,11 +26,35 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
-public final class EventHelper {
+/**
+ * The Extensions API mimics the equivalent CDI Extension/@Observes API
+ *
+ * Via the Extensions/@Obverves API it is possible to listen for any number of
+ * internal events fired by OpenEJB/TomEE during the life of the server and
+ * deployment of applications.
+ *
+ * Extensions are any java class that have one or more @Observes methods using the following format:
+ *
+ *  - public void <any-name>(@Observes <any-type> event)
+ *
+ * Extensions can be registered in any number of ways:
+ *
+ * 1. Via a META-INF/org.apache.openejb.extension text file containing the name of exactly one
+ * 2. Via a <Service> tag in the server's openejb.xml or tomee.xml configuration file
+ * 3. Via a <Service> tag in a META-INF/resources.xml in the application
+ * 4. Directly calling SystemInstance#addObserver(Object)
+ *
+ * @see org.apache.openejb.observer.ObserverManager
+ * @see org.apache.openejb.observer.Observes
+ * @see org.apache.openejb.loader.SystemInstance#fireEvent(Object)
+ * @see org.apache.openejb.loader.SystemInstance#addObserver(Object)
+ *
+ */
+public final class Extensions {
 
-    private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, EventHelper.class);
+    private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, Extensions.class);
 
-    private EventHelper() {
+    private Extensions() {
         // no-op
     }
 
@@ -44,13 +70,13 @@ public final class EventHelper {
     public static void installExtensions(final ResourceFinder finder) {
         try {
             final List<Class<?>> classes = finder.findAvailableClasses("org.apache.openejb.extension");
-            addEventClasses(classes);
+            addExtensions(classes);
         } catch (IOException e) {
             LOGGER.error("Extension scanning of 'META-INF/org.apache.openejb.extension' files failed", e);
         }
     }
 
-    public static void addEventClasses(final ClassLoader loader, final Collection<String> classes) {
+    public static void addExtensions(final ClassLoader loader, final Collection<String> classes) {
         for (final String clazz : classes) {
             try {
                 final Object object = loader.loadClass(clazz).newInstance();
@@ -61,7 +87,7 @@ public final class EventHelper {
         }
     }
 
-    public static void addEventClasses(final Collection<Class<?>> classes) {
+    public static void addExtensions(final Collection<Class<?>> classes) {
         for (final Class<?> clazz : classes) {
             try {
                 final Object object = clazz.newInstance();

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1569554&r1=1569553&r2=1569554&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Tue Feb 18 23:11:14 2014
@@ -109,7 +109,7 @@ import org.apache.openejb.spi.ContainerS
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.Contexts;
 import org.apache.openejb.util.DaemonThreadFactory;
-import org.apache.openejb.util.EventHelper;
+import org.apache.openejb.Extensions;
 import org.apache.openejb.util.Join;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
@@ -315,7 +315,7 @@ public class Assembler extends Assembler
     private void installExtensions() {
         try {
             final Collection<URL> urls = NewLoaderLogic.applyBuiltinExcludes(new UrlSet(Assembler.class.getClassLoader()).excludeJvm()).getUrls();
-            EventHelper.installExtensions(new ResourceFinder("META-INF", urls.toArray(new URL[urls.size()])));
+            Extensions.installExtensions(new ResourceFinder("META-INF", urls.toArray(new URL[urls.size()])));
             return;
         } catch (MalformedURLException e) {
             // no-op
@@ -323,8 +323,8 @@ public class Assembler extends Assembler
             // no-op
         }
 
-        // if an error occured do it brutely
-        EventHelper.installExtensions(new ResourceFinder("META-INF"));
+        // if an error occurred do it brutely
+        Extensions.installExtensions(new ResourceFinder("META-INF"));
     }
 
     private void setConfiguration(final OpenEjbConfiguration config) {
@@ -624,7 +624,7 @@ public class Assembler extends Assembler
             appInfo.path = appInfo.appId;
         }
 
-        EventHelper.addEventClasses(classLoader, appInfo.eventClassesNeedingAppClassloader);
+        Extensions.addExtensions(classLoader, appInfo.eventClassesNeedingAppClassloader);
 
         logger.info("createApplication.start", appInfo.path);
 

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1569554&r1=1569553&r2=1569554&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java Tue Feb 18 23:11:14 2014
@@ -81,7 +81,7 @@ import org.apache.openejb.monitoring.Loc
 import org.apache.openejb.resource.jdbc.DataSourceFactory;
 import org.apache.openejb.resource.jdbc.pool.DataSourceCreator;
 import org.apache.openejb.resource.jdbc.pool.DefaultDataSourceCreator;
-import org.apache.openejb.util.EventHelper;
+import org.apache.openejb.Extensions;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
@@ -898,7 +898,7 @@ public class ConfigurationFactory implem
         final List<URL> libs = appModule.getAdditionalLibraries();
         if (libs != null && libs.size() > 0) {
             final ResourceFinder finder = new ResourceFinder("META-INF", libs.toArray(new URL[libs.size()]));
-            extensions.addAll(EventHelper.findExtensions(finder));
+            extensions.addAll(Extensions.findExtensions(finder));
             notLoaded.addAll(finder.getResourcesNotLoaded());
         }
         for (final EjbModule ejb : appModule.getEjbModules()) {
@@ -908,7 +908,7 @@ public class ConfigurationFactory implem
                     final URL url = uri.toURL();
                     if (libs != null && !libs.contains(url)) {
                         final ResourceFinder finder = new ResourceFinder("META-INF", url);
-                        extensions.addAll(EventHelper.findExtensions(finder));
+                        extensions.addAll(Extensions.findExtensions(finder));
                         notLoaded.addAll(finder.getResourcesNotLoaded());
                     }
                 }
@@ -924,13 +924,13 @@ public class ConfigurationFactory implem
             final List<URL> webLibs = web.getScannableUrls();
             if (webLibs != null && webLibs.size() > 0) {
                 final ResourceFinder finder = new ResourceFinder("META-INF", webLibs.toArray(new URL[webLibs.size()]));
-                extensions.addAll(EventHelper.findExtensions(finder));
+                extensions.addAll(Extensions.findExtensions(finder));
                 notLoaded.addAll(finder.getResourcesNotLoaded());
             }
         }
 
         // add it as early as possible, the ones needing the app classloader will be added later
-        EventHelper.addEventClasses(extensions);
+        Extensions.addExtensions(extensions);
 
         final String location = appModule.getJarLocation();
         logger.info("config.configApp", null != location ? location : appModule.getModuleId());

Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java?rev=1569554&r1=1569553&r2=1569554&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java (original)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java Tue Feb 18 23:11:14 2014
@@ -43,6 +43,15 @@ public class ServerListener implements L
     static private final AtomicBoolean listenerInstalled = new AtomicBoolean(false);
 
     public void lifecycleEvent(final LifecycleEvent event) {
+
+        // Bootstrap
+        install(event);
+
+        // Notify
+        SystemInstance.get().fireEvent(event);
+    }
+
+    private void install(LifecycleEvent event) {
         if (Lifecycle.BEFORE_INIT_EVENT.equals(event.getType()) && StandardServer.class.isInstance(event.getSource())) {
             installServerInfo();
         }