3.2.10. Cambios de invocaciones remotas

3.2.10.1. Migración de aplicaciones implementadas de JBoss EAP 5 que realizan invocaciones remotas en JBoss EAP 6

Resumen

En JBoss EAP 5, la interfaz remota EJB se enlazaba en JNDI por defecto bajo el nombre "ejbName/local" para las interfaces locales y "ejbName/remote" para las interfaces remotas. Luego la aplicación cliente buscaba el bean usando "ejbName/remote".

En JBoss EAP 6, una nueva API cliente EJB especifica se introdujo para realizar la invocación. Sin embargo, si no quiere reescribir su código para utilizar la nueva API entonces puede modificar el código existente para utilizar la ejb:BEAN_REFERENCE para acceso remoto a EJBs con la siguiente sintaxis.
Para beans sin estado, la sintaxis ejb:BEAN_REFERENCE es:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>
Para beans con estado la sintaxis ejb:BEAN_REFERENCE es:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
Los valores a sustituirse en la sintaxis anterior son:
  • <app-name> - el nombre de la aplicación de las EJBs implementadas. Este es usualmente el nombre ear sin el sufijo .ear, sin embargo, el nombre se puede sobreescribir en el archivo application.xml. Si la aplicación no se implementa como un .ear, este valor es una cadena vacía. Asuma que este ejemplo no se implementaba como un EAR.
  • <module-name> - el nombre del módulo de las EJBs implementadas en el servidor. Este es usualmente el nombre jar de la implementación EJB sin el sufijo .jar, pero se puede sobreescribir usando el ejb-jar.xml. En este ejemplo, asuma que las EJBs se implementaban en una jboss-ejb-remote-app.jar así que el nombre del módulo es jboss-ejb-remote-app.
  • <distinct-name> - un nombre diferente opcional para la EJB. Este ejemplo no usa un nombre diferente así que utiliza una cadena vacía.
  • <bean-name> - por defecto, es el nombre simple de la clase de la clase de la implementación del bean.
  • <fully-qualified-classname-of-the-remote-interface> - el nombre de la clase completamente calificada de la vista remota.
Actualización del código del cliente

Asuma que ha implementado los siguientes EJB sin estado en un servidor de JBoss EAP 6. Note que expone una vista remota para el bean.

@Stateless
@Remote(RemoteCalculator.class)
public class CalculatorBean implements RemoteCalculator {
 
    @Override
    public int add(int a, int b) {
        return a + b;
    }
 
    @Override
    public int subtract(int a, int b) {
        return a - b;
    }
}
En JBoss EAP 5, la búsqueda EJB del cliente y la invocación se codificaba de manera similar a esto:
InitialContext ctx = new InitialContext();
RemoteCalculator calculator = (RemoteCalculator) ctx.lookup("CalculatorBean/remote");
int a = 204;
int b = 340;
int sum = calculator.add(a, b);
En JBoss EAP 6, usando la información descrita anteriormente, la búsqueda del cliente e invocación se codifica así:
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);
final String appName = "";
final String moduleName = "jboss-ejb-remote-app";
final String distinctName = "";
final String beanName = CalculatorBean.class.getSimpleName();
final String viewClassName = RemoteCalculator.class.getName();
final RemoteCalculator statelessRemoteCalculator =  (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
 
int a = 204;
int b = 340;
int sum = statelessRemoteCalculator.add(a, b);
Si su cliente está accediendo un EJB con estado debe agregar "?stateful" al final de la búsqueda del contexto así:
final RemoteCalculator statefulRemoteCalculator =  (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful")

Puede encontrar un ejemplo completo que funciona incluyendo el código del servidor y del cliente en los inicios rápidos. Para obtener mayor información consulte Review the Quickstart Tutorials en el capítulo titulado Inicie a desarrollar aplicaciones en la Guía de desarrollo para JBoss EAP 6 en https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Para mayor información sobre invocaciones remotas utilizando JNDI consulte Sección 3.2.10.2, “Invocación de un bean de sesión remotamente usando JNDI” .