You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/06/20 18:06:47 UTC

svn commit: r1352193 - in /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb: config/ config/sys/ util/

Author: rmannibucau
Date: Wed Jun 20 16:06:46 2012
New Revision: 1352193

URL: http://svn.apache.org/viewvc?rev=1352193&view=rev
Log:
TOMEE-247 TOMEE-248 InitHooks and updating update-checker to be a hook

Added:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/InitHooks.java
Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1352193&r1=1352192&r2=1352193&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java Wed Jun 20 16:06:46 2012
@@ -70,6 +70,7 @@ import org.apache.openejb.config.sys.Add
 import org.apache.openejb.config.sys.ConnectionManager;
 import org.apache.openejb.config.sys.Container;
 import org.apache.openejb.config.sys.Deployments;
+import org.apache.openejb.config.sys.InitHooks;
 import org.apache.openejb.config.sys.JaxbOpenejb;
 import org.apache.openejb.config.sys.JndiProvider;
 import org.apache.openejb.config.sys.Openejb;
@@ -114,6 +115,10 @@ public class ConfigurationFactory implem
     private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_STARTUP_CONFIG, ConfigurationFactory.class);
     private static final Messages messages = new Messages(ConfigurationFactory.class);
 
+    private static final Map<String, String> KNOWN_HOOKS = new HashMap<String, String>() {{
+        put("update-checker", UpdateChecker.class.getName());
+    }};
+
     private static final String IGNORE_DEFAULT_VALUES_PROP = "IgnoreDefaultValues";
 
     private String configLocation;
@@ -372,12 +377,6 @@ public class ConfigurationFactory implem
             return sys;
         }
 
-        Thread updateCheckerThreader = null;
-        if (!offline && !UpdateChecker.isSkipped()) {
-            updateCheckerThreader = new Thread(new UpdateChecker());
-            updateCheckerThreader.start();
-        }
-
         if (configLocation != null) {
             openejb = JaxbOpenejb.readConfig(configLocation);
         } else {
@@ -386,6 +385,8 @@ public class ConfigurationFactory implem
 
         loadPropertiesDeclaredConfiguration(openejb);
 
+        initHook();
+
         sys = new OpenEjbConfiguration();
         sys.containerSystem = new ContainerSystemInfo();
         sys.facilities = new FacilitiesInfo();
@@ -486,23 +487,38 @@ public class ConfigurationFactory implem
             }
         }
 
-        if (!offline && !UpdateChecker.isSkipped()) {
-            try {
-                updateCheckerThreader.join(10000); // 10s is already a lot
-            } catch (InterruptedException ignored) {
-                // no-op
-            }
-            if (!UpdateChecker.usesLatest()) {
-                logger.warning(UpdateChecker.message());
-            }
-        }
-
         final OpenEjbConfiguration finished = sys;
         sys = null;
         openejb = null;
         return finished;
     }
 
+    private void initHook() {
+        if (openejb == null) {
+            return;
+        }
+
+        final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            return;
+        }
+
+        for (InitHooks hook : openejb.getHooks()) {
+            String name = hook.getName();
+            if (KNOWN_HOOKS.containsKey(name)) { // aliases
+                name = KNOWN_HOOKS.get(name);
+            }
+
+            try {
+                final Class<?> clazz = loader.loadClass(name);
+                final Runnable instance = (Runnable) clazz.newInstance();
+                instance.run();
+            } catch (Exception e) {
+                logger.error("can't run hook '" + hook.getName() + "'", e);
+            }
+        }
+    }
+
     private List<String> getDeclaredApps() {
         // make a copy of the list because we update it
         final List<Deployments> deployments = new ArrayList<Deployments>();
@@ -653,6 +669,9 @@ public class ConfigurationFactory implem
                     }
                     deployments.setClasspath(new URLClassLoader(urls.toArray(new URL[urls.size()])));
                 }
+            } else if (object instanceof InitHooks) {
+                final InitHooks hook = (InitHooks) object;
+                hook.setName(map.remove("name"));
             }
 
             return object;

Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/InitHooks.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/InitHooks.java?rev=1352193&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/InitHooks.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/InitHooks.java Wed Jun 20 16:06:46 2012
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.config.sys;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "")
+@XmlRootElement(name = "InitHooks")
+public class InitHooks {
+
+    @XmlAttribute
+    protected String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java?rev=1352193&r1=1352192&r2=1352193&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java Wed Jun 20 16:06:46 2012
@@ -121,6 +121,8 @@ public abstract class JaxbOpenejb {
             return (T) createServicesJar();
         } else if (type.equals("TransactionManager")) {
             return (T) createTransactionManager();
+        } else if (type.equals("InitHooks")) {
+            return (T) createInitHooks();
         }
         throw new IllegalArgumentException("Unknown type " + type);
     }
@@ -378,6 +380,10 @@ public abstract class JaxbOpenejb {
         return new Deployments();
     }
 
+    public static InitHooks createInitHooks() {
+        return new InitHooks();
+    }
+
     public static JndiProvider createJndiProvider() {
         return new JndiProvider();
     }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java?rev=1352193&r1=1352192&r2=1352193&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java Wed Jun 20 16:06:46 2012
@@ -73,6 +73,8 @@ public class Openejb {
     protected List<Resource> resource;
     @XmlElement(name = "Deployments")
     protected List<Deployments> deployments;
+    @XmlElement(name = "InitHooks")
+    protected List<InitHooks> hooks;
 
     /**
      * Gets the value of the container property.
@@ -303,6 +305,13 @@ public class Openejb {
         return this.deployments;
     }
 
+    public List<InitHooks> getHooks() {
+        if (hooks == null) {
+            hooks = new ArrayList<InitHooks>();
+        }
+        return this.hooks;
+    }
+
     public void add(Object service) {
         if (service instanceof Container) {
             getContainer().add((Container) service);
@@ -322,6 +331,8 @@ public class Openejb {
             setSecurityService((SecurityService) service);
         } else if (service instanceof Deployments) {
             getDeployments().add((Deployments) service);
+        } else if (service instanceof InitHooks) {
+            getHooks().add((InitHooks) service);
         }
     }
 }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java?rev=1352193&r1=1352192&r2=1352193&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java Wed Jun 20 16:06:46 2012
@@ -127,6 +127,7 @@ class SaxOpenejb extends DefaultHandler 
             else if (localName.equals("Connector")) push(new ResourceElement());
             else if (localName.equals("Deployments")) push(new DeploymentsElement());
             else if (localName.equals("Import")) push(new ImportElement());
+            else if (localName.equals("InitHooks")) push(new InitHooksElement());
             else throw new IllegalStateException("Unsupported Element: " + localName);
             get().startElement(uri, localName, qName, attributes);
         }
@@ -289,6 +290,20 @@ class SaxOpenejb extends DefaultHandler 
         }
     }
 
+    private class InitHooksElement extends DefaultHandler {
+        private final InitHooks initHooks = new InitHooks();
+
+        @Override
+        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+            initHooks.setName(attributes.getValue("name"));
+        }
+
+        @Override
+        public void endElement(String uri, String localName, String qName) throws SAXException {
+            openejb.getHooks().add(initHooks);
+        }
+    }
+
     private class ImportElement extends DefaultHandler {
         private String path = null;
 

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java?rev=1352193&r1=1352192&r2=1352193&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java Wed Jun 20 16:06:46 2012
@@ -25,6 +25,8 @@ import org.apache.openejb.loader.SystemI
 import java.net.URL;
 
 public class UpdateChecker implements Runnable {
+    private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB_STARTUP, UpdateChecker.class);
+
     private static final String SKIP_CHECK = "openejb.version.check";
     private static final String REPO_URL = SystemInstance.get().getOptions().get("openejb.version.check.repo.url", "http://repo1.maven.org/maven2/");
     private static final String OPENEJB_GROUPID = "org/apache/openejb/";
@@ -86,8 +88,11 @@ public class UpdateChecker implements Ru
             final URL url = new URL(realUrl);
             final String metaData = IO.readFileAsString(url.toURI());
             LATEST = extractLatest(metaData);
+            if (!usesLatest()) {
+                LOGGER.warning(message());
+            }
         } catch (Exception e) {
-            // ignored
+            LOGGER.warning("can't check the version: " + e.getMessage()); // don't be too verbose here
         } finally {
             if (proxyProtocol != null) {
                 resetSystemProp(proxyProtocol + ".proxyHost", originalProxyHost);