org.apache.openejb.client.proxy.ProxyManager Maven / Gradle / Ivy
/**
* 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.client.proxy;
import org.apache.openejb.client.ClientRuntimeException;
import java.util.Properties;
public class ProxyManager {
private static final ProxyFactory defaultFactory;
private static String defaultFactoryName;
static {
final String version;
final Class factory;
try {
version = System.getProperty("java.vm.version");
} catch (Exception e) {
throw new ClientRuntimeException("Unable to determine the version of your VM. No ProxyFactory Can be installed");
}
final ClassLoader cl = getContextClassLoader();
if (version.startsWith("1.1")) {
throw new ClientRuntimeException("This VM version is not supported: " + version);
} else if (version.startsWith("1.2")) {
defaultFactoryName = "JDK 1.2 ProxyFactory";
try {
Class.forName("org.opentools.proxies.Proxy", true, cl);
} catch (Exception e) {
throw new ClientRuntimeException("No ProxyFactory Can be installed. Unable to load the class org.opentools.proxies.Proxy. This class is needed for generating proxies in JDK 1.2 VMs.");
}
try {
factory = Class.forName("org.apache.openejb.client.proxy.Jdk12ProxyFactory", true, cl);
} catch (Exception e) {
throw new ClientRuntimeException("No ProxyFactory Can be installed. Unable to load the class org.apache.openejb.client.proxy.Jdk12ProxyFactory.");
}
} else {
defaultFactoryName = "JDK 1.3 ProxyFactory";
try {
factory = Class.forName("org.apache.openejb.client.proxy.Jdk13ProxyFactory", true, cl);
} catch (Exception e) {
throw new ClientRuntimeException("No ProxyFactory Can be installed. Unable to load the class org.apache.openejb.client.proxy.Jdk13ProxyFactory.");
}
}
try {
defaultFactory = (ProxyFactory) factory.newInstance();
defaultFactory.init(new Properties());
} catch (Exception e) {
throw new ClientRuntimeException("No ProxyFactory Can be installed. Unable to load the class org.apache.openejb.client.proxy.Jdk13ProxyFactory.");
}
}
public static ProxyFactory getDefaultFactory() {
return defaultFactory;
}
public static String getDefaultFactoryName() {
return defaultFactoryName;
}
public static InvocationHandler getInvocationHandler(final Object proxy) {
return defaultFactory.getInvocationHandler(proxy);
}
public static Object setInvocationHandler(final Object proxy, final InvocationHandler handler) {
return defaultFactory.setInvocationHandler(proxy, handler);
}
public static Class getProxyClass(final Class interfaceType) throws IllegalAccessException {
return getProxyClass(new Class[]{interfaceType});
}
public static Class getProxyClass(final Class[] interfaces) throws IllegalAccessException {
return defaultFactory.getProxyClass(interfaces);
}
public static Object newProxyInstance(final Class interfaceType, final InvocationHandler h) throws IllegalAccessException {
return newProxyInstance(new Class[]{interfaceType}, h);
}
public static Object newProxyInstance(final Class[] interfaces, final InvocationHandler h) throws IllegalAccessException {
return defaultFactory.newProxyInstance(interfaces, h);
}
public static boolean isProxyClass(final Class cl) {
return defaultFactory.isProxyClass(cl);
}
public static Object newProxyInstance(final Class proxyClass) throws IllegalAccessException {
return defaultFactory.newProxyInstance(proxyClass);
}
public static ClassLoader getContextClassLoader() {
return (ClassLoader) java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {
@Override
public Object run() {
return Thread.currentThread().getContextClassLoader();
}
}
);
}
}