3.2.10. Alterações de Invocação Remota

3.2.10.1. Migração dos Aplicativos Implantados do JBoss EAP 5 que Realizam Invocações Remotas no JBoss EAP 6

Sumário

No JBoss EAP 5, a interface remota do EJB era vinculada ao JNDI, por padrão, sob o nome "ejbName/local" para as interfaces locais e "ejbName/remote" para as interfaces remotas. O aplicativo do cliente, então, pesquisava o bean usando "ejbName/remote".

No JBoss EAP 6, uma nova e específica API do cliente EJB foi introduzida para realizar a invocação. No entanto, caso não deseja regravar o seu código para usar a nova API, você pode modificar o código existente para uso do ejb:BEAN_REFERENCE para o acesso remoto aos EJBs com a seguinte sintaxe.
Para os beans sem monitorização de estado, a sintaxe ejb:BEAN_REFERENCE é:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>
Para beans com monitorização de estado (stateful), a sintaxe ejb:BEAN_REFERENCE é:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
Os valores a serem substituídos na sintaxe acima são:
  • <app-name> - o nome do aplicativo dos EJBs implantados. Este é tipicamente o nome ear sem o sufixo .ear, no entanto, o nome pode ser substituído no arquivo application.xml. Se o aplicativo não é implantado como um .ear, esse valor é uma cadeia vazia. Presume-se que este exemplo não foi implantado como um EAR.
  • <module-name> - o nome do módulo dos EJBs implantados no servidor. Isto é tipicamente o nome jar da implantação EJB, sem o sufixo .jar, porém pode ser substituído usando o ejb-jar.xml. Neste exemplo, presuma que os EJBs foram implantados em um jboss-ejb-remote-app.jar, portanto o nome do módulo é jboss-ejb-remote-app.
  • <distinct-name> - um nome distinto opcional para o EJB. Este exemplo não usa um nome distinto, portanto usa-se uma cadeia vazia.
  • <bean-name> - por padrão, é o nome de classe simples da classe de implantação do bean.
  • <fully-qualified-classname-of-the-remote-interface> - o nome da classe inteiramente qualificado de visualização remota.
Atualização do código do cliente

Suponha que você tenha implantado o seguinte EJB sem monitorização de estado em um servidor do JBoss EAP 6. Observe que isto expõe uma visualização remota para o 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;
    }
}
No JBoss EAP 5, a invocação e a pesquisa EJB do cliente foi codificada de forma parecida com isto:
InitialContext ctx = new InitialContext();
RemoteCalculator calculator = (RemoteCalculator) ctx.lookup("CalculatorBean/remote");
int a = 204;
int b = 340;
int sum = calculator.add(a, b);
No JBoss EAP 6, usando a informação descrita acima, a invocação e a pesquisa do cliente estão codificadas da seguinte maneira:
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);
Caso o seu cliente esteja acessando um EJB com monitorização de estado, você deve acrescentar "?stateful" ao final da pesquisa de contexto, como abaixo:
final RemoteCalculator statefulRemoteCalculator =  (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful")

Um exemplo completo, incluindo ambos o código do cliente e do servidor, pode ser encontrado no Início Rápido. Para mais informações, consulte Review the Quickstart Tutorials no capítulo entitulado Get Started Developing Applications no guia Development Guide para o JBoss EAP 6 em https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Para mais informações sobre as invocações remotas utilizando JNDI, consulte Seção 3.2.10.2, “Invocação Remota de um Bean de Sessão usando JNDI” .