1. Criando um Mdulo Enterprise Java Bean (Java EE) ..................................................................................................... 2 2. Criando uma Aplicao Cliente Java Desktop para acessar o EJB ............................................................................... 12 3. Criando uma Aplicao Web com JSP para acessar o EJB ........................................................................................... 17 4. Criando um Web Service em Java para acessar o EJB ................................................................................................ 23 5. Acessando o Web Service a partir do Android ........................................................................................................... 26
2
1. Criando um Mdulo Enterprise Java Bean (Java EE)
Vamos criar um EJB que far o Cadastro de Pessoa (cpf - chave primria, nome, email) numa base MySQL. Este EJB executar num servidor de aplicaes GlassFish e ser usado por uma aplicao Desktop, uma aplicao Web e por um Web Service acessado por um Android. Para isso, crie um Novo Projeto => Java EE => Mdulo EJB.
D o nome de EJBCadPessoa 3
Crie tambm um Novo Projeto => Java => Biblioteca de Classe Java, para armazenar a interface remota do EJB. 4
D o nome de LibCadPessoa 5
No EJBCadPessoa, clique com o boto direito e crie um novo Pacote Java, com um nome significativo, por exemplo: com.evandro
6
Nesse pacote criado, crie um Novo Bean de Sesso Stateless, com o nome CadPessoaBean e com Interface Remota no projeto LibCadPessoa.
Clique com o boto direito sobre o cdigo do CadPessoaBean.java e clique em Inserir Cdigo... 7
Clique em Inserir Cdigo => Adicionar Mtodo de Negcios. D o nome do mtodo de CadastrarPessoa, defina o Tipo de Retorno como Boolean e adicione 3 parmetros do tipo String (cpf, nome, email).
Implemente o cdigo CadPessoaBeanRemote com uma conexo com o MySQL e a respectiva insero, como o que est a seguir: public class CadPessoaBean implements CadPessoaBeanRemote {
Adicione a biblioteca do driver JDBC MySQL no projeto
Corrija as importaes, cuidando para escolher a importao de java.sql e no da com.mysql.jdbc.
9
Copie o arquivo mysql-connector-java-5.1.23-bin.jar para a pasta lib do GlassFish.
Acesse o Console do Admin do Domnio do GlassFish 10
Se no funcionar, clique em Iniciar e depois acesse diretamente pelo navegador: http://localhost:4848/
Implante o projeto EJBCadPessoa no servidor GlassFish 11
Verifique se ele foi implantado e est ativado
12
2. Criando uma Aplicao Cliente Java Desktop para acessar o EJB O EJB pode ser acessado a partir de uma aplicao Java Desktop convencional. Para isso, crie um Novo Projeto => Java => Aplicao Java com o nome ClienteCadPessoaBean, deixando desmarcada a opo criar Classe Principal
No projeto ClienteCadPessoaBean, crie novo Form JFrame com o nome CadPessoa, no pacote cadPessoa.
13
Adicione da Paleta Controles Swing 3 Label (jLabel), 3 Campo de Texto (jTextField) e 2 Boto (jButton)
14
Clique com o boto direito sobre o componente e altere o seu texto, clicando em Editar Texto. Se quiser pode tambm alterar seu nome atravs da opo Alterar o Nome da Varivel
O Formulrio JFrame deve ficar semelhante a esse:
Tenha certeza que o GlassFish esteja executando. Nas propriedades do Projeto, adicione as seguintes bibliotecas: Adicione o projeto LibCadPessoa Adicione os arquivos appserv-rt.jar e javaee.jar da pasta lib do GlassFish 15
Implemente o seguinte cdigo no boto OK, para fazer a chamada para o EJB EJBCadPessoa/CadPessoaBean: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { InitialContext ctx = null; CadPessoaBeanRemote cp; cp = null; try { ctx = new InitialContext();// ser for aplicao local ou /* o codigo a seguir se for aplicao remota Properties p = new Properties(); p.put("org.omg.CORBA.ORBInitialHost", "192.168.1.175"); p.put("org.omg.CORBA.ORBInitialPort", "3700"); ctx = new InitialContext(p); */ } catch (NamingException ex) { JOptionPane.showMessageDialog(this, "Erro: "+ ex); } try { cp = (CadPessoaBeanRemote) ctx.lookup("java:global/EJBCadPessoa/CadPessoaBean"); } catch (NamingException ex) { JOptionPane.showMessageDialog(this, "Erro: "+ ex); } if (cp!=null && cp.CadastrarPessoa(jTextField1.getText(), jTextField2.getText(), jTextField3.getText())) { JOptionPane.showMessageDialog(this, "OK"); jTextField1.setText(null); jTextField2.setText(null); jTextField3.setText(null); jTextField1.grabFocus(); } else { JOptionPane.showMessageDialog(this, "Erro no cadastro."); } } Implemente o seguinte cdigo no boto Cancelar: 16
3. Criando uma Aplicao Web com JSP para acessar o EJB O EJB tambm pode ser acessado a partir de uma aplicao WEB Java com JSP. Para isso, crie um Novo Projeto => Java Web => Aplicao Web com o nome WebAppCadPessoa
18
Deixe desmarcado os frameworks...
19
Altere o cdigo HTML da pgina inicial (index.html) alterando o ttulo e criando um formulrio, que chamar o cadpessoa.jsp
Insira 3 campos de Entrada de Texto (cpf, nome, email) e um boto (submit) para fazer o envio dos dados e realizar o cadastro.
Vamos criar a pgina JSP que receber os dados e far a chamada do EJB para realizar o cadastro. Sobre o WebAppCadPessoa, clique com o boto direito e escolha Novo => JSP com o nome cadpessoa 21
22
Altere o cadpessoa.jsp para fazer a chamada do EJB EJBCadPessoa/CadPessoaBean. Essa pgina envia um retorno para a pgina web sob a forma de script com um alerta informando se o cadastro foi realizado ou no e mostra novamente o mesmo formulrio de cadastro, para fazer novas inseres. <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cadastro de Pessoa</title> </head> <body> <h1>Cadastro de Pessoa</h1> <div> <%@page language = "java" %> <%@page import = "java.util.*" %> <%@page import = "com.evandro.CadPessoaBeanRemote" %> <%@page import = "java.util.Properties" %> <%@page import = "java.util.logging.Level" %> <%@page import = "java.util.logging.Logger" %> <%@page import = "javax.naming.InitialContext" %> <%@page import = "javax.naming.NamingException" %>
<% if (request.getParameter("nome") != null) { InitialContext ctx = null; CadPessoaBeanRemote cp; cp = null; try { ctx = new InitialContext(); // ser for aplicao local ou /* o codigo a seguir se for aplicao remota Properties p = new Properties(); p.put("org.omg.CORBA.ORBInitialHost", "192.168.1.175"); p.put("org.omg.CORBA.ORBInitialPort", "3700"); ctx = new InitialContext(p); */ } catch (NamingException ex) { out.println("<script>alert('Erro: " + ex + "');</script>"); } try { cp = (CadPessoaBeanRemote) ctx.lookup("java:global/EJBCadPessoa/CadPessoaBean"); } catch (NamingException ex) { out.println("<script>alert('Erro: " + ex + "');</script>"); } if (cp != null && cp.CadastrarPessoa(request.getParameter("cpf"), request.getParameter("nome"), request.getParameter("email"))) { out.println("<script>alert('" + request.getParameter("nome") + " Cadastrado.');</script>"); try { ctx.close(); } catch (NamingException ex) { out.println("<script>alert('Erro: " + ex + "');</script>"); } } else { out.println("<script>alert('Erro no cadastro.');</script>"); } } %> </div> <div> <form name="cadastro" action="cadpessoa.jsp" method="POST"> CPF: <input type="text" name="cpf" value="" size="15" /><br> Nome: <input type="text" name="nome" value="" size="50" /><br> E-Mail: <input type="text" name="email" value="" size="50" /><br> <input type="submit" value="Cadastrar" name="cadastrar" /><br> </form> </div>
</body> </html> 23
4. Criando um Web Service em Java para acessar o EJB Se precisarmos acessar o EJB a partir de outras tecnologias e plataformas, como Delphi, .NET, PHP ou Android, a melhor forma criar um Web Service em Java. O Web Service acessa o EJB e repassa os dados para quem fez a chamada, j que Web Services uma das mais difundidas formas de interoperabilidade. Para criar um Web Service, temos que ter um projeto de Aplicao Web. Como j temos um, podemos usar o mesmo. Dentro dele, crie um Novo => Outros... => Web Services => Web Service
Vamos dar o nome de WSCadPessoa e coloc-lo num pacote com o mesmo nome. Como j temos um Bean com as funcionalidades de cadastro implementados, podemos usar o assistente do Netbeans e Criar um Web Service a Partir do Bean de Sesso Existente, escolhendo o CadPessoaBean. 24
Pronto. O Web Service est criado. Agora s testar, clicando sobre o Web Service WSCadPessoa com o boto direito e escolhendo Testar Web Service. 25
26
5. Acessando o Web Service a partir do Android 1. Crie um novo projeto no ADT - Android Developer Tools/Eclipse 2. Adicione nas libs do projeto o arquivo ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar (arrastar o arquivo para a pasta e escolher a opo copiar o arquivo) 3. Crie 3 campos de texto com os respectivos labels: cpf, nome, email 4. Inclua um boto OK com a propriedade onclick => cadastrar 5. implemente na classe MainActivity o seguinte cdigo antes da ltima chave:
public void cadastrar (View v) { String SOAP_ACTION = "http://WSCadPessoa/CadastrarPessoa"; String METHOD_NAME = "CadastrarPessoa"; String NAMESPACE = "http://WSCadPessoa/"; String URL = "http://10.0.2.2:8080/WebAppCadPessoa/WSCadPessoa"; // usar 10.0.2.2 no emulador se for no localhost=>127.0.0.1 EditText e1 = (EditText) findViewById(R.id.editText1); EditText e2 = (EditText) findViewById(R.id.editText2); EditText e3 = (EditText) findViewById(R.id.editText3); String res = ""; try { SoapObject request=new SoapObject(NAMESPACE, METHOD_NAME); // adicione parametros e valores request.addProperty("cpf", e1.getText().toString()); request.addProperty("nome", e2.getText().toString()); request.addProperty("email", e3.getText().toString()); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = false; envelope.setOutputSoapObject(request); // faz a chamada do mtodo pela Web HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); androidHttpTransport.call(SOAP_ACTION, envelope); // pega a resposta simples com: // SoapObject result = (SoapObject) envelope.getResponse(); // ou pega a resposta com vrias propriedades atravs do nome de cada uma delas: SoapObject result = (SoapObject)envelope.bodyIn; res = result.getProperty("return").toString(); if (res.equals("true")) { Toast.makeText(getApplicationContext(), "Cadastro realizado com sucesso!", Toast.LENGTH_SHORT).show(); e1.setText(""); e2.setText(""); e3.setText(""); e1.requestFocus(); } else { Toast.makeText(getApplicationContext(), "Erro no Cadastro! CPF J existe.", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { Toast.makeText(getApplicationContext(), "Erro de conexo!", Toast.LENGTH_SHORT).show(); } } 27
6. Inclua a seguinte linha no arquivo AndroidManifest.xml antes de <application : <uses-permission android:name="android.permission.INTERNET"></uses-permission>
7. Teste o aplicativo, clicando sobre o projeto com o boto direito e escolhendo Run As => Android Application