[jboss-cvs] JBossAS SVN: r110383 - in projects/jboss-jca/trunk/codegenerator/src/main: java/org/jboss/jca/codegenerator/code and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Jan 16 21:19:12 EST 2011


Author: jeff.zhang
Date: 2011-01-16 21:19:11 -0500 (Sun, 16 Jan 2011)
New Revision: 110383

Modified:
   projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/BaseProfile.java
   projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/Definition.java
   projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/Main.java
   projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/code/MbeanImplCodeGen.java
   projects/jboss-jca/trunk/codegenerator/src/main/resources/codegenerator.properties
Log:
[JBJCA-457] add mbean lifescycle methods

Modified: projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/BaseProfile.java
===================================================================
--- projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/BaseProfile.java	2011-01-16 19:02:12 UTC (rev 110382)
+++ projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/BaseProfile.java	2011-01-17 02:19:11 UTC (rev 110383)
@@ -62,7 +62,8 @@
       generateRaCode(def);
       generateOutboundCode(def);
       generateInboundCode(def);
-      generateMBeanCode(def);
+      if (def.isGenMbean() && !def.isUseCciConnection())
+         generateMBeanCode(def);
       
       generateTestCode(def);
 

Modified: projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/Definition.java
===================================================================
--- projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/Definition.java	2011-01-16 19:02:12 UTC (rev 110382)
+++ projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/Definition.java	2011-01-17 02:19:11 UTC (rev 110383)
@@ -155,10 +155,13 @@
 
    /** MBean test interface  */
    @XmlElement(name = "MBeanInterface")
-   private String mbeanInterfaceClass = "TestMBean";
+   private String mbeanInterfaceClass;
    /** MBean test impl  */
    @XmlElement(name = "MBeanImpl")
-   private String mbeanImplClass = "Test";
+   private String mbeanImplClass;
+   /** generate MBean or not  */
+   @XmlElement(name = "GenMBean")
+   private boolean genMbean = true;
 
    /**
     * Set the version.
@@ -961,8 +964,13 @@
     */
    public String getMbeanInterfaceClass()
    {
+      if (mbeanInterfaceClass == null || mbeanInterfaceClass.equals(""))
+      {
+         mbeanInterfaceClass =  getDefaultValue() + "MBean";
+      }
       return mbeanInterfaceClass;
-   }   
+   } 
+   
    /**
     * Get the mbeanImplClass.
     * 
@@ -970,6 +978,30 @@
     */
    public String getMbeanImplClass()
    {
+      if (mbeanImplClass == null || mbeanImplClass.equals(""))
+      {
+         mbeanImplClass =  getDefaultValue() + "MBeanImpl";
+      }
       return mbeanImplClass;
    }
+   
+   /**
+    * Get the genMbean.
+    * 
+    * @return the genMbean.
+    */
+   public boolean isGenMbean()
+   {
+      return genMbean;
+   }
+
+   /**
+    * Set the genMbean.
+    * 
+    * @param genMbean The genMbean to set.
+    */
+   public void setGenMbean(boolean genMbean)
+   {
+      this.genMbean = genMbean;
+   }
 }

Modified: projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/Main.java
===================================================================
--- projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/Main.java	2011-01-16 19:02:12 UTC (rev 110382)
+++ projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/Main.java	2011-01-17 02:19:11 UTC (rev 110383)
@@ -419,6 +419,22 @@
             def.setActivationClass(actiClassName);
       }
       
+      if (!def.isUseCciConnection())
+      {
+         //generate mbean classes
+         System.out.print(rb.getString("gen.mbean") + "[Y]: ");
+         String genMbean = in.readLine();
+         if (genMbean == null)
+            def.setGenMbean(true);
+         else
+         {
+            if (genMbean.equals("N") || genMbean.equals("n") || genMbean.equals("No"))
+               def.setGenMbean(false);
+            else
+               def.setGenMbean(true);
+         }
+      }
+      
       //build environment
       System.out.print(rb.getString("build.env"));
       System.out.print("[" + def.getBuild() + "]: ");

Modified: projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/code/MbeanImplCodeGen.java
===================================================================
--- projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/code/MbeanImplCodeGen.java	2011-01-16 19:02:12 UTC (rev 110382)
+++ projects/jboss-jca/trunk/codegenerator/src/main/java/org/jboss/jca/codegenerator/code/MbeanImplCodeGen.java	2011-01-17 02:19:11 UTC (rev 110383)
@@ -50,14 +50,155 @@
       out.write("public class " + getClassName(def) + " implements " + def.getMbeanInterfaceClass());
       writeLeftCurlyBracket(out, 0);
 
+      writeVars(def, out, indent);
+      writeEol(out);
+      writeMBeanLifecycle(def, out, indent);
+      writeEol(out);
+      writeMethods(def, out, indent);
+      writeEol(out);
+      writeGetConnection(def, out, indent);
+
+      writeRightCurlyBracket(out, 0);
+   }
+
+   /**
+    * Output Constructor
+    * @param def definition
+    * @param out Writer
+    * @param indent space number
+    * @throws IOException ioException
+    */
+   void writeConstructor(Definition def, Writer out, int indent) throws IOException
+   {
       writeIndent(out, indent);
+      out.write("/**");
+      writeEol(out);
+      writeIndent(out, indent);
+      out.write(" * Default constructor");
+      writeEol(out);
+      writeIndent(out, indent);
+      out.write(" */");
+      writeEol(out);
+      
+      //constructor
+      writeIndent(out, indent);
+      out.write("public " + getClassName(def) + "()");
+      writeLeftCurlyBracket(out, indent);
+      
+      writeIndent(out, indent + 1);
+      out.write("this.mbeanServer = null;");
+      writeEol(out);
+      writeIndent(out, indent + 1);
+      out.write("this.objectName = \"" + def.getDefaultValue() + ",class=HelloWorld\";");
+      writeEol(out);
+      writeIndent(out, indent + 1);
+      out.write("this.registered = false;");
+      writeEol(out);
+      writeEol(out);
+      
+      writeRightCurlyBracket(out, indent);
+      writeEol(out);
+   }
+   
+   /**
+    * Output class import
+    * @param def definition
+    * @param out Writer
+    * @throws IOException ioException
+    */
+   @Override
+   public void writeImport(Definition def, Writer out) throws IOException
+   {
+      out.write("package " + def.getRaPackage() + ".mbean;");
+      writeEol(out);
+      writeEol(out);
+      out.write("import javax.management.MBeanServer;");
+      writeEol(out);
+      out.write("import javax.management.NotCompliantMBeanException;");
+      writeEol(out);
+      out.write("import javax.management.ObjectName;");
+      writeEol(out);
+      out.write("import javax.naming.InitialContext;");
+      writeEol(out);
+      writeEol(out);
+
+      out.write("import " + def.getRaPackage() + "." + def.getConnInterfaceClass() + ";");
+      writeEol(out);
+      out.write("import " + def.getRaPackage() + "." + def.getCfInterfaceClass() + ";");
+      writeEol(out);
+      writeEol(out);
+   }
+   
+   /**
+    * get this class name
+    * @param def definition
+    * @return String class name
+    */
+   @Override
+   public String getClassName(Definition def)
+   {
+      return def.getMbeanImplClass();
+   }
+   
+   /**
+    * Output class vars
+    * @param def definition
+    * @param out Writer
+    * @param indent space number
+    * @throws IOException ioException
+    */
+   private void writeVars(Definition def, Writer out, int indent) throws IOException
+   {
+      writeIndent(out, indent);
       out.write("/** JNDI name */");
       writeEol(out);
       writeIndent(out, indent);
       out.write("private static final String JNDI_NAME = \"java:/eis/" + def.getDefaultValue() + "\";");
       writeEol(out);
       writeEol(out);
+      
+      writeIndent(out, indent);
+      out.write("/** MBeanServer instance */");
+      writeEol(out);
+      writeIndent(out, indent);
+      out.write("private MBeanServer mbeanServer;");
+      writeEol(out);
+      writeEol(out);
+      
+      writeIndent(out, indent);
+      out.write("/** Object Name */");
+      writeEol(out);
+      writeIndent(out, indent);
+      out.write("private String objectName;");
+      writeEol(out);
+      writeEol(out);
+      
+      writeIndent(out, indent);
+      out.write("/** The actual ObjectName instance */");
+      writeEol(out);
+      writeIndent(out, indent);
+      out.write("private ObjectName on;");
+      writeEol(out);
+      writeEol(out);
+      
+      writeIndent(out, indent);
+      out.write("/** Registered */");
+      writeEol(out);
+      writeIndent(out, indent);
+      out.write("private boolean registered;");
+      writeEol(out);
+      writeEol(out);
+   }
 
+   /**
+    * Output defined methods
+    * @param def definition
+    * @param out Writer
+    * @param indent space number
+    * @throws IOException ioException
+    */
+   private void writeMethods(Definition def, Writer out, int indent) throws IOException
+   {
       if (def.isDefineMethodInConnection())
       {
          if (def.getMethods().size() > 0)
@@ -148,7 +289,20 @@
 
          writeRightCurlyBracket(out, indent);
       }
+   }
 
+   /**
+    * Output getConnection method
+    * @param def definition
+    * @param out Writer
+    * @param indent space number
+    * @throws IOException ioException
+    */
+   private void writeGetConnection(Definition def, Writer out, int indent) throws IOException
+   {
+      String connInterface = def.getConnInterfaceClass();
+      String cfInterface = def.getCfInterfaceClass();
+      
       writeIndent(out, indent);
       out.write("/**");
       writeEol(out);
@@ -156,24 +310,24 @@
       out.write(" * GetConnection");
       writeEol(out);
       writeIndent(out, indent);
-      out.write(" * @return " + def.getConnInterfaceClass());
+      out.write(" * @return " + connInterface);
       writeEol(out);
       writeIndent(out, indent);
       out.write(" */");
       writeEol(out);
       writeIndent(out, indent);
-      out.write("private " + def.getConnInterfaceClass() + " getConnection() throws Exception");
+      out.write("private " + connInterface + " getConnection() throws Exception");
       writeLeftCurlyBracket(out, indent);
       writeIndent(out, indent + 1);
       
       out.write("InitialContext context = new InitialContext();");
       writeEol(out);
       writeIndent(out, indent + 1);
-      out.write(def.getCfInterfaceClass() + " factory = (" + def.getCfInterfaceClass() + 
+      out.write(cfInterface + " factory = (" + cfInterface + 
          ")context.lookup(JNDI_NAME);");
       writeEol(out);
       writeIndent(out, indent + 1);
-      out.write(def.getConnInterfaceClass() + " conn = factory.getConnection();");
+      out.write(connInterface + " conn = factory.getConnection();");
       writeEol(out);
       writeIndent(out, indent + 1);
       out.write("if (conn == null)");
@@ -186,40 +340,91 @@
       out.write("return conn;");
       
       writeRightCurlyBracket(out, indent);
-      
-      writeRightCurlyBracket(out, 0);
    }
    
    /**
-    * Output class import
+    * Output mbean lifecycle
     * @param def definition
     * @param out Writer
+    * @param indent space number
     * @throws IOException ioException
     */
-   @Override
-   public void writeImport(Definition def, Writer out) throws IOException
+   private void writeMBeanLifecycle(Definition def, Writer out, int indent) throws IOException
    {
-      out.write("package " + def.getRaPackage() + ".mbean;");
+      //setMBeanServer
+      writeIndent(out, indent);
+      out.write("/**");
       writeEol(out);
+      writeIndent(out, indent);
+      out.write(" * Set the MBean server");
       writeEol(out);
-      out.write("import javax.naming.InitialContext;");
+      writeIndent(out, indent);
+      out.write(" * @param v The value");
       writeEol(out);
+      writeIndent(out, indent);
+      out.write(" */");
       writeEol(out);
-      out.write("import " + def.getRaPackage() + "." + def.getConnInterfaceClass() + ";");
+      writeIndent(out, indent);
+      out.write("public void setMBeanServer(MBeanServer v)");
+      writeLeftCurlyBracket(out, indent);
+      writeIndent(out, indent + 1);
+      out.write("mbeanServer = v;");
+      writeRightCurlyBracket(out, indent);
+      
+      //Start
+      writeIndent(out, indent);
+      out.write("/**");
       writeEol(out);
-      out.write("import " + def.getRaPackage() + "." + def.getCfInterfaceClass() + ";");
+      writeIndent(out, indent);
+      out.write(" * Start");
       writeEol(out);
+      writeIndent(out, indent);
+      out.write(" * @exception Throwable Thrown in case of an error");
       writeEol(out);
+      writeIndent(out, indent);
+      out.write(" */");
+      writeEol(out);
+      writeIndent(out, indent);
+      out.write("public void start() throws Throwable");
+      writeLeftCurlyBracket(out, indent);
+      
+      writeIndent(out, indent + 1);
+      out.write("if (mbeanServer == null)");
+      writeEol(out);
+      writeIndent(out, indent + 2);
+      out.write("throw new IllegalArgumentException(\"MBeanServer is null\");");
+      writeEol(out);
+      writeIndent(out, indent + 1);
+      out.write("on = new ObjectName(mbeanServer.getDefaultDomain() + objectName);");
+      writeEol(out);
+      writeIndent(out, indent + 1);
+      out.write("mbeanServer.registerMBean(this, on);");
+      writeEol(out);
+      writeIndent(out, indent + 1);
+      out.write("registered = true;");
+      writeRightCurlyBracket(out, indent);
+
+      //stop
+      writeIndent(out, indent);
+      out.write("/**");
+      writeEol(out);
+      writeIndent(out, indent);
+      out.write(" * Stop");
+      writeEol(out);
+      writeIndent(out, indent);
+      out.write(" * @exception Throwable Thrown in case of an error");
+      writeEol(out);
+      writeIndent(out, indent);
+      out.write(" */");
+      writeEol(out);
+      writeIndent(out, indent);
+      out.write("public void stop() throws Throwable");
+      writeLeftCurlyBracket(out, indent);
+      writeIndent(out, indent + 1);
+      out.write("if (registered)");
+      writeEol(out);
+      writeIndent(out, indent + 2);
+      out.write("mbeanServer.unregisterMBean(on); ");
+      writeRightCurlyBracket(out, indent);
    }
-   
-   /**
-    * get this class name
-    * @param def definition
-    * @return String class name
-    */
-   @Override
-   public String getClassName(Definition def)
-   {
-      return def.getMbeanImplClass();
-   }
 }

Modified: projects/jboss-jca/trunk/codegenerator/src/main/resources/codegenerator.properties
===================================================================
--- projects/jboss-jca/trunk/codegenerator/src/main/resources/codegenerator.properties	2011-01-16 19:02:12 UTC (rev 110382)
+++ projects/jboss-jca/trunk/codegenerator/src/main/resources/codegenerator.properties	2011-01-17 02:19:11 UTC (rev 110383)
@@ -31,5 +31,6 @@
 connection.method.param.type=Parameter type: 
 connection.method.exception=Exception type [enter to quit]: 
 output.dir=Output directory: 
+gen.mbean=Generate MBean test class [Y/Yes/N/No]
 build.env=Build environment [A/Ant/I/Ant+Ivy/M/Maven] 
 code.wrote=Code generated 



More information about the jboss-cvs-commits mailing list