Author: rmannibucau
Date: Fri Jun 22 10:53:38 2012
New Revision: 1352840
URL: http://svn.apache.org/viewvc?rev=1352840&view=rev
Log:
TOMEE-254 tomee listener facade
Added:
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEListener.java
Added:
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEListener.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEListener.java?rev=1352840&view=auto
==============================================================================
---
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEListener.java
(added)
+++
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEListener.java
Fri Jun 22 10:53:38 2012
@@ -0,0 +1,71 @@
+package org.apache.tomee.loader;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.lang.reflect.Method;
+import java.util.logging.Logger;
+import org.apache.catalina.LifecycleEvent;
+import org.apache.catalina.LifecycleListener;
+
+// simply a facade for OpenEJBListener and ServerListener
+public class TomEEListener implements LifecycleListener {
+ private static final Logger LOGGER =
Logger.getLogger(TomEEListener.class.getName());
+
+ private static final Method delegateMethod;
+ static {
+ Method mtd = null;
+ try {
+ mtd = LifecycleListener.class.getMethod("lifecycleEvent",
LifecycleEvent.class);
+ } catch (Exception e) {
+ LOGGER.severe("can't get lifecycleEvent method from
LifecycleListener");
+ }
+ delegateMethod = mtd;
+ }
+
+ private final Object delegate;
+
+ public TomEEListener() {
+ Object instance = null;
+ if (tomeeLibAreInTomcatLibs()) {
+ // done by reflection to avoid direct lib dep
+ try {
+ instance = TomEEListener.class.getClassLoader()
+
.loadClass("org.apache.tomee.catalina.ServerListener")
+ .newInstance();
+ } catch (Exception e) {
+ LOGGER.severe("can't instantiate ServerListener");
+ }
+ }
+
+ if (instance == null) {
+ instance = new OpenEJBListener();
+ }
+
+ delegate = instance;
+ }
+
+ private boolean tomeeLibAreInTomcatLibs() {
+ final File lib = new File(System.getProperty("catalina.home"), "lib");
+ if (lib.exists()) {
+ final File[] files = lib.listFiles(new FilenameFilter() {
+ @Override
+ public boolean accept(final File dir, final String name) {
+ return name != null && name.startsWith("openejb-core") &&
name.endsWith(".jar");
+ }
+ });
+ return files != null && files.length > 0; // == 1 in fact
+ }
+ return false;
+ }
+
+
+
+ @Override
+ public void lifecycleEvent(final LifecycleEvent lifecycleEvent) {
+ try {
+ delegateMethod.invoke(delegate, lifecycleEvent);
+ } catch (Exception e) {
+ LOGGER.severe("error invoking " + delegateMethod.getName() + " for
" + lifecycleEvent);
+ }
+ }
+}