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