geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ted Kirby (JIRA)" <...@geronimo.apache.org>
Subject [jira] Commented: (GERONIMO-2120) Can't have ejb references outside current config. ClassCastException on org.openejb.proxy.ProxyInfo
Date Wed, 14 Jun 2006 21:34:30 GMT
    [ http://issues.apache.org/jira/browse/GERONIMO-2120?page=comments#action_12416261 ] 

Ted Kirby commented on GERONIMO-2120:
-------------------------------------

I would prefer some use of reflection, to keep in as much checking as possible.

I have successfully tested and run with the following code:

       Object proxyInfoObject = gbeanData.getAttribute("proxyInfo");
        
        if (proxyInfoObject == null) {
            throw new IllegalStateException("BUG! no proxy info found in gbeanData: " + gbeanData);
        }
        ProxyInfo proxyInfo = null;
        String proxyHomeName = null;
        String proxyRemoteName = null;
        try {
            proxyInfo = (ProxyInfo) proxyInfoObject;
            proxyHomeName = proxyInfo.getHomeInterface().getName();
            proxyRemoteName = proxyInfo.getRemoteInterface().getName();
        } catch (java.lang.ClassCastException e) {
            if (ProxyInfo.class.getName().equals(proxyInfoObject.getClass().getName())) {
                try {
                    Class proxyInfoClass = proxyInfoObject.getClass();
                    Method[] methods = proxyInfoClass.getMethods();
                    Method getHomeInterface = proxyInfoClass.getMethod("getHomeInterface",
  null);
                    if (getHomeInterface != null) {
                        Class proxyHomeClass = (Class) getHomeInterface.invoke(proxyInfoObject,
null);
                        proxyHomeName = proxyHomeClass.getName();
                    }
                    Method getRemoteInterface = proxyInfoClass.getMethod("getRemoteInterface",
  null);
                    if (getRemoteInterface != null) {
                        Class proxyRemoteClass = (Class) getRemoteInterface.invoke(proxyInfoObject,
null);
                        proxyRemoteName = proxyRemoteClass.getName();
                    }                    
                } catch(Exception ex) {                    
                }
            } else {
                throw e;
            }            
        }
        
        if (!home.equals(proxyHomeName) || !remote.equals(proxyRemoteName)) {
            throw new DeploymentException("Reference interfaces do not match bean interfaces:\n"
+
                    "reference home: " + home + "\n" +
                    "ejb home: " + proxyHomeName + "\n" +
                    "reference remote: " + remote + "\n" +
                    "ejb remote: " + proxyRemoteName);
        }

It is a bit verbose and can be compressed, but that is how I developed, debugged and got it
running.


> Can't have ejb references outside current config.  ClassCastException on org.openejb.proxy.ProxyInfo
> ----------------------------------------------------------------------------------------------------
>
>          Key: GERONIMO-2120
>          URL: http://issues.apache.org/jira/browse/GERONIMO-2120
>      Project: Geronimo
>         Type: Bug
>     Security: public(Regular issues) 
>   Components: deployment, OpenEJB
>     Versions: 1.1
>  Environment: Win XP, Intel, Sun JDK 142
>     Reporter: Ted Kirby

>
> See http://mail-archives.apache.org/mod_mbox/geronimo-user/200606.mbox/%3c2E3C762A-A857-497F-9000-A7173EB177CC@yahoo.com%3e.
> I deploy (or distribute) a jar with an ejb, then deploy (or distribute) a war that references
the ejb, and get:
> Error: Operation failed: java.lang.ClassCastException
> with this server.log entry:
> 10:51:39,531 ERROR [Deployer] Deployment failed due to 
> java.lang.ClassCastException
> 	at org.openejb.deployment.OpenEJBReferenceBuilder.checkRemoteProxyInfo(OpenEJBReferenceBuilder.java:133)
> 	at org.openejb.deployment.OpenEJBReferenceBuilder.createEJBRemoteRef(OpenEJBReferenceBuilder.java:159)
> 	at org.openejb.deployment.OpenEJBReferenceBuilder$$FastClassByCGLIB$$bfd62c9f.invoke(<generated>)
> 	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
> 	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)
> 	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:122)
> 	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:817)
> 	at org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57)
> 	at org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationInvoker.java:35)
> 	at org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMethodInterceptor.java:96)
> 	at org.apache.geronimo.j2ee.deployment.EJBReferenceBuilder$$EnhancerByCGLIB$$d6cd2b5d.createEJBRemoteRef(<generated>)
> 	at org.apache.geronimo.j2ee.deployment.RefContext.getEJBRemoteRef(RefContext.java:69)
> 	at org.apache.geronimo.naming.deployment.ENCConfigBuilder.addEJBRef(ENCConfigBuilder.java:412)
> 	at org.apache.geronimo.naming.deployment.ENCConfigBuilder.addEJBRefs(ENCConfigBuilder.java:339)
> 	at org.apache.geronimo.naming.deployment.ENCConfigBuilder.buildComponentContext(ENCConfigBuilder.java:731)
> 	at org.apache.geronimo.tomcat.deployment.TomcatModuleBuilder.buildComponentContext(TomcatModuleBuilder.java:458)
> 	at org.apache.geronimo.tomcat.deployment.TomcatModuleBuilder.addGBeans(TomcatModuleBuilder.java:288)
> 	at org.apache.geronimo.tomcat.deployment.TomcatModuleBuilder$$FastClassByCGLIB$$6f85ec2c.invoke(<generated>)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message