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".