[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