EJB
ou Enterprise JavaBeans é um dos principais componentes da
plataforma J2EE (Java 2 Enterprise Edition). É um componente
do tipo servidor que executa no container do servidor de aplicação. Os principais objectivos
da tecnologia EJB são fornecer um rápido e simplificado
desenvolvimento de aplicações Java baseado em componentes
distribuídos, transacionais, seguros e portáveis [1].
Um
dos principais componentes do EJB é o Session
Bean, atuando na camada de negócio, é o elemento responsável pela
distribuição da aplicação. Invocando seus métodos, outras
aplicações, estando na mesma máquina ou não, podem
executar tarefas de negócios dentro do servidor de aplicações [2].
JBoss
Application Server (ou JBoss AS) é um servidor de aplicações
J2EE open-source, ele foi desenvolvido pela JBoss, atualmente uma divisão da Red Hat.
Encontra-se na versão 7.1.1 e implementa a especificação java EJB 3.1 (
JSR 318)
Através
da implementação de um Hello World vamos demonstrar como pode
ser feita a comunicação client/server usando acesso remonto
com EJB.
1
- Pré-requisitos
- JBoss AS 7 (Download);
- JDK (Download) (Quando for criar os projetos escolha sempre JDK e não JRE)
- Eclipse, versão indigo ou superior (Eclipse Juno);
- Plugin Jboss Tools (Instala através do Eclipse MarketPlace);
Crie um novo server conforme tela abaixo, nossa aplicação servidora será implantada nele. Para isto navegue "File" > "New" > "Other" > "Server".
3 - Criando a aplicação servidora
Crie um novo projeto do tipo "EJB Project";
Na tela que se seguir desmarque a opção EJB Cliente e marque a opção gerar ejb-jar.xml , veja como fica;
4 - Adicionando um componente EJB
No menu do eclipse escolha "New" > "Session Bean". Marque as opções Local e Remote, veja como fica;
5 - Programação do componente
Crie o método sayHello na interface remota do componente e faça a sua implementação, veja como fica o código fonte;
HelloworldRemote.java
package tads.ifrn.edgar.ejbteste;
import javax.ejb.Remote;
@Remote
public interface HelloworldRemote {
public String sayHello();
}
Helloworld.java
package tads.ifrn.edgar.ejbteste;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
@Stateless
@LocalBean
public class Helloworld implements HelloworldRemote, HelloworldLocal {
public Helloworld() {
}
@Override
public String sayHello() {
return "Alo Mundo!";
}
}
6 - Execute o Helloworld como Server
7 - Aplicação Cliente
Em um ambiente real o cliente, provavelmente, será uma aplicação web, contudo, para fins de demonstração faremos uma aplicação java normal.
No menu escolha "File" > "New" > "Project" > "Java Project",
Para esta aplicação estar preparada para se comunicar com o servidor faremos as seguintes configurações;
7.1 - Adicionar uma referência ao projeto do servidor
Nas propriedades do projeto, selecione " Java Build Path ", na Aba " Projects ", clique no botão " Add ", e marque o projeto servidor, veja como fica;
7.2 - Adicionar a biblioteca cliente do JBoss
É necessário incorporar ao projeto o cliente do JBoss ( jboss-client.jar ), que se encontra na pasta de instalação em ..\bin\client\
Nas propriedades do
projeto, selecione "Java Build Path", na Aba "Libraries",
clique no botão "Add External JARs", abra o arquivo jboss-client.jar;
7.3
- Criar uma pasta para recursos e adicione ao classpath do projeto
Na
raiz do seu projeto, ou outro local que prefira, crie uma pasta
chamada
resources (Pode
ser outro nome), adicione esta pasta ao classpath, da seguinte forma;
Nas propriedades do projeto, selecione "Java Build Path", na Aba "Source", clique no botão "Add Folder" e selecione a pasta resources criada anteriormente;
7.4 - Na pasta criada anteriormente, adicionar o arquivo de configuração de conexão
É necessário criar o arquivo jboss-ejb-client.properties, que deve conter informações para permitir chamada a EJBs remotos, no mínimo as seguintes linhas;
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port
= 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
7.5 - Código fonte do cliente
HelloWordClient.java
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import tads.ifrn.edgar.ejbteste.HelloworldRemote;
public class HelloWorldClient {
public static void main(String[] args) {
final HelloworldRemote remoto = carregarStatlessBean();
System.out.println("Mostrando remoto: " + remoto.sayHello());
}
public static HelloworldRemote carregarStatlessBean() {
final Properties propriedades = new Properties();
propriedades.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");
Context context;
try {
context = new InitialContext(propriedades);
// O padrão para o comando lookup é ejb:nome do EAR/nome do projeto servidor/nome classe do modulo!nome completo da classe remota
// Dentro da janela de console do servidor esta informação pode ser percebida, veja o que vem logo após java:jboss/exported
return (HelloworldRemote) context.lookup("ejb:HelloWorldEAR/HelloWorld/Helloworld!tads.ifrn.edgar.ejbteste.HelloworldRemote");
} catch (NamingException e1) {
e1.printStackTrace();
}
return null;
}
}
Referências:
[2] http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/EJBConcepts3.html
[3] https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI








