Acesso ao DB2/400 pelo Domino através de Stored Procedures
Uma Stored Procedure é um programa compilado e que pode executar comandos SQL. São geralmente utilizadas em aplicações cliente/servidor, especialmente em transações on-line (OLTP).
Existem dois tipos de Stored Procedures:
* "External": podem ser escritas em diferentes linguagens (COBOL, RPG, C, SQL, REXX e Java), e não contém necessariamente comandos SQL.
* "SQL": são escritas integralmente em SQL.
As Aplicações Domino, com transações on-line e integração com banco de dados relacional corporativo, podem fazer uso de Stored Procedures do OS/400 para melhorar significativamente a performance da aplicação, principalmente em conexões de baixa velocidade ou quando o tempo de resposta é importante na aplicação via Web.
Existem boas razões para utilizar Stored Procedures: integridade transacional, segurança, além de uma melhor performance obtida em aplicações cliente/servidor e web com grande processamento transacional on-line, utilizando a lógica da programação no servidor.
Uma Stored Procedure pode executar vários comandos SQL e retornar um único resultado com dados relevantes a essa execução, razão para uma integridade transacional. Desta forma, o código executado na parte cliente efetua somente uma chamada, que é executada no servidor, e recebe o resultado com dados solicitados. Também, é mais simples manter as funções de banco de dados tais como Commit e Rollback.
A utilização desta técnica também proporciona segurança, pois a aplicação pode ter acesso somente para executar a Stored Procedure, e não ter acesso às diversas tabelas e bancos de dados para efetuar diretamente a operação pela aplicação.
As Stored Procedures são programas pré-compilados, que são executados no servidor. Caso sejam incluídos comandos SQL tanto dinâmicos como estáticos, os mesmos são preparados quando o programa é compilado, o que melhora sua performance. Para uma aplicação cliente/servidor com grande volume de transações e acesso ao banco de dados, o número de operações de I/O solicitado pela estação-cliente é significativamente reduzido, pois são substituídas pela chamada à Stored Procedure, a qual, já no servidor, executa todas as operações de I/O relativas à transação solicitada pela mesma.
Pode-se definir uma Stored Procedure , tanto uma "External Procedure", como uma "SQL Procedure", através do AS/400 Operations Navigator que é um componente do produto Client Access do AS/400, ou utilizar o comando SQL: "CREATE PROCEDURE".
A chamada da Stored Procedure pode ficar localizada no código contido num agente Notes/Domino que é executado no servidor. Este código pode ser escrito tanto em Java como em LotusScript (linguagem de programação Notes/Domino). A execução desse agente é ativada pelo evento Notes/Domino "WebQuerySave" quando um formulário é preenchido e submetido à execução. Esse formulário, exibido através de um browser (Netscape ou Internet Explorer), contém os campos que serão utilizados na chamada da Stored Procedure e um botão tipo "Submit".
Como exemplo, o formulário Notes/Domino deve conter um campo chamado "SaveOptions", com valor zero, informando que estes dados não serão salvos num novo documento Notes/Domino, além dos parâmetros (campos) de entrada desejados e de um botão "Submit" (click event) com o seguinte código:
@Command([FileSave]);
@Command([FileCloseWindow])
Quando este botão é acionado numa janela de um browser, o formulário é submetido e ativado o evento "WebQuerySave", contendo o seguinte código:
@Command([ToolsRunMacro];"NomedoAgenteJava")
Então, o agente Web Notes/Domino chamado "NomedoAgenteJava" é executado no servidor Domino, utilizando os campos definidos no respectivo formulário como parâmetros para a chamada da Stored Procedure.
A seguir estão partes do código de um agente Java do Domino ("NomedoAgenteJava") ...
Para registrar o driver a ser utilizado no agente, através da classe DriverManager contida no pacote java.sql:
DriverManager.registerDriver(new com.ibm.db2.jdbc.app.DB2Driver())
Para conexão ao gerenciador do banco de dados:
Connection conn = DriverManager.getConnection("jdbc:db2://localhost", UserId, Password)
Para preparar a chamada à Stored Procedure "SPROC", utilizando o objeto de conexão:
CallableStatement cs = conn.prepareCall("CALL LIBRARY.SPROC(?,?,?)")
Declarando os tipos dos parâmetros para a Stored Procedure:
cs.setString(1, parametroINPUT1.trim())
cs.registerOutParameter (2, Types.CHAR)
cs.registerOutParameter (3, Types.DECIMAL)
Chamando efetivamente a Stored Procedure:
cs.execute()
Se a chamada à Stored Procedure foi realizada com sucesso, você pode obter os valores do resultado:
String parametroOUTPUT2 = cs.getString(2)
String parametroOUTPUT3 = cs.getBigDecimal(3,2)
Finalizando, para fechar a conexão efetuada:
cs.close()
conn.close()
O código na íntegra deste exemplo pode ser obtido pela Internet. Veja o Redbook SG24-6203-00, na referência abaixo, "Appendix B. Using the additional material"
Referências:
Redbook SG24-4249-02, DB2 UDB for AS/400 Advanced Database Functions
Redbook SG24-6203-00, New Enterprise Integration Functions for Lotus Domino for AS/400
07/03/2001
Fonte: www.recursos-as400.com