You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ge...@incubator.apache.org on 2004/07/07 04:11:32 UTC

[Apache Geronimo Wiki] Updated: GBeans

   Date: 2004-07-06T19:11:32
   Editor: 220.247.207.122 <>
   Wiki: Apache Geronimo Wiki
   Page: GBeans
   URL: http://wiki.apache.org/geronimo/GBeans

   GBeans add few tips to wiki

Change Log:

------------------------------------------------------------------------------
@@ -1,4 +1,79 @@
-A GBeanMBean is a J2EE Management Managed Object, and is standard base for Geronimo services.
+= GBeans =
+A GBeanMBean is a J2EE Management Managed Object, and is standard base for Geronimo services. GBean is a class or object that Geronimo the container can manage the lifecycle of. So, for example, when you deploy parts into a container you want to start them and stop them, and they have dependencies: Such as 'Bean A' can only start up when 'Bean B' is ready to go because 'Bean B' provides services that 'Bean A' needs. So, GBeans are Geronimo's way of packaging up things are that need to be managed, and can express dependencies. The GBeans architecture lies at the heart of Geronimo's power to enable developers to move or work with their existing J2EE assets, whether Open Source or commercial. 
+
+GBeans are designed to let you take things you have, put a GBean wrapper around them, and use that to bridge the JSR 77 lifecycle requirements which GBeans support). You can take anything lying around and get it to work with GBeans. In addition, the GBeans will let developers bring other existing Open Source Java projects into the Geronimo orbit. 
+
 This wraps one or more target POJOs and exposes the attributes and operations according to a supplied
 GBeanInfo instance.  The GBeanMBean also supports caching of attribute values and invocation results
 which can reduce the number of calls to a target.
+
+ * Gbeans are way of providing managements services to Geronimo
+ * It is implemented on top of the JMX right now but supposes to be independent of JMX. User should be able to use them without knowledge of the JMX. And it can be make independent of GBeans .
+ * The GBean can be converted into the MBean using the GBeanMBean and use the JMX to give the services
+
+== how to find Sample GBeans ==
+
+**search for all the implementetors of the GBeanLifecycle is a good way to **find example** of the GBeans
+and I found the jetty module and the GBeanTest class quite helpful
+
+
+== Creating a GBean like follows ==
+ a. write new GBean
+ a. start/stop .. the GBean
+
+
+== Let us Write a GBean ==
+ * They should implements the GBeanLifecycle interface 
+ * They can have attributes with getters and setters, There are attributes that are final and I think they are standard .. (What is the list of them) e.g. name, Kernel (they can use to get hold of the system info, have a look at the sample GBeans.) There are ordinary attributes .. have getters and setters
+
+ * GBeans can have methods ..
+
+ * each GBean should have GBEAN_INFO attribute (see exapmles)
+{{{
+static {
+GBeanInfoFactory infoFactory = new GBeanInfoFactory("AxisGbean",
+AxisGbean.class);
+//attributes
+infoFactory.addAttribute("Name", String.class, true);
+infoFactory.addAttribute("kernel", Kernel.class, false);
+//operations
+infoFactory.addOperation("echo", new Class[]{String.class});
+
+infoFactory.setConstructor(new String[] {"kernel","Name"});
+GBEAN_INFO = infoFactory.getBeanInfo();
+}
+}}}
+
+ * following two are call back methods there are more 
+{{{
+public void doStart() throws WaitingException, Exception {
+       System.out.println("Axis GBean has started");
+}
+    public void doStop() throws WaitingException, Exception {
+System.out.println("Axis GBean has stoped");
+    }
+}}}
+
+== Run A GBean ==
+Having created a GBean like this to start/stop/set values/invoke operaions
+ and GBean service use code like follows
+{{{
+name = new ObjectName("test:name=AxisGBean");
+kernel = new Kernel("test.kernel", "test");
+kernel.boot();
+ClassLoader cl = getClass().getClassLoader();
+ClassLoader myCl = new URLClassLoader(new URL[0], cl);
+GBeanMBean gbean = new GBeanMBean(AxisGbean.getGBeanInfo(), myCl);
+gbean.setAttribute("Name", "Test");
+
+kernel.loadGBean(name, gbean);
+Kernel.startGBean(name);
+System.out.println(kernel.getMBeanServer().getAttribute(name, "state"));
+System.out.println(kernel.getMBeanServer().invoke(name, "echo", new
+Object[]{"Hello"}, new String[]{String.class.getName()}));
+
+kernel.stopGBean(name);
+kernel.unloadGBean(name)
+}}}
+
+there are more to come :)