Após certifica-se que o NetBeans esta configurado junto com o servidor . Crie um novo projeto no NetBeans e selecione Enterprise e depois EJBModule. Coloque o nome de EJBModuleConversor e escolha o servido do J2EE como servidor de aplicação.
Após a criação do projeto, clique com o botão direito sobre o projeto EJBModuleConversor e selecione New->SessionBean. Coloque o nome de Conversor e selecione interface Remote. Atribua um nome ao pacote (conversor) e selecione finish. Duas classes foram geradas para implementar o seu SessionBean: ConversorRemote e ConversorBean.
package conversor;
import javax.ejb.Remote;
/**
* This is the business interface for Conversor enterprise bean.
*/
@Remote
public interface ConversorRemote {
}
Vamos alterar esse código adicionado a descrição de um “serviço” de conversão de moedas. O método calcularConversão:
@Remote
public interface ConversorRemote {
public double calcularConversao(double d);
}
Altere o código da classe ConversorBean para que ele implemente o método de conversão e exporte o componente com o nome de ejb/Conversor. No fim, ele deve ficar assim:
package conversor;
import javax.ejb.Stateless;
@Stateless (mappedName="ejb/ConversorDeMoedas")
public class ConversorBean implements conversor.ConversorRemote {
/** Creates a new instance of ConversorBean */
private double tax;
public ConversorBean() {
tax=1.8;
}
public double calcularConversao(double d) {
return d*tax;
}}
Esse código indica que o componente é do tipo Stateless SessioBean e que ele pode ser localizado através do nome ejb/Conversor. Compile o projeto e instale no servidor Sun Java Application Server. Para realizar esta tarefa, clique com o botão direito sobre o projeto e selecione Deploy. As ultimas linhas do console do Sun Java Application Server devem ser:
**RemoteBusinessJndiName: ejb/ConversorDeMoedas; remoteBusIntf: conversor.ConversorRemote
LDR5010: All ejb(s) of [EJBModuleConversor] loaded successfully!
Agora vamos criar um cliente para este componente. Crie um novo projeto e selecione Enterprise Aplication Client. Coloque o nome de ConversorDeMoedasCliente. Selecione com o botão direito as propriedades do novo projeto (Properties). Selecione Libraries e depois clique em Add Jar/Folder. Navegue até a pasta onde se encontrar o .jar do componente Conversor (EJBModuleConversor.jar). Após a criação do projeto e da configuração dos imports, modifica o método main da classe Main até obter o seguinte código:
public static void main(String[] args) {
InitialContext ctxt;
try {
ctxt=new InitialContext();
ConversorRemote clienteCR=(ConversorRemote)ctxt.lookup("ejb/ConversorDeMoedas");
System.out.println("#########################");
System.out.println("10 dolares equivalem à "+clienteCR.calcularConversao(10)+" reais ");
System.out.println("#########################");
} catch (NamingException ex) {
ex.printStackTrace();
}}
Aceite os imports necessários e compile a aplicação. Execute o cliente (Run Project) e você deve obter o seguinte resultado:
#########################
10 dólares equivalem à 18.0 reais
#########################
Pequena explicação
O cliente acessa o componente através do contêiner. Para isso, uma instância da classe InitialContext é usada. O método lookup é invocado com o nome publicado pelo componente servidor (i.e.,“ejb/ConversorDeMoedas”). Uma referência do objeto é repassada pelo contêiner ao objeto clienteCR. Esta referência permite o acesso ao método remoto calcularConversao.
3 commentaires:
Esse seu exemplo gera o seguinte erro na funcao main:
Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:284)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at TestJndi.main(TestJndi.java:27)
Ola Joao Paulo, eu testei o exemplo usando as ferramentas que descrevo no inicio do texto. Eu posso lhe enviar inclusive o codigo do projeto do netbeans.
vc deve importar as seguintes bibliotecas no main.java
import javax.naming.InitialContext;
import javax.naming.NamingException;
Enregistrer un commentaire