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 2016/03/01 18:37:18 UTC
tomee git commit: fixing RemoteTomEEEJBContainer and avoiding to
loose some system properties
Repository: tomee
Updated Branches:
refs/heads/master 58cdbbef9 -> a71d6ee27
fixing RemoteTomEEEJBContainer and avoiding to loose some system properties
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/a71d6ee2
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/a71d6ee2
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/a71d6ee2
Branch: refs/heads/master
Commit: a71d6ee27d1d05331d62960c02bd132f08e06f61
Parents: 58cdbbe
Author: Romain manni-Bucau <rm...@gmail.com>
Authored: Tue Mar 1 18:37:04 2016 +0100
Committer: Romain manni-Bucau <rm...@gmail.com>
Committed: Tue Mar 1 18:37:04 2016 +0100
----------------------------------------------------------------------
.../apache/openejb/arquillian/common/Setup.java | 12 ++++++
.../arquillian/common/TomEEContainer.java | 11 ++++++
.../embedded/EmbeddedTomEEConfiguration.java | 1 +
.../embedded/EmbeddedTomEEContainer.java | 2 +
.../arquillian/remote/RemoteTomEEContainer.java | 8 +++-
.../arquillian/webapp/TomEEWebappContainer.java | 8 +++-
.../core/rmi/BlacklistClassResolver.java | 3 ++
.../apache/openejb/loader/SystemInstance.java | 19 ++++++++--
.../openejb/client/EjbObjectInputStream.java | 40 ++++++++++++--------
.../apache/tomee/RemoteTomEEEJBContainer.java | 16 +++++++-
10 files changed, 95 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/a71d6ee2/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java b/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
index 7db26ba..a369129 100644
--- a/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
+++ b/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
@@ -32,6 +32,7 @@ import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.Socket;
import java.util.Collection;
@@ -306,6 +307,8 @@ public class Setup {
if (configuration.isUnsafeEjbd() && "*".equals(properties.getProperty("tomee.serialization.class.blacklist", "-").trim())) {
properties.remove("tomee.serialization.class.blacklist");
properties.put("tomee.serialization.class.whitelist", "*");
+ System.setProperty("tomee.serialization.class.blacklist", System.getProperty("tomee.serialization.class.blacklist", "-"));
+ reloadClientSerializationConfig();
}
try {
@@ -315,6 +318,15 @@ public class Setup {
}
}
+ public static void reloadClientSerializationConfig() {
+ try {
+ Thread.currentThread().getContextClassLoader().loadClass("org.apache.openejb.client.EjbObjectInputStream")
+ .getMethod("reloadResolverConfig").invoke(null);
+ } catch (final IllegalAccessException | InvocationTargetException | ClassNotFoundException | NoSuchMethodException e) {
+ // not a pb normally
+ }
+ }
+
public static void synchronizeFolder(final File tomeeHome, final String src, final String dir) {
if (src != null && !src.isEmpty()) {
http://git-wip-us.apache.org/repos/asf/tomee/blob/a71d6ee2/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java b/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
index 5ac79d2..944c3f6 100644
--- a/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
+++ b/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
@@ -77,6 +77,13 @@ public abstract class TomEEContainer<Configuration extends TomEEConfiguration> i
this.options = new Options(System.getProperties());
}
+ protected void resetSerialization() {
+ if (this.configuration.isUnsafeEjbd() && "-".equals(System.getProperty("tomee.serialization.class.blacklist"))) {
+ System.clearProperty("tomee.serialization.class.blacklist");
+ Setup.reloadClientSerializationConfig();
+ }
+ }
+
protected boolean isTestable(final Archive<?> archive, final DeploymentDescription deploymentDescription) {
return deploymentDescription != null
&& deploymentDescription.isArchiveDeployment()
@@ -220,6 +227,10 @@ public abstract class TomEEContainer<Configuration extends TomEEConfiguration> i
waitForShutdown(socket, 10);
} catch (final Exception e) {
throw new LifecycleException("Unable to stop TomEE", e);
+ } finally {
+ if (this.configuration.isUnsafeEjbd() && "-".equals(System.getProperty("tomee.serialization.class.blacklist"))) {
+ System.clearProperty("tomee.serialization.class.blacklist");
+ }
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/a71d6ee2/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEConfiguration.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEConfiguration.java b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEConfiguration.java
index ea7ea42..950b7cc 100644
--- a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEConfiguration.java
+++ b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEConfiguration.java
@@ -178,6 +178,7 @@ public class EmbeddedTomEEConfiguration extends TomEEConfiguration {
properties.remove("tomee.serialization.class.blacklist");
properties.put("tomee.serialization.class.whitelist", "*");
+ System.setProperty("tomee.serialization.class.blacklist", System.getProperty("tomee.serialization.class.blacklist", "-"));
}
return properties;
http://git-wip-us.apache.org/repos/asf/tomee/blob/a71d6ee2/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
index 6f30b11..e2026ea 100644
--- a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
+++ b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
@@ -128,6 +128,8 @@ public class EmbeddedTomEEContainer extends TomEEContainer<EmbeddedTomEEConfigur
this.container.stop();
} catch (final Exception e) {
throw new LifecycleException("Unable to stop server", e);
+ } finally {
+ resetSerialization();
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/a71d6ee2/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java b/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
index efdc76e..04ca053 100644
--- a/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
+++ b/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
@@ -300,8 +300,12 @@ public class RemoteTomEEContainer extends TomEEContainer<RemoteTomEEConfiguratio
// only stop the container if we started it
if (shutdown) {
- Setup.removeArquillianBeanDiscoverer(tomeeHome);
- container.destroy();
+ try {
+ Setup.removeArquillianBeanDiscoverer(tomeeHome);
+ container.destroy();
+ } finally {
+ resetSerialization();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/a71d6ee2/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java b/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
index 53d139a..852bde2 100644
--- a/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
+++ b/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
@@ -230,8 +230,12 @@ public class TomEEWebappContainer extends TomEEContainer<TomEEWebappConfiguratio
public void stop() throws LifecycleException {
// only stop the container if we started it
if (shutdown) {
- Setup.removeArquillianBeanDiscoverer(openejbHome);
- container.destroy();
+ try {
+ Setup.removeArquillianBeanDiscoverer(openejbHome);
+ container.destroy();
+ } finally {
+ resetSerialization();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/a71d6ee2/container/openejb-core/src/main/java/org/apache/openejb/core/rmi/BlacklistClassResolver.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/rmi/BlacklistClassResolver.java b/container/openejb-core/src/main/java/org/apache/openejb/core/rmi/BlacklistClassResolver.java
index da34eec..134db76 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/core/rmi/BlacklistClassResolver.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/core/rmi/BlacklistClassResolver.java
@@ -34,6 +34,9 @@ public class BlacklistClassResolver {
}
protected boolean isBlacklisted(final String name) {
+ if (name != null && name.startsWith("[L") && name.endsWith(";")) {
+ return isBlacklisted(name.substring(2, name.length() - 1));
+ }
return (whitelist != null && !contains(whitelist, name)) || contains(blacklist, name);
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/a71d6ee2/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java
----------------------------------------------------------------------
diff --git a/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java b/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java
index 8ce4dc0..a8e5cbc 100644
--- a/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java
+++ b/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java
@@ -284,10 +284,15 @@ public final class SystemInstance {
return;
}
system = new SystemInstance(properties);
- readUserSystemProperties();
- readSystemProperties();
+ // WARNING: reverse order since we don't overwrite existing entries
readSystemProperties(get().currentProfile());
- System.getProperties().putAll(system.getProperties()); // if the user read System.getProperties() instead of our properties, used in bval-tomee tck for instance
+ readSystemProperties();
+ readUserSystemProperties();
+
+
+ // if the user read System.getProperties() instead of our properties, used in bval-tomee tck for instance
+ System.getProperties().putAll(system.getProperties());
+
initialized = true;
get().setProperty("openejb.profile.custom", Boolean.toString(!get().isDefaultProfile()));
@@ -360,7 +365,13 @@ public final class SystemInstance {
return;
}
- system.getProperties().putAll(systemProperties);
+ for (final String key : systemProperties.stringPropertyNames()) {
+ if (system.getProperty(key) == null) {
+ system.setProperty(key, systemProperties.getProperty(key));
+ }
+ }
+ // don't override system props
+ // system.getProperties().putAll(systemProperties);
}
public static SystemInstance get() {
http://git-wip-us.apache.org/repos/asf/tomee/blob/a71d6ee2/server/openejb-client/src/main/java/org/apache/openejb/client/EjbObjectInputStream.java
----------------------------------------------------------------------
diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/EjbObjectInputStream.java b/server/openejb-client/src/main/java/org/apache/openejb/client/EjbObjectInputStream.java
index 7e7155b..fa87952 100644
--- a/server/openejb-client/src/main/java/org/apache/openejb/client/EjbObjectInputStream.java
+++ b/server/openejb-client/src/main/java/org/apache/openejb/client/EjbObjectInputStream.java
@@ -5,14 +5,14 @@
* 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.
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.client;
@@ -21,12 +21,18 @@ import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
import java.lang.reflect.Proxy;
+import java.util.concurrent.atomic.AtomicReference;
/**
* @version $Rev$ $Date$
*/
public class EjbObjectInputStream extends ObjectInputStream {
- private static final BlacklistClassResolver DEFAULT = new BlacklistClassResolver();
+ private static final AtomicReference<BlacklistClassResolver> RESOLVER_ATOMIC_REFERENCE =
+ new AtomicReference<>(new BlacklistClassResolver());
+
+ public static void reloadResolverConfig() {
+ RESOLVER_ATOMIC_REFERENCE.set(new BlacklistClassResolver());
+ }
public EjbObjectInputStream(final InputStream in) throws IOException {
super(in);
@@ -34,7 +40,7 @@ public class EjbObjectInputStream extends ObjectInputStream {
@Override
protected Class<?> resolveClass(final ObjectStreamClass classDesc) throws IOException, ClassNotFoundException {
- final String n = DEFAULT.check(classDesc.getName());
+ final String n = RESOLVER_ATOMIC_REFERENCE.get().check(classDesc.getName());
final ClassLoader classloader = getClassloader();
try {
return Class.forName(n, false, classloader);
@@ -89,15 +95,14 @@ public class EjbObjectInputStream extends ObjectInputStream {
}
public static class BlacklistClassResolver {
- private static final String[] WHITELIST = toArray(System.getProperty("tomee.serialization.class.whitelist"));
- private static final String[] BLACKLIST = toArray(System.getProperty(
- "tomee.serialization.class.blacklist", "org.codehaus.groovy.runtime.,org.apache.commons.collections.functors.,org.apache.xalan,java.lang.Process"));
-
private final String[] blacklist;
private final String[] whitelist;
protected BlacklistClassResolver() {
- this(BLACKLIST, WHITELIST);
+ this(toArray(System.getProperty(
+ "tomee.serialization.class.blacklist",
+ "org.codehaus.groovy.runtime.,org.apache.commons.collections.functors.,org.apache.xalan,java.lang.Process")),
+ toArray(System.getProperty("tomee.serialization.class.whitelist")));
}
protected BlacklistClassResolver(final String[] blacklist, final String[] whitelist) {
@@ -106,12 +111,15 @@ public class EjbObjectInputStream extends ObjectInputStream {
}
protected boolean isBlacklisted(final String name) {
+ if (name != null && name.startsWith("[L") && name.endsWith(";")) {
+ return isBlacklisted(name.substring(2, name.length() - 1));
+ }
return (whitelist != null && !contains(whitelist, name)) || contains(blacklist, name);
}
public final String check(final String name) {
if (isBlacklisted(name)) {
- throw new SecurityException(name + " is not whitelisted as deserialisable, prevented before loading.");
+ throw new SecurityException(name + " is not whitelisted as deserialisable, prevented before loading it.");
}
return name;
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/a71d6ee2/tomee/apache-tomee/src/main/java/org/apache/tomee/RemoteTomEEEJBContainer.java
----------------------------------------------------------------------
diff --git a/tomee/apache-tomee/src/main/java/org/apache/tomee/RemoteTomEEEJBContainer.java b/tomee/apache-tomee/src/main/java/org/apache/tomee/RemoteTomEEEJBContainer.java
index 4327d82..8adeed7 100644
--- a/tomee/apache-tomee/src/main/java/org/apache/tomee/RemoteTomEEEJBContainer.java
+++ b/tomee/apache-tomee/src/main/java/org/apache/tomee/RemoteTomEEEJBContainer.java
@@ -20,6 +20,7 @@ import org.apache.geronimo.osgi.locator.ProviderLocator;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.assembler.Deployer;
import org.apache.openejb.assembler.DeployerEjb;
+import org.apache.openejb.client.EjbObjectInputStream;
import org.apache.openejb.client.RemoteInitialContextFactory;
import org.apache.openejb.config.RemoteServer;
import org.apache.openejb.loader.IO;
@@ -90,13 +91,21 @@ public class RemoteTomEEEJBContainer extends EJBContainer {
final String remoteEjb = System.getProperty(Context.PROVIDER_URL, "http://" + parser.host() + ":" + parser.http() + "/tomee/ejb");
System.setProperty(RemoteServer.SERVER_SHUTDOWN_PORT, parser.stop());
+ final String blacklist = System.getProperty("tomee.serialization.class.blacklist");
+ if (blacklist == null) {
+ System.setProperty("tomee.serialization.class.blacklist", "-");
+ EjbObjectInputStream.reloadResolverConfig();
+ }
try {
instance = new RemoteTomEEEJBContainer();
instance.container = new RemoteServer();
instance.container.setPortStartup(Integer.parseInt(parser.http()));
try {
- instance.container.start(Arrays.asList("-Dopenejb.system.apps=true", "-Dtomee.remote.support=true"), "start", true);
+ instance.container.start(Arrays.asList(
+ "-Dtomee.serialization.class.blacklist=" + System.getProperty("tomee.serialization.class.blacklist"),
+ "-Dopenejb.system.apps=true", "-Dtomee.remote.support=true"),
+ "start", true);
} catch (final Exception e) {
instance.container.destroy();
throw e;
@@ -145,6 +154,11 @@ public class RemoteTomEEEJBContainer extends EJBContainer {
throw (EJBException) e;
}
throw new TomEERemoteEJBContainerException("initialization exception", e);
+ } finally {
+ if (blacklist == null) {
+ System.clearProperty("tomee.serialization.class.blacklist");
+ EjbObjectInputStream.reloadResolverConfig();
+ }
}
}
}