In case anyone is interested, we have hacked a quick program to convert
serialized deployment descriptors into XML.  It is tuned here and there
for our particulars but is a good starting point if you have a lot of
beans.

-Tom Casaletto
[EMAIL PROTECTED]
--------------

// DDConverter.java

import javax.ejb.deployment.DeploymentDescriptor;
import javax.ejb.deployment.SessionDescriptor;
import javax.ejb.deployment.EntityDescriptor;
import javax.ejb.deployment.AccessControlEntry;
import javax.ejb.deployment.ControlDescriptor;
import javax.naming.Name;
import java.security.Identity;
import java.util.Properties;
import java.util.StringTokenizer;

import java.io.FileInputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;

import java.lang.reflect.Method;
import java.lang.reflect.Field;

import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;

import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;

// This program converts serialized deployment descriptors into
// XML files.  You pass in the names of the serialized deployment
// descriptor files and it creates xml files with the same info.
// e.g  bash>java DDConverter myEntityBean.ser mySessionBean1.ser
mySessionBean2.ser
//
// would create myEntityBean.ser.xml mySessionBean1.ser.xml
mySessionBean2.ser.xml

class DDConverter {

    static File outputFile = null;
    static BufferedWriter writer = null;
    static String tab = "   ";
    static List beans = new LinkedList();

        public static void main(String argv[]) {

        if (argv.length <= 0) {
            System.out.println("usage: java DDConverter <bean1.ser>
[bean2.ser | bean3.ser | ...]");
            System.exit(1);
        } else {
            for (int i=0; i<argv.length; i++) {
                beans.add(argv[i]);
            }
        }

        System.out.println("starting conversion...");

        Iterator it = beans.iterator();
        while (it.hasNext()) {
            String serFile = (String)it.next();
            System.out.println("   attempting to convert: "+serFile);

            StringTokenizer t = new StringTokenizer(serFile,".");
            String beanName = t.nextToken();
            boolean isSession = false;
            DeploymentDescriptor desc = null;

            try {
                outputFile = new File(serFile+".xml");
                writer = new BufferedWriter(new FileWriter(outputFile));
            } catch (Exception e) {
                System.out.println("Cannot open output file");
                System.exit(1);
            }

            try {
                ObjectInput in = new ObjectInputStream (new
FileInputStream(serFile));
                desc = (SessionDescriptor)in.readObject();
                isSession = true;
                System.out.println("   Session Deployment descriptor
found");
            } catch (ClassCastException e) {
                System.out.println("   Session Deployment descriptor not
found, must be an entity bean");

                try {
                    ObjectInput in2 = new ObjectInputStream (new
FileInputStream(serFile));
                    desc = (EntityDescriptor)in2.readObject();
                    System.out.println("   Entity Deployment descriptor
found");
                } catch (Exception ex) {
                    System.out.println("Cannot read entity dd:" +
serFile );
                    System.exit(1);
                }

            } catch (Exception exc) {
                System.out.println("Cannot read session dd:" + exc);
                exc.printStackTrace();
                System.out.println("Cannot read session dd:" + serFile);
                System.exit(1);
            }

            try {
                writer.write("<!DOCTYPE ejb-jar SYSTEM
\"../../../xml/ejb-jar_1_1.dtd\">");
                writer.newLine();
                writer.write("<ejb-jar>");
                writer.newLine();
                writer.write(tab+"<description>Deployment descriptor for
the "+serFile+"</description>");
                writer.newLine();
                writer.write(tab+"<enterprise-beans>");
                writer.newLine();
                if (isSession) {
                    writer.write(tab+tab+"<session>");
                } else {
                    writer.write(tab+tab+"<entity>");
                }
                writer.newLine();

               
writer.write(tab+tab+tab+"<ejb-name>"+beanName+"</ejb-name>");
                writer.newLine();
               
writer.write(tab+tab+tab+"<home>"+desc.getHomeInterfaceClassName()+"</home>");
                writer.newLine();
               
writer.write(tab+tab+tab+"<remote>"+desc.getRemoteInterfaceClassName()+"</remote>");
                writer.newLine();
               
writer.write(tab+tab+tab+"<ejb-class>"+desc.getEnterpriseBeanClassName()+"</ejb-class>");
                writer.newLine();
                if (isSession) {
                    int smt =
((SessionDescriptor)desc).getStateManagementType();
                    if (smt == SessionDescriptor.STATELESS_SESSION) {
                       
writer.write(tab+tab+tab+"<session-type>Stateless</session-type>");
                    } else {
                       
writer.write(tab+tab+tab+"<session-type>Stateful</session-type>");
                    }
                    writer.newLine();
                } else {
                    String pkName =
((EntityDescriptor)desc).getPrimaryKeyClassName();
                   
writer.write(tab+tab+tab+"<persistence-type>Container</persistence-type>");
                    writer.newLine();
                   
writer.write(tab+tab+tab+"<prim-key-class>"+pkName+"</prim-key-class>");
                    writer.newLine();
                   
writer.write(tab+tab+tab+"<reentrant>False</reentrant>");
                    writer.newLine();
                }
               
writer.write(tab+tab+tab+"<transaction-type>Container</transaction-type>");
                writer.newLine();

                if (!isSession) {
                    Field [] fs =
((EntityDescriptor)desc).getContainerManagedFields();
                    if (fs != null && fs.length>0) {
                        for (int j=0; j<fs.length; j++) {
                           
writer.write(tab+tab+tab+"<cmp-field><field-name>"+fs[j].getName()+"</cmp-field></field-name>");
                            writer.newLine();
                        }
                    }
                }

                if (isSession) {
                    writer.write(tab+tab+"</session>");
                } else {
                    writer.write(tab+tab+"</entity>");
                }
                writer.newLine();
                writer.write(tab+"</enterprise-beans>");
                writer.newLine();


                writer.write(tab+"<assembly-descriptor>");
                writer.newLine();

                ControlDescriptor[] cds = desc.getControlDescriptors();
                if (cds != null && cds.length>0) {
                    for (int j=0; j<cds.length; j++) {
                        ControlDescriptor cd = cds[j];
                        Method m = cd.getMethod();
                        int isoLevel = cd.getIsolationLevel();
                        int runAs = cd.getRunAsMode();
                        int txAttr = cd.getTransactionAttribute();

                        String methodName = new String();
                        if (m!=null) {
                            methodName = m.getName();
                        } else {
                            methodName = "*";
                        }

                        //    public static final int TX_NOT_SUPPORTED =
0;
                        //    public static final int TX_BEAN_MANAGED  =
1;
                        //    public static final int TX_REQUIRED      =
2;
                        //    public static final int TX_SUPPORTS      =
3;
                        //    public static final int TX_REQUIRES_NEW  =
4;
                        //    public static final int TX_MANDATORY     =
5;
                        //    public static final int TX_NEVER         =
6;

                        writer.write(tab+tab+"<container-transaction>");
                        writer.newLine();
                        writer.write(tab+tab+tab+"<method>");
                        writer.newLine();
                       
writer.write(tab+tab+tab+tab+"<ejb-name>"+beanName+"</ejb-name>");
                        writer.newLine();
                       
writer.write(tab+tab+tab+tab+"<method-name>"+methodName+"</method-name>");
                        writer.newLine();
                        writer.write(tab+tab+tab+"</method>");
                        writer.newLine();
                        if (txAttr == 0) {
                           
writer.write(tab+tab+tab+"<trans-attribute>NotSupported</trans-attribute>");
                        } else if (txAttr == 1) {
                           
writer.write(tab+tab+tab+"<trans-attribute>BeanManaged</trans-attribute>");
                        } else if (txAttr == 2) {
                           
writer.write(tab+tab+tab+"<trans-attribute>Required</trans-attribute>");
                        } else if (txAttr == 3) {
                           
writer.write(tab+tab+tab+"<trans-attribute>Supports</trans-attribute>");
                        } else if (txAttr == 4) {
                           
writer.write(tab+tab+tab+"<trans-attribute>RequiresNew</trans-attribute>");
                        } else if (txAttr == 5) {
                           
writer.write(tab+tab+tab+"<trans-attribute>Mandatory</trans-attribute>");
                        } else if (txAttr == 6) {
                           
writer.write(tab+tab+tab+"<trans-attribute>Never</trans-attribute>");
                        }
                        writer.newLine();
                       
writer.write(tab+tab+"</container-transaction>");
                        writer.newLine();

                    }
                } else {
                    writer.write(tab+tab+"<container-transaction>");
                    writer.newLine();
                    writer.write(tab+tab+tab+"<method>");
                    writer.newLine();
                   
writer.write(tab+tab+tab+tab+"<ejb-name>"+beanName+"</ejb-name>");
                    writer.newLine();
                   
writer.write(tab+tab+tab+tab+"<method-name>*</method-name>");
                    writer.newLine();
                    writer.write(tab+tab+tab+"</method>");
                    writer.newLine();
                   
writer.write(tab+tab+tab+"<trans-attribute>Supports</trans-attribute>");
                    writer.newLine();
                    writer.write(tab+tab+"</container-transaction>");
                    writer.newLine();
                }

                writer.write(tab+"</assembly-descriptor>");
                writer.newLine();

                writer.write("</ejb-jar>");
                writer.close();

                System.out.println("   successfully converted:
"+serFile);
                System.out.println("");

            } catch (Exception e) {
                System.out.println("problems in main");
                System.exit(1);
            }
        }
        System.out.println("normal completion...");

        }
}
----
To unsubscribe, send email to [EMAIL PROTECTED] and
include in the body of the message "unsubscribe jonas-users".
For general help, send email to [EMAIL PROTECTED] and
include in the body of the message "help".

Reply via email to