You need to include a GBeanTwo reference in the GBeanOne gbean info and in the plans, for gbean one assign it to the instance of gbean two.

Also you need to either put both gbeans in one plan (the easy way) or have the gbean one plan depend on the gbean two plan (the hard way).

Studying the geronimo gbeans and plans may be more informative than words.

thanks
david jencks

On Jun 24, 2007, at 7:05 PM, Ajay Panagariya wrote:

Hi,

I'm trying to get two GBeans to talk with eachother. This is the place I got most of my information from...:
http://cwiki.apache.org/GMOxDEV/gbeansarticle1.html
Some of my code below draws on examples provided in a sample zip file available on the site, which I was unable to compile.


As I understand it, two GBeans can be made to talk to eachother through an interface.

So, in my code....
GBeantwo implements an interface(called MyInterface.java) with a single method called 'doit()'

I would like GBeanone to be able to call doit(). In the toy example I'm trying to construct for myself, I deploy GBeantwo first (because Gbeanone has dependency on GBeantwo).


Here is the code for GBeantwo:


public class GBeantwo implements MyInterface {

    public static final GBeanInfo GBEAN_INFO;
    private final ObjectName objectName;


    static {
GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder ("GBeantwo", GBeantwo.class);

        // attributes
        infoBuilder.addAttribute("objectName", String.class, false);
        //interfaces
        infoBuilder.addInterface(MyInterface.class);
        // constructor
        infoBuilder.setConstructor(new String[]{"objectName"});

        GBEAN_INFO = infoBuilder.getBeanInfo();
    }

    public GBeantwo(String objectName){
        this.objectName = ObjectNameUtil.getObjectName(objectName);
    }


    public static GBeanInfo getGBeanInfo() {
        return GBEAN_INFO;
    }


    public void doit(){
        System.out.println("[GBean2] inside doit()");
        //        Calc.add(2,3);
    }

}




Here is the code for GBeanone:

public class GBeanone{

    public static final GBeanInfo GBEAN_INFO;
    private final ObjectName objectName;
    private final MyInterface myInterface;


    static {
GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder ("GBeanone", GBeanone.class);

        // attributes
        infoBuilder.addAttribute("objectName", String.class, false);
        //interfaces
        infoBuilder.addReference("MyInterface",MyInterface.class );
        // constructor
infoBuilder.setConstructor(new String[] {"objectName","MyInterface"});

        GBEAN_INFO = infoBuilder.getBeanInfo();
    }

    public GBeanone(String objectName,MyInterface myInterface) {

        this.objectName = ObjectNameUtil.getObjectName(objectName);
        this.myInterface = myInterface;
        myInterface.doit();
    }


    public static GBeanInfo getGBeanInfo() {
        return GBEAN_INFO;
    }

}



Here is the code for MyInterface interface:

public interface MyInterface {
    public void doit();
}



And these are the individual deployment plans:

For GBeanone:

<module xmlns="http://geronimo.apache.org/xml/ns/deployment-1.2";>
  <!--The SharedLib Service-->
  <environment>
    <moduleId>
      <groupId>example1.talking</groupId>
      <artifactId>gbeanone</artifactId>
      <version>2.0-SNAPSHOT</version>
      <type>car</type>
    </moduleId>
    <dependencies>

    </dependencies>
    <hidden-classes/>
    <non-overridable-classes/>
  </environment>
  <gbean name="GBeanOne" class=" example1.talking.GBeanone">
  </gbean>
</module>


For GBeantwo:

<module xmlns="http://geronimo.apache.org/xml/ns/deployment-1.2 ">
  <!--The SharedLib Service-->
  <environment>
    <moduleId>
      <groupId>example1.talking</groupId>
      <artifactId>gbeantwo</artifactId>
      <version> 2.0-SNAPSHOT</version>
      <type>car</type>
    </moduleId>
    <dependencies>

    </dependencies>
    <hidden-classes/>
    <non-overridable-classes/>
  </environment>
  <gbean name="GBeanTwo" class="example1.talking.GBeantwo">
  </gbean>
</module>





GBeantwo deploys with no problem. But when I deploy GBeanone, the MyInterface.doit() call causes the following to show up on the console:


$ target/geronimo-tomcat6-jee5-2.0-SNAPSHOT/bin/deploy.bat deploy gbean1.jar example1/talking/gbeanone-plan.xml
Using GERONIMO_BASE:   C:\g\target\geronimo- tomcat6-jee5-2.0-SNAPSHOT
Using GERONIMO_HOME:   C:\g\target\geronimo-tomcat6-jee5-2.0-SNAPSHOT
Using GERONIMO_TMPDIR: var\temp
Using JRE_HOME:        C:\Program Files\Java\jdk1.5.0_12\jre
org.apache.geronimo.kernel.config.LifecycleException : start of example1.talking/gbeanone/2.0-SNAPSHOT/car failed at org.apache.geronimo.kernel.config.SimpleConfigurationManager.startConf iguration(SimpleConfigurationManager.java:547) at org.apache.geronimo.kernel.config.SimpleConfigurationManager.startConf iguration (SimpleConfigurationManager.java:511) at org.apache.geronimo.kernel.config.SimpleConfigurationManager$ $FastClassByCGLIB$$ce77a924.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:127) at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke (GBeanInstance.java:863) at org.apache.geronimo.kernel.basic.BasicKernel.invoke (BasicKernel.java:239) at org.apache.geronimo.kernel.KernelGBean.invoke (KernelGBean.java:342) at org.apache.geronimo.kernel.KernelGBean$$FastClassByCGLIB$ $1cccefc9.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:127) at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke (GBeanInstance.java:863) at org.apache.geronimo.kernel.basic.BasicKernel.invoke (BasicKernel.java:239) at org.apache.geronimo.system.jmx.MBeanGBeanBridge.invoke (MBeanGBeanBridge.java:168) at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke (DynamicMetaDataImpl.java:213) at com.sun.jmx.mbeanserver.MetaDataImpl.invoke (MetaDataImpl.java:220) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke (DefaultMBeanServerInterceptor.java:815) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke (JmxMBeanServer.java:784) at javax.management.remote.rmi.RMIConnectionImpl.doOperation (RMIConnectionImpl.java:1410) at javax.management.remote.rmi.RMIConnectionImpl.access$100 (RMIConnectionImpl.java:81) at javax.management.remote.rmi.RMIConnectionImpl $PrivilegedOperation.run (RMIConnectionImpl.java:1247)
        at java.security.AccessController.doPrivileged(Native Method)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation (RMIConnectionImpl.java:1350) at javax.management.remote.rmi.RMIConnectionImpl.invoke (RMIConnectionImpl.java:784) at sun.reflect.GeneratedMethodAccessor115.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java :25)
        at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch (UnicastServerRef.java:294)
        at sun.rmi.transport.Transport$1.run(Transport.java:153)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages (TCPTransport.java :466) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run (TCPTransport.java:707)
        at java.lang.Thread.run(Thread.java:595)
Caused by: org.apache.geronimo.kernel.config.InvalidConfigException : Unknown start exception at org.apache.geronimo.kernel.config.ConfigurationUtil.startConfiguration GBeans(ConfigurationUtil.java:508) at org.apache.geronimo.kernel.config.KernelConfigurationManager.start (KernelConfigurationManager.java:187) at org.apache.geronimo.kernel.config.SimpleConfigurationManager.startConf iguration(SimpleConfigurationManager.java:530)
        ... 35 more
Caused by: org.apache.geronimo.gbean.InvalidConfigurationException : Configuration example1.talking/gbeanone/2.0-SNAPSHOT/car failed to
start due to the following reasons:
The service ServiceModule=example1.talking/gbeanone/2.0-SNAPSHOT/ car,j2eeType=GBean,name=GBeanOne did not start for an unknown reason


at org.apache.geronimo.kernel.config.ConfigurationUtil.startConfiguration GBeans(ConfigurationUtil.java:471)
        ... 37 more
    Error: Operation failed: start of
    example1.talking/gbeanone/2.0-SNAPSHOT/car failed

        Unknown start exception

Configuration example1.talking/gbeanone/2.0-SNAPSHOT/car failed to
    start due to the following reasons:

      The service
ServiceModule=example1.talking /gbeanone/2.0-SNAPSHOT/ car,j2eeType=GBean,name=GBeanOne
    did not start for an unknown reason




And the following shows up in the geronimo logfile:

21:24:45,718 INFO [DirectoryMonitor] Hot deployer notified that an artifact was removed: example1.talking/gbeanone/2.0-SNAPSHOT/car 21:25:42,062 ERROR [GBeanInstanceState] Error while starting; GBean is now in the FAILED state: abstractName="example1.talking/gbeanone/ 2.0-SNAPSHOT/car?ServiceModule=example1.talking /gbeanone/2.0- SNAPSHOT/car,j2eeType=GBean,name=GBeanOne"
java.lang.NullPointerException
    at example1.talking.GBeanone.<init>(GBeanone.java:43)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java :27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at org.apache.geronimo.gbean.runtime.GBeanInstance.createInstance (GBeanInstance.java:944) at org.apache.geronimo.gbean.runtime.GBeanInstanceState.attemptFullStart (GBeanInstanceState.java:268) at org.apache.geronimo.gbean.runtime.GBeanInstanceState.start (GBeanInstanceState.java:102) at org.apache.geronimo.gbean.runtime.GBeanInstanceState.startRecursive (GBeanInstanceState.java :124) at org.apache.geronimo.gbean.runtime.GBeanInstance.startRecursive (GBeanInstance.java:551) at org.apache.geronimo.kernel.basic.BasicKernel.startRecursiveGBean (BasicKernel.java:379) at org.apache.geronimo.kernel.config.ConfigurationUtil.startConfiguration GBeans (ConfigurationUtil.java:442) at org.apache.geronimo.kernel.config.KernelConfigurationManager.start (KernelConfigurationManager.java:187) at org.apache.geronimo.kernel.config.SimpleConfigurationManager.startConf iguration (SimpleConfigurationManager.java:530) at org.apache.geronimo.kernel.config.SimpleConfigurationManager.startConf iguration(SimpleConfigurationManager.java:511) at org.apache.geronimo.kernel.config.SimpleConfigurationManager$ $FastClassByCGLIB$$ce77a924.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:127) at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke (GBeanInstance.java:863) at org.apache.geronimo.kernel.basic.BasicKernel.invoke (BasicKernel.java:239) at org.apache.geronimo.kernel.KernelGBean.invoke (KernelGBean.java:342) at org.apache.geronimo.kernel.KernelGBean$$FastClassByCGLIB$ $1cccefc9.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:127) at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke (GBeanInstance.java:863) at org.apache.geronimo.kernel.basic.BasicKernel.invoke (BasicKernel.java:239) at org.apache.geronimo.system.jmx.MBeanGBeanBridge.invoke (MBeanGBeanBridge.java:168) at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke (DynamicMetaDataImpl.java:213) at com.sun.jmx.mbeanserver.MetaDataImpl.invoke (MetaDataImpl.java:220) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke (DefaultMBeanServerInterceptor.java:815) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke (JmxMBeanServer.java:784) at javax.management.remote.rmi.RMIConnectionImpl.doOperation (RMIConnectionImpl.java:1410) at javax.management.remote.rmi.RMIConnectionImpl.access$100 (RMIConnectionImpl.java:81) at javax.management.remote.rmi.RMIConnectionImpl $PrivilegedOperation.run (RMIConnectionImpl.java:1247)
    at java.security.AccessController.doPrivileged(Native Method)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation (RMIConnectionImpl.java:1350) at javax.management.remote.rmi.RMIConnectionImpl.invoke (RMIConnectionImpl.java:784)
    at sun.reflect.GeneratedMethodAccessor115.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke (Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch (UnicastServerRef.java:294)
    at sun.rmi.transport.Transport$1.run(Transport.java:153)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages (TCPTransport.java:466) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run ( TCPTransport.java:707)
    at java.lang.Thread.run(Thread.java:595)


Does anything look obviously wrong in my GBeans or deployment plans, or is there a better way for two GBeans to communicate with eachother?

-Ajay



Reply via email to