FileDocCategorySizeDatePackage
RemoteGenerator.javaAPI DocGlassfish v2 API8111Fri May 04 22:32:58 BST 2007com.sun.ejb.codegen

RemoteGenerator

public class RemoteGenerator extends Generator implements ClassGeneratorFactory
This class is used to generate the RMI-IIOP version of a remote business interface.

Fields Summary
private static com.sun.enterprise.util.LocalStringManagerImpl
localStrings
private static Logger
_logger
private Class
businessInterface
private Method[]
bizMethods
private String
remoteInterfacePackageName
private String
remoteInterfaceSimpleName
private String
remoteInterfaceName
Constructors Summary
public RemoteGenerator(ClassLoader cl, String businessIntf)
Construct the Wrapper generator with the specified deployment descriptor and class loader.

exception
GeneratorException.

	super();

	try {
	    businessInterface = cl.loadClass(businessIntf);
	} catch (ClassNotFoundException ex) {
	    throw new InvalidBean(
		localStrings.getLocalString(
		"generator.remote_interface_not_found",
		"Remote interface not found "));
	}

        remoteInterfaceName = EJBUtils.getGeneratedRemoteIntfName
            (businessInterface.getName());

	remoteInterfacePackageName = getPackageName(remoteInterfaceName);
        remoteInterfaceSimpleName = getBaseName(remoteInterfaceName);
	
	bizMethods = removeDups(businessInterface.getMethods());
        
        // NOTE : no need to remove ejb object methods because EJBObject
        // is only visible through the RemoteHome view.
    
Methods Summary
public java.lang.StringclassName()

        return getGeneratedClass();
    
public com.sun.corba.ee.impl.codegen.ClassGeneratorevaluate()


        _clear();

	if (remoteInterfacePackageName != null) {
	    _package(remoteInterfacePackageName);
        } else {
            // no-arg _package() call is required for default package
            _package();
        } 

        _interface(PUBLIC, remoteInterfaceSimpleName,
                   _t("java.rmi.Remote"), 
                   _t("com.sun.ejb.containers.RemoteBusinessObject"));

        for(int i = 0; i < bizMethods.length; i++) {
	    printMethod(bizMethods[i]);
	}

        _end();

        return _classGenerator() ;

    
public voidgenerate(java.io.OutputStream out)
Generate the code to the specified output stream.

param
the output stream
exception
GeneratorException on a generation error
exception
IOException on an IO error

	IndentingWriter p = new IndentingWriter(new OutputStreamWriter(out));

        p.pln("");

	if (remoteInterfacePackageName != null) {
	    p.pln("package " + remoteInterfacePackageName + ";");
        }

        p.pln("");

	p.plnI("public interface " + remoteInterfaceSimpleName + " extends " +
            "java.rmi.Remote , com.sun.ejb.containers.RemoteBusinessObject {");

        p.pln("");

	// each remote method
	for(int i = 0; i < bizMethods.length; i++) {
	    printMethod(p, bizMethods[i]);
	}

	p.pOln("}");
	p.close();
    
public java.lang.StringgetGeneratedClass()
Get the fully qualified name of the generated class. Note: the remote/local implementation class is in the same package as the bean class, NOT the remote/local interface.

return
the name of the generated class.

        return remoteInterfaceName;
    
private voidprintMethod(java.lang.reflect.Method m)


        boolean throwsRemoteException = false;
        List<Type> exceptionList = new LinkedList<Type>();
	for(Class exception : m.getExceptionTypes()) {
            exceptionList.add(Type.type(exception));
            if( exception.getName().equals("java.rmi.RemoteException") ) {
                throwsRemoteException = true;
            }
	}
        if( !throwsRemoteException ) {
            exceptionList.add(_t("java.rmi.RemoteException"));
        }

        exceptionList.add(_t("com.sun.ejb.containers.InternalEJBContainerException"));
        _method( PUBLIC | ABSTRACT, Type.type(m.getReturnType()),
                 m.getName(), exceptionList);

        int i = 0;
        for(Class param : m.getParameterTypes()) {
            _arg(Type.type(param), "param" + i);
            i++;
	}

        _end();
    
private voidprintMethod(sun.rmi.rmic.IndentingWriter p, java.lang.reflect.Method m)
Generate the code for a single method.

param
the writer.
param
the method to generate code for.
exception
IOException.

	p.pln("");

	// print method signature and exceptions
	p.p("public " + printType(m.getReturnType()) + " "
		+ m.getName() + "(");
	Class[] params = m.getParameterTypes();
	for(int i = 0; i < params.length; i++) {
	    if (i != 0)
		p.p(", ");
	    p.p(printType(params[i]) + " param" + i);
	}
	p.p(") ");
	Class[] exceptions = m.getExceptionTypes();
        boolean throwsRemoteException = false;
	for(int i = 0; i < exceptions.length; i++) {
	    if (i == 0)
		p.p("throws ");
	    else
		p.p(", ");
            String nextEx = exceptions[i].getName();
	    p.p(nextEx);
            if( nextEx.equals("java.rmi.RemoteException") ) {
                throwsRemoteException = true;
            }
	}
        if( exceptions.length == 0 ) {
            p.p("throws java.rmi.RemoteException");
        } else if (!throwsRemoteException) {
            p.p(", java.rmi.RemoteException");
        }
	p.pln(";");
        p.pln("");