GenIC currently outputs duplicate business method calls when overriding
methods in a bean via inheritance. I have modified
org.objectweb.jonas.tools.GenICRemote to at least allow the bean class to
override any other methods. A more robust solution would allow overrides at
any level, but this was enough to get my classes working. Here are my
changes to GenICRemote.generate() based on GenICRemote.java version 1.13:
/**
* Generate the source of the class which implements the Remote
interface
* @param withError the source file is generated with a syntax error
* (internal use only for test)
* @exception GenICException in error case
*/
void generate(boolean withError) throws GenICException {
// Declared methods in the Enterprise bean's remote interface;
Method methods[];
// Comments
src.println("//");
src.println("// "+wrpRemoteBaseName+".java");
src.println("// DO NOT EDIT THIS FILE");
src.println("// It is automatically generated via the GenIC tool of
JOnAS");
src.println("//");
src.println();
// Package clause
String s = BeanNaming.getPackageName(ejbRemoteName);
if (s.length() != 0) {
src.println("package "+s+";");
}
src.println();
// Wrong import clause generation for test only !!!!!
if (withError) {
src.println("import java.toto.Titi;");
src.println();
}
// Import clauses
genImport();
src.println();
// Class declaration
src.println("public class "+wrpRemoteBaseName+
" extends "+getSuperClass()+
" implements "+ejbRemoteName+" {");
src.println();
src.indentPlus();
// Constructor()
genConstructor();
src.println();
// getHandle() Method
genGetHandle();
src.println();
// Business Methods defined in the remote interface
methods = ejbRemoteClass.getMethods();
// First do functions within this class
java.util.Vector vectDoneMethods = new java.util.Vector();
for (int m=0; m < methods.length; m++) {
Method method = methods[m];
if (!method.getDeclaringClass().getName().equals(ejbRemoteName))
continue;
// pure business methods
if
(!method.getDeclaringClass().equals(javax.ejb.EJBObject.class)) {
genBussinessMethod(method);
src.println();
}
// Add to list of processed
Class[] params = method.getParameterTypes();
String sProcessed = method.getName() + "_" + params.length;
for (int nParam=0; nParam<params.length; nParam++)
{
sProcessed += "_" + params[nParam].getName();
}
vectDoneMethods.addElement(sProcessed);
}
// Now do functions in inherited classes, skipping any that have
been overridden
for (int m=0; m < methods.length; m++) {
Method method = methods[m];
if (method.getDeclaringClass().getName().equals(ejbRemoteName))
continue;
// Skip overridden methods
Class[] params = method.getParameterTypes();
String sProcessed = method.getName() + "_" + params.length;
for (int nParam=0; nParam<params.length; nParam++)
{
sProcessed += "_" + params[nParam].getName();
}
if (vectDoneMethods.contains(sProcessed))
{
continue;
}
if
(!method.getDeclaringClass().equals(javax.ejb.EJBObject.class)) {
genBussinessMethod(method);
src.println();
}
// remove (the only EJBObject method to consider)
if (method.getName().equals("remove")
&&
method.getDeclaringClass().equals(javax.ejb.EJBObject.class)) {
genRemove(method);
src.println();
}
}
// End of the Class
src.indentMinus();
src.println("}");
src.println();
//
src.close();
}
----
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".