Peter,

Cheers dude, we have never tested that or used it :-))
I'll apply your changes ....

Using instanceof is fine and we are only trying to make 'normal' nethod 
calls fast.  Exceptions are rarer, so need no speed.

Are you not a committer yet?

- Paul

>I'm using the AltrmiAuthentication to authenticate users against the altrmi 
>server. If an ExceptionReply was returned as part of the lookup, a 
>ClassCastException would occur. I have modified lookup() to check the object 
>type of the AltrmiReply to see if it is an ExceptionReply (which would occur 
>if authorization failed), which is the cause of the CCE.
>
>I also noticed that lookup() was the same between both the ClientClass and 
>ServerClass factories so I moved the lookup() implementation into their 
>abstract superclass. 
>
>I'm using instanceOf to check the reply type, rather than checking the code 
>since the existing code did that for problem replies.
>-pete
>
>
>------------------------------------------------------------------------
>
>? docs
>Index: src/java/org/apache/excalibur/altrmi/client/impl/AbstractAltrmiFactory.java
>===================================================================
>RCS file: 
>/home/cvspublic/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/AbstractAltrmiFactory.java,v
>retrieving revision 1.2
>diff -u -r1.2 AbstractAltrmiFactory.java
>--- src/java/org/apache/excalibur/altrmi/client/impl/AbstractAltrmiFactory.java       
> 10 Apr 2002 23:36:58 -0000      1.2
>+++ src/java/org/apache/excalibur/altrmi/client/impl/AbstractAltrmiFactory.java       
> 17 Apr 2002 17:45:27 -0000
>@@ -10,23 +10,24 @@
> 
> 
> 
>+import java.io.IOException;
>+import java.lang.ref.WeakReference;
>+import java.util.HashMap;
>+
> import org.apache.excalibur.altrmi.client.AltrmiFactory;
> import org.apache.excalibur.altrmi.client.AltrmiHostContext;
> import org.apache.excalibur.altrmi.client.AltrmiProxy;
>+import org.apache.excalibur.altrmi.common.AltrmiAuthentication;
> import org.apache.excalibur.altrmi.common.AltrmiConnectionException;
> import org.apache.excalibur.altrmi.common.AltrmiReply;
>+import org.apache.excalibur.altrmi.common.ExceptionReply;
>+import org.apache.excalibur.altrmi.common.ListReply;
>+import org.apache.excalibur.altrmi.common.ListRequest;
>+import org.apache.excalibur.altrmi.common.LookupReply;
> import org.apache.excalibur.altrmi.common.LookupRequest;
>-import org.apache.excalibur.altrmi.common.OpenConnectionRequest;
>-import org.apache.excalibur.altrmi.common.AltrmiInvocationException;
>+import org.apache.excalibur.altrmi.common.NotPublishedReply;
> import org.apache.excalibur.altrmi.common.OpenConnectionReply;
>-import org.apache.excalibur.altrmi.common.ListRequest;
>-import org.apache.excalibur.altrmi.common.ListReply;
>-
>-import java.util.HashMap;
>-import java.util.Vector;
>-
>-import java.io.IOException;
>-import java.lang.ref.WeakReference;
>+import org.apache.excalibur.altrmi.common.OpenConnectionRequest;
> 
> 
> /**
>@@ -34,6 +35,7 @@
>  *
>  *
>  * @author Paul Hammant <a 
>href="mailto:[EMAIL PROTECTED]";>[EMAIL PROTECTED]</a>
>+ * @author Peter Royal <a 
>href="mailto:[EMAIL PROTECTED]";>[EMAIL PROTECTED]</a>
>  * @version $Revision: 1.2 $
>  */
> public abstract class AbstractAltrmiFactory implements AltrmiFactory {
>@@ -95,6 +97,66 @@
> 
>             //TODO
>         }
>+    }
>+
>+    /**
>+     * Method lookup
>+     *
>+     *
>+     * @param publishedServiceName
>+     * @param altrmiAuthentication
>+     *
>+     * @return
>+     *
>+     * @throws AltrmiConnectionException
>+     *
>+     */
>+    public Object lookup(String publishedServiceName, AltrmiAuthentication 
>altrmiAuthentication)
>+            throws AltrmiConnectionException {
>+
>+        AltrmiReply ar =
>+            mHostContext.getInvocationHandler()
>+                .handleInvocation(new LookupRequest(publishedServiceName, 
>altrmiAuthentication, mSession));
>+
>+        if (ar.getReplyCode() >= AltrmiReply.PROBLEMREPLY) {
>+            if (ar instanceof NotPublishedReply) {
>+                throw new AltrmiConnectionException("Service " + publishedServiceName
>+                                                    + " not published");
>+            } else if (ar instanceof ExceptionReply) {
>+                ExceptionReply er = (ExceptionReply) ar;
>+
>+                throw (AltrmiConnectionException) er.getReplyException();
>+            } else {
>+                throw new AltrmiConnectionException("Problem doing lookup on 
>service");
>+            }
>+        } else if (ar instanceof ExceptionReply) {
>+            ExceptionReply er = (ExceptionReply) ar;
>+            Throwable t = er.getReplyException();
>+
>+            if (t instanceof AltrmiConnectionException) {
>+                throw (AltrmiConnectionException) t;
>+            } else if (t instanceof Error) {
>+                throw (Error) t;
>+            } else if (t instanceof RuntimeException) {
>+                throw (RuntimeException) t;
>+            } else {
>+                throw new AltrmiConnectionException("Problem doing lookup on service 
>[exception: "
>+                                                    + t.getMessage() + "]");
>+            }
>+        } else if (!(ar instanceof LookupReply)) {
>+            throw new UnsupportedOperationException("Unexpected reply to lookup 
>[reply: " + ar + "]");
>+        }
>+
>+        LookupReply lr = (LookupReply) ar;
>+        DefaultProxyHelper baseObj = new DefaultProxyHelper(this,
>+                                                        
>mHostContext.getInvocationHandler(),
>+                                                        publishedServiceName, "Main",
>+                                                        lr.getReferenceID(), 
>mSession);
>+        Object retVal = getInstance(publishedServiceName, "Main", baseObj, 
>isBeanOnly());
>+
>+        baseObj.registerImplObject(retVal);
>+
>+        return retVal;
>     }
> 
>     protected abstract Class getFacadeClass(String publishedServiceName, String 
>objectName, boolean beanOnly) throws AltrmiConnectionException, 
>ClassNotFoundException;
>Index: src/java/org/apache/excalibur/altrmi/client/impl/ClientClassAltrmiFactory.java
>===================================================================
>RCS file: 
>/home/cvspublic/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/ClientClassAltrmiFactory.java,v
>retrieving revision 1.2
>diff -u -r1.2 ClientClassAltrmiFactory.java
>--- src/java/org/apache/excalibur/altrmi/client/impl/ClientClassAltrmiFactory.java    
> 10 Apr 2002 23:36:58 -0000      1.2
>+++ src/java/org/apache/excalibur/altrmi/client/impl/ClientClassAltrmiFactory.java    
> 17 Apr 2002 17:45:27 -0000
>@@ -10,19 +10,11 @@
> 
> 
> 
>-import org.apache.excalibur.altrmi.client.AltrmiFactory;
>-import org.apache.excalibur.altrmi.client.AltrmiHostContext;
>-import org.apache.excalibur.altrmi.common.AltrmiConnectionException;
>-import org.apache.excalibur.altrmi.common.LookupReply;
>-import org.apache.excalibur.altrmi.common.LookupRequest;
>-import org.apache.excalibur.altrmi.common.AltrmiReply;
>-import org.apache.excalibur.altrmi.common.NotPublishedReply;
>-import org.apache.excalibur.altrmi.common.AltrmiAuthentication;
>-import org.apache.excalibur.altrmi.common.ExceptionReply;
>-
> import java.lang.reflect.Constructor;
> import java.lang.reflect.InvocationTargetException;
> 
>+import org.apache.excalibur.altrmi.common.AltrmiConnectionException;
>+
> 
> /**
>  * Class ClientClassAltrmiFactory
>@@ -48,49 +40,6 @@
>   //      super(beanOnly, classLoader);
>     //}
> 
>-    /**
>-     * Method lookup
>-     *
>-     *
>-     * @param publishedServiceName
>-     * @param altrmiAuthentication
>-     *
>-     * @return
>-     *
>-     * @throws AltrmiConnectionException
>-     *
>-     */
>-    public Object lookup(String publishedServiceName, AltrmiAuthentication 
>altrmiAuthentication)
>-            throws AltrmiConnectionException {
>-
>-        AltrmiReply ar =
>-            mHostContext.getInvocationHandler()
>-                .handleInvocation(new LookupRequest(publishedServiceName, 
>altrmiAuthentication, mSession));
>-
>-        if (ar.getReplyCode() >= AltrmiReply.PROBLEMREPLY) {
>-            if (ar instanceof NotPublishedReply) {
>-                throw new AltrmiConnectionException("Service " + publishedServiceName
>-                                                    + " not published");
>-            } else if (ar instanceof ExceptionReply) {
>-                ExceptionReply er = (ExceptionReply) ar;
>-
>-                throw (AltrmiConnectionException) er.getReplyException();
>-            } else {
>-                throw new AltrmiConnectionException("Problem doing lookup on 
>service");
>-            }
>-        }
>-
>-        LookupReply lr = (LookupReply) ar;
>-        DefaultProxyHelper baseObj = new DefaultProxyHelper(this,
>-                                                        
>mHostContext.getInvocationHandler(),
>-                                                        publishedServiceName, "Main",
>-                                                        lr.getReferenceID(), 
>mSession);
>-        Object retVal = getInstance(publishedServiceName, "Main", baseObj, 
>isBeanOnly());
>-
>-        baseObj.registerImplObject(retVal);
>-
>-        return retVal;
>-    }
> 
>     protected Class getFacadeClass(String publishedServiceName, String objectName, 
>boolean beanOnly) throws AltrmiConnectionException, ClassNotFoundException {
>         String code = "2";
>Index: src/java/org/apache/excalibur/altrmi/client/impl/ServerClassAltrmiFactory.java
>===================================================================
>RCS file: 
>/home/cvspublic/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/ServerClassAltrmiFactory.java,v
>retrieving revision 1.3
>diff -u -r1.3 ServerClassAltrmiFactory.java
>--- src/java/org/apache/excalibur/altrmi/client/impl/ServerClassAltrmiFactory.java    
> 10 Apr 2002 23:36:58 -0000      1.3
>+++ src/java/org/apache/excalibur/altrmi/client/impl/ServerClassAltrmiFactory.java    
> 17 Apr 2002 17:45:28 -0000
>@@ -10,25 +10,17 @@
> 
> 
> 
>-import org.apache.excalibur.altrmi.client.AltrmiFactory;
>-import org.apache.excalibur.altrmi.client.AltrmiHostContext;
>-import org.apache.excalibur.altrmi.common.ClassReply;
>+import java.lang.reflect.Constructor;
>+import java.lang.reflect.InvocationTargetException;
>+import java.util.HashMap;
>+
> import org.apache.excalibur.altrmi.common.AltrmiConnectionException;
>+import org.apache.excalibur.altrmi.common.AltrmiReply;
>+import org.apache.excalibur.altrmi.common.ClassReply;
> import org.apache.excalibur.altrmi.common.ClassRequest;
>+import org.apache.excalibur.altrmi.common.ClassRetrievalFailedReply;
> import org.apache.excalibur.altrmi.common.NotPublishedException;
>-import org.apache.excalibur.altrmi.common.LookupReply;
>-import org.apache.excalibur.altrmi.common.LookupRequest;
>-import org.apache.excalibur.altrmi.common.AltrmiReply;
>-import org.apache.excalibur.altrmi.common.NotPublishedReply;
> import org.apache.excalibur.altrmi.common.RequestFailedReply;
>-import org.apache.excalibur.altrmi.common.AltrmiAuthentication;
>-import org.apache.excalibur.altrmi.common.ExceptionReply;
>-import org.apache.excalibur.altrmi.common.ClassRetrievalFailedReply;
>-
>-import java.util.HashMap;
>-
>-import java.lang.reflect.Constructor;
>-import java.lang.reflect.InvocationTargetException;
> 
> 
> /**
>@@ -54,51 +46,6 @@
>         super(beanOnly);
>     }
> 
>-
>-    /**
>-     * Method lookup
>-     *
>-     *
>-     * @param publishedServiceName
>-     * @param altrmiAuthentication
>-     *
>-     * @return
>-     *
>-     * @throws AltrmiConnectionException
>-     *
>-     */
>-    public Object lookup(String publishedServiceName, AltrmiAuthentication 
>altrmiAuthentication)
>-            throws AltrmiConnectionException {
>-
>-        AltrmiReply ar =
>-            mHostContext.getInvocationHandler()
>-                .handleInvocation(new LookupRequest(publishedServiceName, 
>altrmiAuthentication,
>-                                                    mSession));
>-
>-        if (ar.getReplyCode() >= AltrmiReply.PROBLEMREPLY) {
>-            if (ar instanceof NotPublishedReply) {
>-                throw new AltrmiConnectionException("Service " + publishedServiceName
>-                                                    + " not published");
>-            } else if (ar instanceof ExceptionReply) {
>-                ExceptionReply er = (ExceptionReply) ar;
>-
>-                throw (AltrmiConnectionException) er.getReplyException();
>-            } else {
>-                throw new AltrmiConnectionException("Problem doing lookup on 
>service");
>-            }
>-        }
>-
>-        LookupReply lr = (LookupReply) ar;
>-        DefaultProxyHelper baseObj = new DefaultProxyHelper(this,
>-                                                        
>mHostContext.getInvocationHandler(),
>-                                                        publishedServiceName, "Main",
>-                                                        lr.getReferenceID(), 
>mSession);
>-        Object retVal = getInstance(publishedServiceName, "Main", baseObj, 
>isBeanOnly());
>-
>-        baseObj.registerImplObject(retVal);
>-
>-        return retVal;
>-    }
> 
>     protected Class getFacadeClass(String publishedServiceName, String objectName, 
>boolean beanOnly) throws AltrmiConnectionException, ClassNotFoundException{
> 
>
>
>------------------------------------------------------------------------
>
>--
>To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
>For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>




--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to