Ws Eclipse Db2 Construindo do Servicos v01

20
Web Services EclipseSDK/DB2| Construindo/Consumindo Serviços Mario C. Ponciano a.k.a: Razec http://razec.wordpress.com [email protected] 28 de Novembro 2009

Transcript of Ws Eclipse Db2 Construindo do Servicos v01

Page 1: Ws Eclipse Db2 Construindo do Servicos v01

Web Services EclipseSDK/DB2| Construindo/Consumindo Serviços

Mario C. Ponciano – a.k.a: Razec

http://razec.wordpress.com

[email protected] 28 de Novembro 2009

Page 2: Ws Eclipse Db2 Construindo do Servicos v01

2

Sumário

Objetivo ........................................................................................................................................ 3

Requisitos .................................................................................................................................... 3

Desenvolvimento ........................................................................................................................ 3

Criando projeto no Eclipse .................................................................................................... 3

Conectando ao DB2 ............................................................................................................... 4

Construindo Web Service .................................................................................................... 6

Testando o Web Service ........................................................................................................... 9

Criando Web Service Client .................................................................................................... 10

Consumindo Web Service ....................................................................................................... 13

Page 3: Ws Eclipse Db2 Construindo do Servicos v01

3

Objetivo

Ajudar estudantes, desenvolvedores, a desenvolver web services¹ de maneira

simples . Além de implementar um serviço que possui a interoperabilidade de

comunicar diretamente com o DB2 Database utilizando Java e C#.

Requisitos • DB2 • Eclipse SDK - v. +3.4 • Apache Axis ou Axis2 • Tomcat v.6.0 Server ou WebSphere 6.1

Desenvolvimento A implementação do Web Service com Axis é uma classe Java que possui

métodos públicos.

Criando projeto no Eclipse

1° Passo: Criar um projeto no Eclipse, veja Figura 01.

Clique: File -> New -> Other -> Web -> Dynamic Web Project.

¹ Wikipédia a enciclopédia livre define Web Service como uma solução utilizada na integração

de sistemas e na comunicação entre aplicações diferentes.

Figura 01 – Criando Dynamic Web Project.

Page 4: Ws Eclipse Db2 Construindo do Servicos v01

4

Conectando ao DB2

2° Passo: Criar uma classe para se conectar ao DB2.

O nome de nossa classe será: DB2ConnectionFactory, como demonstrado na Figura

02.

Nossa classe conterá toda estrutura de conexão ao DB2. (Quadro 01)

Figura 02 – Criar classe DB2ConnectionFactory.java

<- Código ->

public class DB2ConnectionFactory { static String remotedb = "localhost" ; static String portdb = "50000" ; static String namedb = "WSDB"; //nome do seu banco . static String driver = "com.ibm.db2.jcc.DB2Driver" ; static String connectionURL = "jdbc:db2://" + remotedb + ":" + portdb + "/" + namedb; private static Connection conn = null; //Método de conecção public static Connection getConnection() throws SQLException, ClassNotFoundException{ Properties connProperties = new Properties(); connProperties.put( "user" , "razec" ); //Definir seu usuário . connProperties.put( "password" , "senha" ); //Definir sua senha . Class. forName( driver); return DriverManager. getConnection( connectionURL,connProperties); }

}

Quadro 01 – Conexão com o DB2

Page 5: Ws Eclipse Db2 Construindo do Servicos v01

5

3° Passo: Criar toda a estrutura DAO. (Figura 03).

Esta classe conterá todos os métodos SQL para manipulação dos dados. Vamos

colocar o nome de: DashBoardDAOImp.java

Os métodos são: Insert, Delete, Update, Select. (Quadro 02).

<- Código ->

public void insert( int id, int qtd, String namekey, String coordX, String coordY, String text) throws Exception { // TODO Auto-generated method stub // TODO Auto-generated method stub PreparedStatement psInsert = null; Connection conn = null; if( namekey == null) throw new Exception( "The value it's null" ); try { String SQL = "INSERT INTO DASHBOARD (ID, QTD, NAMEKEY, COORD_X, COORD_Y, TEXT)" + "VALUES (?, ?, ?, ?, ?, ?)" ; conn = this. conn; psInsert = conn.prepareStatement(SQL); psInsert.setInt(1, id); psInsert.setInt(2, qtd); psInsert.setString(3, namekey); psInsert.setString(4, coordX); psInsert.setString(5, coordY); psInsert.setString(6, text); int rows = psInsert.executeUpdate(); if (rows != 1) { throw new SQLException( "executeUpdate return value: " + rows); } } catch (SQLException ex){ JOptionPane. showMessageDialog( null,ex.getMessage()); } finally{ DB2ConnectionFactory. closeStatement(psInsert); DB2ConnectionFactory. closeJDBCConnection(conn); } }

Quadro 02 – Método insert para DB2.

Figura 03 – Criar classe para manipular métodos SQL.

Page 6: Ws Eclipse Db2 Construindo do Servicos v01

6

Construindo Web Service

Após todas as classes criadas e os métodos públicos finalizados, chegou o

momento esperado a criação do web service. Através do Eclipse torna-se muito

simples a criação.( Figura 04).

4° Passo:

Clique com o botão direito sobre a classe que implementa os métodos citados acima.

Botão Direito -> Web Services -> Create Web Service

Figura 04 – Criar Web service

Page 7: Ws Eclipse Db2 Construindo do Servicos v01

7

Em seguida abrirá à

tela abaixo, contendo as

configurações mencionadas

no inicio do tutorial.

Marque a opção:

[v] Publish the Web service

e clique em NEXT >

Figura 05 – Gerando o Web Service. Conferir as configurações.

Figura 06 – Configurando o *.wsdl.

Na Figura 06 , os métodos criados são identificados . Estes métodos são os que usaremos em nossa implementação.

Clique NEXT >

Page 8: Ws Eclipse Db2 Construindo do Servicos v01

8

Na Figura 07, inicie o servidor.

Clique Start Server

Clique NEXT >

Figura 0 7 – Iniciando o Servidor .

Na Figura 08 – Com esta opção marcada permitirá o registro do seu Web Service para que possamos utilizá-lo em outras aplicações.

Para Finalizar marque a opção:

[v] Launch the Web Services Explorer to publish the Web service to a UDDI Registry

Clique Finish

Figura 08 – Registrar o Web service.

Page 9: Ws Eclipse Db2 Construindo do Servicos v01

9

Testando o Web Service Após criado o seu WSDL é possível testar os seus métodos.

5° Passo: Clique no botão Figura 09 WSDL Page.

Retornará a Figura 09.

Como podemos observar com à Figura 10 escolhi o método selectSQL(). Que neste caso implementa uma consulta, entrei com a informação e o mesmo retornou o que está gravado dentro do banco de dados DB2. Isto significa que o teste realizado com Sucesso.

Figura 09 – Testando o Web Service em seu web Server.

Figura 10 – Retornando a informação do banco de dados.

Page 10: Ws Eclipse Db2 Construindo do Servicos v01

10

Criando Web Service Client

Serviço criado, tudo funcionando chegou o momento de utilizar o serviço, ou seja,

consumi-lo. E o nosso amigo Eclipse SDK continua nos ajudando com está

implementação.

Clique: File -> New -> Other -> Web Services -> Web Service Client

Figura 1 1 – Criando Web Service Client.

Page 11: Ws Eclipse Db2 Construindo do Servicos v01

11

Clicando em Next -> abrirá à Figura 12 clique em:

Browse... > Browse... >[-] WSDB2

[-] WebContent

[-] wsdl

DashBoardDAOImp.wsdl

Clique [OK]

Clique [OK]

[OK}

Após definir o arquivo WSDL chegou o momento de criar o cliente clique sobre:

Client Project : e de o nome de [WSDB2Client ] -> [OK] e [Finish]

Figura 12 – Implementando os métodos do DashBoardDaoImp.wsdl.

Figura 13 – Definindo nome do WS Client.

Page 12: Ws Eclipse Db2 Construindo do Servicos v01

12

Se tudo ocorreu certo aparecerá a estrutura abaixo.

Figura 14 – Estrutura do WSDB2Client.

!! IMPORTANTE:

Seu Web Server assim como seu DB2 devem estar rodando para que o web service funcione corretamente.

Page 13: Ws Eclipse Db2 Construindo do Servicos v01

13

Consumindo Web Service

6° Passo: Implementação Java/Comunicação DB2

Crie uma classe MAIN.java para consumir o serviço.

Neste momento estamos implementando o método que está localizado em nosso web

service. E o mesmo está inserindo dados dentro do DB2 utilizando uma

implementação JAVA.

7° Passo: Implementação C# /Comunicação DB2

Agora basta implementar os métodos criados em seu Web Service em sua aplicação em C#.

<- Código ->

public static void main(String[] args) { // TODO Auto-generated method stub try { DashBoardDAOImpService service = new DashBoardDAOImpServiceLocator(); DashBoardDAOImp consumingWS = (DashBoardDAOImp) ser vice.getDashBoardDAOImp(); consumingWS.insert(1, 2, "namekey" , "123" , "235" , "Hello World" ); } catch (ServiceException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

Quadro 03 – Método insert para JAVA/DB2.

<- Código ->

using System ; using WS. localhost ; namespace WS. app_code { public class WSDB2Csharp { public WSDB2Csharp() { } public void test(){ DashBoardDAOImpService consumingDB2 = new DashBoardDAOImpService(); consumingDB2 . insert( 4, 5, "test" , "123" , "255" , "C#" ); } }

}

Quadro 04 – Método insert para C#/DB2.

Page 14: Ws Eclipse Db2 Construindo do Servicos v01

14

Anexos

Todos os códigos citados estão em anexo. E estão disponíveis em download. Conexão com o DB2.

package org.db2.connector; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class DB2ConnectionFactory { static String remotedb = "localhost" ; static String portdb = "50000" ; static String namedb = "WSDB"; //nome do seu banco . static String driver = "com.ibm.db2.jcc.DB2Driver" ; static String connectionURL = "jdbc:db2://" + remotedb + ":" + portdb + "/" + namedb; private static Connection conn = null; private long lastTransaction ; public static Connection getConnection() throws SQLException, ClassNotFoundException{ Properties connProperties = new Properties(); connProperties.put( "user" , "razec" ); //Definir seu usuário . connProperties.put( "password" , "senha" ); //Definir sua senha . Class. forName( driver); return DriverManager. getConnection( connectionURL,connProperties); } public static void closeConnection(Connection conn, Statement stmt, ResultSet rs) throws Exception{ close(conn, stmt, rs); } public static void close(Connection conn, Statement stmt, ResultSet r s) throws Exception{ try{ if(rs != null) rs.close(); if(stmt != null) stmt.close(); if(conn!= null) conn.close(); } catch(Exception e){ throw new Exception(e.getMessage()); } } public static void closeJDBCConnection( final Connection conn) throws SQLException { if (conn != null) { try

Page 15: Ws Eclipse Db2 Construindo do Servicos v01

15

{ conn.close(); } catch (SQLException ex) { throw new SQLException(ex.getMessage()); } } } public static void closeStatement( final Statement stmt) throws SQLException { if (stmt != null) { try { stmt.close(); } catch (SQLException ex) { throw new SQLException(ex.getMessage()); } } } public static void closeResultSet( final ResultSet rs) throws SQLException { if (rs != null) { try { rs.close(); } catch (SQLException ex) { throw new SQLException(ex.getMessage()); } } } }

Page 16: Ws Eclipse Db2 Construindo do Servicos v01

16

DAO Classe DAO package org.dashboard.dao; public interface IDAO { void insert( int id, int qtd, String namekey, String coordX, String coordY, String text) throws Exception; void delete( int id) throws Exception; void update( int id, int qtd, String namekey, String coordX, String coordY, String text) throws Exception; } Classe DashBoardDAOImp package org.dashboard.dao; import java.sql.Array ; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import javax.swing.JOptionPane; import org.dashboard.util.DASHConstants; import org.db2.connector.DB2ConnectionFactory; public class DashBoardDAOImp implements IDAO { static Connection conn; public DashBoardDAOImp(){ try { this. conn = DB2ConnectionFactory. getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void insert( int id, int qtd, String namekey, String coordX, String coordY, String text) throws Exception { // TODO Auto-generated method stub // TODO Auto-generated method stub PreparedStatement psInsert = null; Connection conn = null; if( namekey == null) throw new Exception( "The value it's null" ); try {

Page 17: Ws Eclipse Db2 Construindo do Servicos v01

17

String SQL = "INSERT INTO DASHBOARD (ID, QTD, NAMEKEY, COORD_X, COORD_Y, TEXT)" + "VALUES (?, ?, ?, ?, ?, ?)" ; conn = this. conn; psInsert = conn.prepareStatement(SQL); psInsert.setInt(1, id); psInsert.setInt(2, qtd); psInsert.setString(3, namekey); psInsert.setString(4, coordX); psInsert.setString(5, coordY); psInsert.setString(6, text); int rows = psInsert.executeUpdate(); if (rows != 1) { throw new SQLException( "executeUpdate return value: " + rows); } } catch (SQLException ex) { JOptionPane. showMessageDialog( null, ex.getMessage()); } finally { DB2ConnectionFactory. closeStatement(psInsert); DB2ConnectionFactory. closeJDBCConnection(conn); } } public void delete( final int id) throws Exception { // TODO Auto-generated method stub { PreparedStatement stmtDelete = null; Connection conn = null; if (id == 0) { throw new NullPointerException( "id parameter" ); } try { StringBuffer sbDelete = new StringBuffer(); sbDelete.append( "DELETE FROM " ); sbDelete.append(DASHConstants. TABLE_NAME); sbDelete.append( " WHERE ID = ?" ); conn = this. conn; stmtDelete = conn.prepareStatement(sbDelete.toString()); stmtDelete.setInt(1, id); int rows = stmtDelete.executeUpdate(); if (rows != 1) {

Page 18: Ws Eclipse Db2 Construindo do Servicos v01

18

throw new SQLException( "executeUpdate return value: " + rows); } } catch (SQLException ex) { JOptionPane. showMessageDialog( null, ex.getMessage()); } finally { DB2ConnectionFactory. closeStatement(stmtDelete); DB2ConnectionFactory. closeJDBCConnection(conn); } } } public void update( int id, int qtd, String namekey, String coordX, String coordY, String text) throws Exception { PreparedStatement stmtUpdate = null; Connection conn = null; // TODO Auto-generated method stub if (namekey == null) { throw new NullPointerException( "NameKey parameter" ); } try { StringBuffer sbUpdate = new StringBuffer(); sbUpdate.append( "UPDATE " ); sbUpdate.append(DASHConstants. TABLE_NAME); sbUpdate.append( " SET " ); sbUpdate.append( " QTD = ?, " ); sbUpdate.append( " NAMEKEY = ?, " ); sbUpdate.append( " COORD_X = ?, " ); sbUpdate.append( " COORD_Y = ?, " ); sbUpdate.append( " TEXT = ? " ); sbUpdate.append( " WHERE " ); sbUpdate.append( " ID = ?" ); conn = this. conn; stmtUpdate = conn.prepareStatement(sbUpdate.toSt ring()); stmtUpdate.setInt(1, qtd); stmtUpdate.setString(2, namekey); stmtUpdate.setString(3, coordX); stmtUpdate.setString(4, coordY); stmtUpdate.setString(5, text); stmtUpdate.setInt(6, id); int rows = stmtUpdate.executeUpdate(); if (rows != 1) { throw new SQLException( "executeUpdate return value: " + rows); }

Page 19: Ws Eclipse Db2 Construindo do Servicos v01

19

} catch (SQLException ex) { System. out.println(ex.getMessage()); } finally { DB2ConnectionFactory. closeStatement(stmtUpdate); DB2ConnectionFactory. closeJDBCConnection(conn); } } public String[] selectSQL(String fieldName) throws SQLException{ String[] ret = null; ArrayList arrL = new ArrayList (); Statement stmt = null; try { stmt = conn.createStatement(); ResultSet result = stmt .executeQuery( "SELECT * FROM DASHBOARD"); System. out.println( "Got results:" ); while (result.next()) { // process results one row at a time arrL.add(result.getString(fieldName)) ; ret = (String[]) arrL.toArray( new String[arrL.size()]) ; } } catch (SQLException e) { // TODO Auto-generated catch block JOptionPane. showMessageDialog( null, e.getMessage()); } finally { DB2ConnectionFactory. closeStatement(stmt); DB2ConnectionFactory. closeJDBCConnection( conn); } return ret; } public int selectQTDSQL(String fieldName) throws SQLException{ int qtd = 0; Statement stmt = null; try { stmt = conn.createStatement(); ResultSet result = stmt .executeQuery( "SELECT * FROM DASHBOARD"); System. out.println( "Got results:" ); while (result.next()) { // process results one row at a time qtd = result.getInt(fieldName); } } catch (SQLException e) { // TODO Auto-generated catch block JOptionPane. showMessageDialog( null, e.getMessage()); } finally { DB2ConnectionFactory. closeStatement(stmt); DB2ConnectionFactory. closeJDBCConnection( conn); } return qtd; }}

Page 20: Ws Eclipse Db2 Construindo do Servicos v01

20

Web Service Client / JAVA package org.wsdb2.test; import javax.xml.rpc.ServiceException; import org.dashboard.dao.DashBoardDAOImp; import org.dashboard.dao.DashBoardDAOImpService; import org.dashboard.dao.DashBoardDAOImpServiceLocator; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { DashBoardDAOImpService service = new DashBoardDAOImpServiceLocator(); DashBoardDAOImp consumingWS = (DashBoardDAOImp) service.getDashBoardDAOImp(); consumingWS.insert(1, 2, "namekey" , "123" , "235" , "Hello World" ); } catch (ServiceException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } Web Service Client / C# using System ; using WS. localhost ; namespace WS. app_code { public class WSDB2Csharp { public WSDB2Csharp() { } public void ConsumingDB2(){ DashBoardDAOImpService consumingDB2 = new DashBoardDAOImpService(); consumingDB2 . insert( 4, 5, "test" , "123" , "255" , "C#" ); } }}