[jboss-cvs] JBossAS SVN: r112417 - in projects/jboss-jca/trunk/as: src/main/java/org/jboss/jca/as and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 4 04:18:03 EDT 2011


Author: jeff.zhang
Date: 2011-11-04 04:18:02 -0400 (Fri, 04 Nov 2011)
New Revision: 112417

Added:
   projects/jboss-jca/trunk/as/src/main/java/org/jboss/jca/as/rarinfo/
   projects/jboss-jca/trunk/as/src/main/java/org/jboss/jca/as/rarinfo/Main.java
   projects/jboss-jca/trunk/as/src/main/java/org/jboss/jca/as/rarinfo/package.html
   projects/jboss-jca/trunk/as/src/main/resources/rar-info.bat
   projects/jboss-jca/trunk/as/src/main/resources/rar-info.sh
Modified:
   projects/jboss-jca/trunk/as/.classpath
Log:
[JBJCA-696] RAR info tool, init commit

Modified: projects/jboss-jca/trunk/as/.classpath
===================================================================
--- projects/jboss-jca/trunk/as/.classpath	2011-11-03 19:29:54 UTC (rev 112416)
+++ projects/jboss-jca/trunk/as/.classpath	2011-11-04 08:18:02 UTC (rev 112417)
@@ -12,5 +12,6 @@
 	<classpathentry kind="lib" path="/ironjacamar-parent/lib/test/junit.jar"/>
 	<classpathentry kind="lib" path="/ironjacamar-parent/lib/test/mockito-all.jar"/>
 	<classpathentry kind="lib" path="/ironjacamar-parent/lib/tools/ant.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/ironjacamar-validator"/>
 	<classpathentry kind="output" path="eclipse-target/classes"/>
 </classpath>

Added: projects/jboss-jca/trunk/as/src/main/java/org/jboss/jca/as/rarinfo/Main.java
===================================================================
--- projects/jboss-jca/trunk/as/src/main/java/org/jboss/jca/as/rarinfo/Main.java	                        (rev 0)
+++ projects/jboss-jca/trunk/as/src/main/java/org/jboss/jca/as/rarinfo/Main.java	2011-11-04 08:18:02 UTC (rev 112417)
@@ -0,0 +1,275 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2011, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.jca.as.rarinfo;
+
+import org.jboss.jca.common.api.metadata.ra.AdminObject;
+import org.jboss.jca.common.api.metadata.ra.ConnectionDefinition;
+import org.jboss.jca.common.api.metadata.ra.Connector;
+import org.jboss.jca.common.api.metadata.ra.Connector.Version;
+import org.jboss.jca.common.api.metadata.ra.MessageListener;
+import org.jboss.jca.common.api.metadata.ra.ResourceAdapter;
+import org.jboss.jca.common.api.metadata.ra.ResourceAdapter1516;
+import org.jboss.jca.common.api.metadata.ra.ra10.ResourceAdapter10;
+import org.jboss.jca.common.metadata.ra.RaParser;
+import org.jboss.jca.validator.Validation;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+/**
+ * rar info main class
+ * 
+ * @author Jeff Zhang
+ */
+public class Main
+{
+   /** Exit codes */
+   private static final int SUCCESS = 0;
+   private static final int ERROR = 1;
+   private static final int OTHER = 2;
+   
+   private static final String REPORT_FILE = "file-report.txt";
+   private static final String RAXML_FILE = "META-INF/ra.xml";
+   
+   /**
+    * Main
+    * @param args args 
+    */
+   public static void main(String[] args)
+   {
+      PrintStream out = null;
+      try
+      {
+         if (args.length < 1 && args[0].endsWith("rar"))
+         {
+            usage();
+            System.exit(OTHER);
+         }
+
+         String rarFile = args[0];
+         ZipFile zipFile = new ZipFile(rarFile);
+
+         boolean hasRaXml = false;
+         boolean exsitNativeFile = false;
+         Connector connector = null;
+         Node raNode = null;
+
+         Enumeration zipEntries = zipFile.entries();
+
+         while (zipEntries.hasMoreElements())
+         {
+            ZipEntry ze = (ZipEntry) zipEntries.nextElement();
+            String name = ze.getName();
+            if (name.endsWith(".so") || name.endsWith(".a") || name.endsWith(".dll"))
+               exsitNativeFile = true;
+
+            if (name.equals(RAXML_FILE))
+            {
+               hasRaXml = true;
+               InputStream raIn = zipFile.getInputStream(ze);
+               RaParser parser = new RaParser();
+               connector = parser.parse(raIn);
+               raIn.close();
+               
+               DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+               DocumentBuilder db = dbf.newDocumentBuilder();
+               Document doc = db.parse(new InputSource(zipFile.getInputStream(ze)));
+               NodeList raList = doc.getElementsByTagName("resourceadapter");
+               if (raList != null && raList.getLength() > 0)
+                  raNode = raList.item(0);
+            }
+         }
+
+         if (!hasRaXml)
+         {
+            System.out.println("JCA annotations aren't supported");
+            System.exit(OTHER);
+         }
+         if (connector == null)
+         {
+            System.out.println("can't parse ra.xml");
+            System.exit(OTHER);
+         }
+
+         out = new PrintStream(REPORT_FILE);
+         out.println("Archive:\t" + rarFile);
+         
+         String version;
+         String type = "";
+         ResourceAdapter ra;
+         if (connector.getVersion() == Version.V_10)
+         {
+            version = "1.0";
+            ra = connector.getResourceadapter();
+            type = "OutBound";
+         }
+         else
+         {
+            if (connector.getVersion() == Version.V_15)
+               version = "1.5";
+            else
+               version = "1.6";
+            ResourceAdapter1516 ra1516 = (ResourceAdapter1516)connector.getResourceadapter();
+            ra = ra1516;
+            if (ra1516.getInboundResourceadapter() != null)
+            {
+               if (ra1516.getOutboundResourceadapter() != null)
+                  type = "Bidirect";
+               else
+                  type = "InBound";
+            }
+            else
+            {
+               if (ra1516.getOutboundResourceadapter() != null)
+                  type = "OutBound";
+               else
+               {
+                  out.println("Rar file has problem");
+                  System.exit(ERROR);
+               }
+            }
+         }
+         out.println("JCA version:\t" + version);
+         out.println("Type:\t\t" + type);
+         
+         int systemExitCode = Validation.validate(new File(rarFile).toURI().toURL(), ".");
+         String compliant;
+         if (systemExitCode == SUCCESS)
+            compliant = "Yes";
+         else
+            compliant = "No";
+         out.println("Compliant:\t" + compliant);
+
+         out.print("Native:\t\t");
+         if (exsitNativeFile)
+            out.println("Yes");
+         else
+            out.println("No");
+         
+         if (connector.getVersion() != Version.V_10)
+         {
+            ResourceAdapter1516 ra1516 = (ResourceAdapter1516)ra;
+            out.println();
+            out.println("Resource-adapter:");
+            out.println("  Class: " + ra1516.getResourceadapterClass());
+
+            out.println();
+            out.println("Managed-connection-factory:");
+            if (ra1516.getOutboundResourceadapter() != null)
+            {
+               for (ConnectionDefinition mcf : ra1516.getOutboundResourceadapter().getConnectionDefinitions())
+               {
+                  out.println("  Class: " + mcf.getManagedConnectionFactoryClass());
+               }
+            }
+            
+            out.println();
+            out.println("Admin-object:");
+            for (AdminObject ao : ra1516.getAdminObjects())
+            {
+               out.println("  Class: " + ao.getAdminobjectClass());
+            }
+            
+            out.println();
+            out.println("Activation-spec:");
+            if (ra1516.getInboundResourceadapter() != null && 
+               ra1516.getInboundResourceadapter().getMessageadapter() != null)
+            {
+               for (MessageListener ml : ra1516.getInboundResourceadapter().getMessageadapter().getMessagelisteners())
+               {
+                  out.println("  Class: " + ml.getActivationspec().getActivationspecClass());
+               }
+            }
+         }
+         else
+         {
+            out.println("Managed-connection-factory:");
+
+            ResourceAdapter10 ra10 = (ResourceAdapter10)ra;
+            out.println("  Class: " + ra10.getManagedConnectionFactoryClass());
+         }
+         
+         if (raNode != null)
+         {
+            out.println();
+
+            TransformerFactory tfactory = TransformerFactory.newInstance();
+            Transformer serializer;
+
+            serializer = tfactory.newTransformer();
+            //Setup indenting to "pretty print"
+            serializer.setOutputProperty(OutputKeys.INDENT, "yes");
+            serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+
+            serializer.transform(new DOMSource(raNode), new StreamResult(out));
+         }
+
+         System.out.println("Done.");
+         System.exit(SUCCESS);
+      }
+      catch (Throwable t)
+      {
+         System.err.println("Error: " + t.getMessage());
+         t.printStackTrace(System.err);
+         System.exit(ERROR);
+      }
+      finally
+      {
+         if (out != null)
+         {
+            try
+            {
+               out.close();
+            }
+            catch (Exception ioe)
+            {
+               // Ignore
+            }
+         }
+      }
+   }
+
+   /**
+    * Tool usage
+    */
+   private static void usage()
+   {
+      System.out.println("Usage: ./rar-info.sh file.rar");
+   }
+}

Added: projects/jboss-jca/trunk/as/src/main/java/org/jboss/jca/as/rarinfo/package.html
===================================================================
--- projects/jboss-jca/trunk/as/src/main/java/org/jboss/jca/as/rarinfo/package.html	                        (rev 0)
+++ projects/jboss-jca/trunk/as/src/main/java/org/jboss/jca/as/rarinfo/package.html	2011-11-04 08:18:02 UTC (rev 112417)
@@ -0,0 +1,3 @@
+<body>
+This package contains the IronJacamar rar-info tool.
+</body>

Added: projects/jboss-jca/trunk/as/src/main/resources/rar-info.bat
===================================================================
--- projects/jboss-jca/trunk/as/src/main/resources/rar-info.bat	                        (rev 0)
+++ projects/jboss-jca/trunk/as/src/main/resources/rar-info.bat	2011-11-04 08:18:02 UTC (rev 112417)
@@ -0,0 +1 @@
+java -classpath ironjacamar-as.jar;..\..\lib\ironjacamar-common-spi.jar;..\..\lib\jboss-logging.jar;..\..\lib\jboss-common-core.jar;..\..\lib\ironjacamar-spec-api.jar;..\..\lib\papaki-core.jar;..\..\lib\javassist.jar;..\..\lib\ironjacamar-common-impl.jar;..\..\lib\ironjacamar-common-impl-papaki.jar;..\..\lib\ironjacamar-common-api.jar;..\..\lib\ironjacamar-validator.jar org.jboss.jca.as.rarinfo.Main %*

Added: projects/jboss-jca/trunk/as/src/main/resources/rar-info.sh
===================================================================
--- projects/jboss-jca/trunk/as/src/main/resources/rar-info.sh	                        (rev 0)
+++ projects/jboss-jca/trunk/as/src/main/resources/rar-info.sh	2011-11-04 08:18:02 UTC (rev 112417)
@@ -0,0 +1,2 @@
+#!/bin/sh
+java -classpath ./ironjacamar-as.jar:../../lib/jboss-logging.jar:../../lib/jboss-common-core.jar:../../lib/ironjacamar-spec-api.jar:../../lib/papaki-core.jar:../../lib/javassist.jar:../../lib/ironjacamar-common-impl.jar:../../lib/ironjacamar-common-impl-papaki.jar:../../lib/ironjacamar-common-api.jar:../../lib/ironjacamar-common-spi.jar:../../lib/ironjacamar-validator.jar org.jboss.jca.as.rarinfo.Main $*


Property changes on: projects/jboss-jca/trunk/as/src/main/resources/rar-info.sh
___________________________________________________________________
Added: svn:executable
   + *



More information about the jboss-cvs-commits mailing list