Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Entendendo a nova propriedade de saída JVM no driver Universal JDBC do DB2 mais recente

Sujan Ghosh, Software Engineer, IBM
Sujan Ghosh
Sujan Ghosh has been a software engineer at the IBM lab in India for more than four years as a member of the DB2 Java common connectivity and pureQuery client optimization team. Most of his projects have been based on DB2 and Java technology. He is an IBM Certified Database Administrator for DB2 for Linux, UNIX, and Windows, and an IBM Certified Solution Developer for XML.

Resumo:  Usando uma nova propriedade global, agora é possível fazer trap de saída de JVM ou System.exit() ao concluir ferramentas SQLJ como db2sqljcustomize e db2sqljbind, usando o Driver Universal JDBC do DB2®. Este artigo explica a propriedade global db2.jcc.sqljToolsExitJVMOnCompletion do Driver Universal JDBC e mostra como usá-la. Um aplicativo Java™ de amostra exemplifica como configurar a nova propriedade.

Data:  27/Jul/2011
Nível:  Intermediário Também disponível em :   Inglês
Atividade:  1017 visualizações
Comentários:  


Introdução

Em um ambiente de aplicativo corporativo típico, aplicativos DB2 geralmente usam as ferramentas SQLJ db2sqljcustomize e db2sqljbind. Essas ferramentas SQLJ chamam programas Java que oferecem o conjunto de ferramentas necessário para customizar e ligar aplicativos SQLJ. No design atual, esses programas Java retornam em seguida para o shell com um código de saída. Isso é feito por meio da chamada System.exit() suportada pela JVM. O valor 0 (zero) indica sucesso, enquanto um código de retorno diferente de zero indica falha no processo de customização ou ligação.

System.exit() significa que a JVM sai e não é adequada para ferramentas de desenvolvimento especiais, como Ant ou Maven, que precisam de uma JVM contínua. No passado, não haveria maneira de fazer trap de System.exit ou da saída da JVM após o processo de customização e ligação. Em tais casos, era preciso executar o aplicativo novamente para continuar com o resto da lógica de negócios. Não haveria problema ao executar os utilitários em um shell script, mas, em uma ferramenta de desenvolvimento especial como Ant, quando o programa Java chama System.exit(), isso pode causar problemas. Por exemplo, se a ferramenta de desenvolvimento, como Ant, operar com um gerenciador de segurança padrão que não faz trap de System.exit e é executado na mesma JVM que o Ant, ele pode sair após o processo de customização ou ligação.

Neste artigo, faremos um tour pela nova propriedade global do Driver Universal JDBC db2.jcc.sqljToolsExitJVMOnCompletion e verá como usá-la.


Pré-requisitos

Para usar a nova propriedade global, são necessários:

db2sqljcustomize é um utilitário usado para processar um perfil SQLJ contendo instruções SQL integradas. Por padrão, o customizador também liga pacotes do DB2.

db2sqljbind liga um perfil SQLJ customizado anteriormente a um banco de dados.

Para detalhes sobre os processos de customização e ligação, consulte o Centro de Informações do DB2.

  • Um aplicativo SQLJ simples e perfil serializado SQLJ — Um aplicativo Java com instruções SQL integradas. A tradução de aplicativos SQLJ produz arquivos .class e um ou mais perfis serializados. Ele chama o compilador Java por padrão.
  • Um aplicativo JDBC simples — Um aplicativo Java simples contendo ferramentas SQLJ como db2sqljcustomize e db2sqljbind.
  • Driver Universal DB2 IBM para SQLJ e JDBC — O Driver Universal é com.ibm.db2.jcc.DB2Driver e está contido em db2jcc.jar. O sqlj.zip contém o tradutor SQLJ.
  • Arquivo de propriedade global DB2JccConfiguration.properties — Este arquivo de recursos é usado para configurar a propriedade db2.jcc.sqljToolsExitJVMOnCompletion. A propriedade pode ser configurada em DB2Configuration.properties ou passada por meio de -D para o comando Java. Há outras maneiras de configurar a propriedade. Consulte a seção do Centro de Informações sobre Customização de IBM Data Server Driver para JDBC e propriedades de configuração SQLJ.

Vantagens da nova propriedade JCC

A nova propriedade global JCC db2.jcc.sqljToolsExitJVMOnCompletion tem um tipo de retorno booleano. O valor padrão para essa propriedade é verdadeiro, o que significa que todas as ferramentas SQLJ chamarão System.exit() ao concluírem. Para fazer trap de System.exit() após a execução das ferramentas SQLJ, é preciso configurar o valor da propriedade como falso: db2.jcc.sqljToolsExitJVMOnCompletion=false.

Havendo ou não um erro, por padrão, a JVM sairá quando System.exit for chamado. A execução de ferramentas SQLJ chama System.exit independentemente de erros. Quando a propriedade é configurada como falsa, o shell recebe um código de retorno 0 mesmo em caso de falha da customização. É possível usar customizeMain programaticamente para obter um código de retorno do método.

Se o valor da propriedade for definido como db2.jcc.sqljToolsExitJVMOnCompletion=false e houver um erro no processo de customização ou ligação, o código de retorno da aplicação será 0.

Se o valor da propriedade for definido como db2.jcc.sqljToolsExitJVMOnCompletion=true e houver um erro no processo de customização ou ligação, o código de retorno do aplicativo será um valor diferente de zero.


Caso de uso e configuração do aplicativo de amostra

Etapa 1: Definindo o caminho de classe

Não se esqueça de colocar os arquivos JAR do Driver Universal db2jcc.jar e sqlj.zip no caminho de classe.

Etapa 2: Criando um aplicativo SQLJ simples

Este aplicativo SQLJ se conecta a um banco de dados com o objeto de origem de dados ds e busca as linhas da tabela Employee existente com o agente iterativo posicionado ByPos.


Lista 1. Programa SQLJ buscando linhas em uma tabela existente
			
import java.sql.*;

// Create connection context class DB2Connect
#sql context DB2Connect; 
			
// Declare positioned iterator ByPos
#sql  iterator ByPos(String,int);

public class sqljapp {

	public static void main(String[] args) throws Exception
	{ 
	// Create a DataSource object ds
	   javax.sql.DataSource ds = 
	    new com.ibm.db2.jcc.DB2SimpleDataSource();
					
	   ((com.ibm.db2.jcc.DB2BaseDataSource) ds).
		setServerName("localhost");

	   ((com.ibm.db2.jcc.DB2BaseDataSource) ds).
		setPortNumber(50000);

	   ((com.ibm.db2.jcc.DB2BaseDataSource) ds).
	      setDatabaseName("SAMPLE");

	   ((com.ibm.db2.jcc.DB2BaseDataSource) ds).
	      setDriverType(4); 
				   
	   java.sql.Connection con = 
	   ds.getConnection("administrator", "passwd");

	   // Creating connection context object db2con
	   DB2Connect db2con = new DB2Connect(con);

	   // Declare the object of ByPos class 
	   ByPos positer;

	   // Use db2con for executing an SQL statement
         #sql[db2con] positer= { select * from EMPLOYEE }; 
    	}

}

Etapa 3: Traduzindo o aplicativo SQLJ

Traduzir o aplicativo gera um arquivo de origem Java padrão e um perfil serializado SQLJ (sqljapp_SJProfile0.ser).


Lista 2. Tradução do programa SQLJ
			
C:\jcc_home3\jcc>sqlj sqljapp.sqlj

Etapa 4: Executando o aplicativo Java

Este é um aplicativo Java simples, no qual parâmetros são passados para o utilitário de customização. O aplicativo Java é executado em uma única JVM sem uma propriedade nova. O aplicativo deve sair para o responsável pela chamada com o código de retorno usando o System.exit(). O código de retorno será 0 se a customização for executada com sucesso. O aplicativo não deve chamar nenhum código (a função fun_checkJVM) após concluir o utilitário db2sqljcustomize.


Lista 3. Aplicativo Java sem usar a propriedade db2.jcc.sqljToolsExitJVMOnCompletion
			
public class JVMexit {

	public static void main(String a[]) throws Exception {

		// Array of String as parameters to db2sqljcustomize
		String[] cmd = { "-url", "jdbc:db2://localhost:50000/SAMPLE", 
		"-user","administrator", "-password", "passwd", "-onlinecheck",
		"YES", "-rootPkgName", "BCB", "-collection", "COL18",
		"-tracefile", "trace_cust.txt", "-tracelevel", "TRACE_ALL",
		"sqljapp_SJProfile0.ser" };

		// Create an object of db2sqljcustomize
		com.ibm.db2.jcc.sqlj.Customizer cust = new 
		com.ibm.db2.jcc.sqlj.Customizer();

		// Execute the db2sqljcustomize with arguements
		cust.main(cmd);

		/* Function to check if JVM exited or not,if exited it will not call
		   below function or else it will. */
		fun_checkJVM();

	}

	private static void fun_checkJVM() {
		System.out.println("JVM didn't exit");

	}

}

Até agora, foi possível ver como executar o aplicativo Java em uma única JVM sem usar a nova propriedade global. (O valor padrão da propriedade é true — db2.jcc.sqljToolsExitJVMOnCompletion=true). Agora, vamos examinar um cenário no qual o valor da propriedade pode ser definido como db2.jcc.sqljToolsExitJVMOnCompletion=false no arquivo de propriedades globais DB2JccConfiguration.properties para executar o mesmo aplicativo Java.

Etapa 5: Arquivo global DB2JccConfiguration.properties

Crie um arquivo de recursos chamado DB2JccConfiguration.properties, coloque-o no caminho de classe e inclua a propriedade, conforme mostrado abaixo.


Lista 4. DB2JccConfiguration.properties
			
//Add the property value as false in file
db2.jcc.sqljToolsExitJVMOnCompletion=false
			

Etapa 6: Executar o aplicativo Java

O aplicativo irá executar o código após a conclusão do processo de customização. A função fun_checkJVM() será chamada, o que prova que o aplicativo não chamou System.exit() após a conclusão do processo de customização.

Agora, veja um cenário no qual o aplicativo Java inteiro deve ser executado com um erro no processo de customização. Ao configurar o valor da propriedade como falso (db2.jcc.sqljToolsExitJVMOnCompletion=false), é possível fazer isso também.

Etapa 7: Executar o aplicativo Java incluindo parâmetros errados

No exemplo de execução de um aplicativo com parâmetros errados, um erro existe no customizador/processo de ligação, apesar de o aplicativo chamar function fun_checkJVM(), o que prova que o aplicativo não chama System.exit() após a conclusão do processo de customização.


Lista 5. Aplicativo Java incluindo parâmetros errados
			
public class JVMexit {

	public static void main(String a[]) throws Exception {

		// Array of String with wrong port # as parameter to db2sqljcustomize
		
		String[] cmd = { "-url", "jdbc:db2://localhost:5000/SAMPLE", 
		"-user","administrator", "-password", "passwd", "-onlinecheck",
		"YES", "-rootPkgName", "BCB", "-collection", "COL18",
		"-tracefile", "trace_cust.txt", "-tracelevel", "TRACE_ALL",
		"sqljapp_SJProfile0.ser" };

		// Create an object of db2sqljcustomize
		com.ibm.db2.jcc.sqlj.Customizer cust = new 
		com.ibm.db2.jcc.sqlj.Customizer();

		// Execute the db2sqljcustomize with arguments
		cust.main(cmd);

		/* Function to check if JVM exited or not,if exited it will not call
		   below function or else it will. */
		fun_checkJVM();

	}

	private static void fun_checkJVM() {
		System.out.println("JVM didn't exit");

	}

}
			


Conclusão

Neste artigo, mostramos como é possível usar a nova propriedade db2.jcc.sqljToolsExitJVMOnCompletion para fazer trap de System.exit() após a conclusão de ferramentas SQLJ, como customização e ligação. Quando o valor da propriedade é configurado como falso, o aplicativo não sai da JVM, mesmo que haja um erro na execução das ferramentas SQJL, e é possível continuar com a execução do aplicativo.


Recursos

Aprender

Obter produtos e tecnologias

Discutir

Sobre o autor

Sujan Ghosh

Sujan Ghosh has been a software engineer at the IBM lab in India for more than four years as a member of the DB2 Java common connectivity and pureQuery client optimization team. Most of his projects have been based on DB2 and Java technology. He is an IBM Certified Database Administrator for DB2 for Linux, UNIX, and Windows, and an IBM Certified Solution Developer for XML.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Tecnologia Java, Information Management
ArticleID=743072
ArticleTitle=Entendendo a nova propriedade de saída JVM no driver Universal JDBC do DB2 mais recente
publish-date=07272011
author1-email=sghosh.raj@in.ibm.com
author1-email-cc=

Conheça a IBM da sua cidade

Virtual Branch Office Brasil

A IBM está mais perto do que você imagina!


Tags

Help
Use o campo de pesquisa para encontrar todos os tipos de conteúdo no My developerWorks com essa tag.

Use a barra de rolagem para ver mais ou menos tags.

Tags populares mostra as principais tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Minhas tags mostra suas tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Use o campo de pesquisa para localizar todos os tipos de conteúdo no Meu developerWorks com essa tag. Tags populares mostra as tags principais para essa zona de conteúdo particular (por exemplo, tecnologia Java, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere). Minhas tags mostra as suas tags para essa zona de conteúdo em particular (por exemplo, tecnologia Java, Linux, WebSphere).