[prev in list] [next in list] [prev in thread] [next in thread]
List: rhq-commits
Subject: [rhq] Branch 'rhq-on-as7' - 2 commits - modules/enterprise
From: jshaughn () fedoraproject ! org (Jay Shaughnessy)
Date: 2012-09-26 18:39:26
Message-ID: 20120926183926.465E6A33AB () fedorahosted ! org
[Download RAW message or body]
modules/enterprise/remoting/cli/pom.xml \
| 2 modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml \
| 2 modules/enterprise/remoting/client-api/src/main/java/org/rhq/enterprise/clientapi/RemoteClient.java \
| 3 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/remote/RemoteSafeInvocationHandler.java \
| 33 ++++++---- 4 files changed, 26 insertions(+), 14 deletions(-)
New commits:
commit 4b56ed9cc3fafecf2c8e7b0b5491e5c35c5ccf37
Author: Jay Shaughnessy <jshaughn at jshaughn.csb>
Date: Wed Sep 26 14:38:01 2012 -0400
Fix issues in the RemoteSafeInvoker for remote clients
- fix JNDI lookups given new JNDI naming for AS7
- this required sending the in fqcn of the remote from the client, which
we previously did not do. Remote clients will need to run on compatible
CLI/version.
- do a better job of validating whether we are invoking a valid remote method
diff --git a/modules/enterprise/remoting/client-api/src/main/java/org/rhq/enterprise/clientapi/RemoteClient.java \
b/modules/enterprise/remoting/client-api/src/main/java/org/rhq/enterprise/clientapi/RemoteClient.java
index af434d2..199dd5c 100644
--- a/modules/enterprise/remoting/client-api/src/main/java/org/rhq/enterprise/clientapi/RemoteClient.java
+++ b/modules/enterprise/remoting/client-api/src/main/java/org/rhq/enterprise/clientapi/RemoteClient.java
@@ -22,7 +22,6 @@ import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.net.URI;
import java.net.URISyntaxException;
-import java.net.URL;
import java.util.HashMap;
import java.util.Map;
@@ -108,7 +107,7 @@ public class RemoteClient implements RhqFacade {
public <T> T remoteInvoke(RhqManager manager, Method method, Class<T> \
expectedReturnType, Object... parameters) throws Throwable {
- String methodSig = manager.beanName() + ":" + method.getName();
+ String methodSig = manager.remote().getName() + ":" + method.getName();
Class<?>[] paramTypes = method.getParameterTypes();
String[] paramSig = new String[paramTypes.length];
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/remote/RemoteSafeInvocationHandler.java \
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/remote/RemoteSafeInvocationHandler.java
index 8d5ca9a..3a435ef 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/remote/RemoteSafeInvocationHandler.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/remote/RemoteSafeInvocationHandler.java
@@ -44,9 +44,7 @@ import \
org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility;
* Although, we execute only locals to bypass the serialization performed by a \
remote invocation. Even
* though this handler is co-located, for remotes, remoting will serialize the \
return data immediately.
* This is bad for us because since we return domain objects we ned to scrub the \
data, removing
- * hibernate proxies (see {@link HibernateDetachUtility}. Additionally, we set our \
serialization
- * strategy for REMOTEAPI, indicating to classes implementing Externalizable that we \
need to serialize
- * all data expected by the remote api (as opposed to say, thin versions for \
agent-server comm). + * hibernate proxies (see {@link HibernateDetachUtility}.
*
* @author Greg Hinkle
* @autor Jay Shaughnessy
@@ -91,12 +89,7 @@ public class RemoteSafeInvocationHandler implements \
ServerInvocationHandler {
methodName = nbi.getMethodName();
String[] methodInfo = methodName.split(":");
-
- // Lookup the remote first, if it doesn't exist exit with error.
- // This prevents remote clients from accessing the locals.
- String jndiName = "rhq/" + methodInfo[0];
- Object target = ic.lookup(jndiName + "/remote");
- target = ic.lookup(jndiName + "/local");
+ Class<?> remoteClass = getClass(methodInfo[0]);
String[] signature = nbi.getSignature();
int signatureLength = signature.length;
@@ -105,9 +98,19 @@ public class RemoteSafeInvocationHandler implements \
ServerInvocationHandler { sig[i] = getClass(signature[i]);
}
+ // make sure the remote method is defined to ensure remote clients don't \
access locals + String jndiName = getRemoteJNDIName(remoteClass);
+ Object target = ic.lookup(jndiName);
Method m = target.getClass().getMethod(methodInfo[1], sig);
+
+ // switch to the local
+ jndiName = getLocalJNDIName(remoteClass);
+ target = ic.lookup(jndiName);
+
+ m = target.getClass().getMethod(methodInfo[1], sig);
result = m.invoke(target, nbi.getParameters());
successful = true;
+
} catch (InvocationTargetException e) {
log.error("Failed to invoke remote request", e);
return new WrappedRemotingException(e.getTargetException());
@@ -142,7 +145,17 @@ public class RemoteSafeInvocationHandler implements \
ServerInvocationHandler { return result;
}
- Class<?> getClass(String name) throws ClassNotFoundException {
+ private static <T> String getLocalJNDIName(Class<?> remoteClass) {
+ return ("java:global/rhq/rhq-enterprise-server-ejb3/" + \
remoteClass.getSimpleName().replace("Remote", "Bean") + + "!" + \
remoteClass.getName().replace("Remote", "Local")); + }
+
+ private static <T> String getRemoteJNDIName(Class<?> remoteClass) {
+ return ("java:global/rhq/rhq-enterprise-server-ejb3/" + \
remoteClass.getSimpleName().replace("Remote", "Bean") + + "!" + \
remoteClass.getName()); + }
+
+ private static Class<?> getClass(String name) throws ClassNotFoundException {
// TODO GH: Doesn't support arrays
if (PRIMITIVE_CLASSES.containsKey(name)) {
return PRIMITIVE_CLASSES.get(name);
commit e8efcfccd5a468269224d02325db0d5da8c1568b
Author: Jay Shaughnessy <jshaughn at jshaughn.csb>
Date: Wed Sep 26 14:35:24 2012 -0400
Make sure CLI now has jboss-logging jar
diff --git a/modules/enterprise/remoting/cli/pom.xml \
b/modules/enterprise/remoting/cli/pom.xml index f8a481e..04c270a 100644
--- a/modules/enterprise/remoting/cli/pom.xml
+++ b/modules/enterprise/remoting/cli/pom.xml
@@ -120,7 +120,7 @@
<property name="getopt.version" value="${getopt.version}" \
/>
<property name="i18nlog.version" \
value="${i18nlog.version}" />
<property name="jboss-common-core.version" \
value="${jboss-common-core.version}" />
- <property name="jboss.version" value="${jboss.version}" \
/> + <property name="jboss-logging.version" \
value="${jboss-logging.version}" />
<property name="jboss-remoting.version" \
value="${jboss-remoting.version}" />
<property name="jboss-javassist.version" \
value="${javassist.version}" />
<property name="jline.version" value="${jline.version}" \
/>
diff --git a/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml \
b/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml index \
83adf26..03166a1 100644
--- a/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml
+++ b/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml
@@ -6,7 +6,6 @@
<property name="bin.home" location="${output.dir}/bin" />
<property name="cli.home" location="${output.dir}/cli" />
<property name="conf.home" location="${output.dir}/conf" />
- <property name="jboss.home" location="${basedir}/target/jboss-${jboss.version}" \
/> <property name="lib.home" location="${output.dir}/lib" />
<property name="samples.home" location="${output.dir}/samples"/>
@@ -58,6 +57,7 @@
<copy file="${settings.localRepository}/org/rhq/rhq-enterprise-server/${project.version}/rhq-enterprise-server-${project.version}-client.jar" \
tofile="${lib.home}/rhq-enterprise-server-${project.version}-client.jar" \
verbose="true" /> <copy \
file="${settings.localRepository}/org/rhq/rhq-enterprise-comm/${project.version}/rhq-enterprise-comm-${project.version}.jar" \
tofile="${lib.home}/rhq-enterprise-comm-${project.version}.jar" verbose="true" /> \
<copy file="${settings.localRepository}/org/jboss/jboss-common-core/${jboss-common-core.version}/jboss-common-core-${jboss-common-core.version}.jar" \
tofile="${lib.home}/jboss-common-core-${jboss-common-core.version}.jar" \
verbose="true" /> + <copy \
file="${settings.localRepository}/org/jboss/logging/jboss-logging/${jboss-logging.version}/jboss-logging-${jboss-logging.version}.jar" \
tofile="${lib.home}/jboss-logging-${jboss-logging.version}.jar" verbose="true" /> \
<copy file="${settings.localRepository}/jboss/jboss-remoting/${jboss-remoting.version}/jboss-remoting-${jboss-remoting.version}.jar" \
tofile="${lib.home}/jboss-remoting-${jboss-remoting.version}.jar" verbose="true" /> \
<copy file="${settings.localRepository}/org/javassist/javassist/${jboss-javassist.version}/javassist-${jboss-javassist.version}.jar" \
tofile="${lib.home}/javassist-${jboss-javassist.version}.jar" verbose="true" /> \
<copy file="${settings.localRepository}/oswego-concurrent/concurrent/${concurrent.version}/concurrent-${concurrent.version}.jar" \
tofile="${lib.home}/concurrent-${concurrent.version}.jar" verbose="true" />
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic