Execução de um programa java

17 respostas
D

Bom dia galera!
E o seguinte, eu fiz uma aplicação aqui e por agora nao vai dar tempo de construir a interface grafica da mesma, portanto ela tem alguns System.out.print() que serao impressos na tela durante a execução do programa. Bom, utilizei o Eclipse para construir a aplicação e agora queria testa-la no servidor. A aplicação contem a classe principal (main) que faz o que eu quero, porem eu nunca fiz um programa pra desktop, entao eu nao sei como rodar essa aplicação fora do eclipse.A estrutura da aplicação esta assim:
Se nao der pra vizualizar o endereço e este aqui http://picasaweb.google.com/desfrage/DropBox?authkey=Gv1sRgCNKp2Nu13qC-1gE#5410591204859998066
Desta forma, eu queria rodar o meu programa na linha de comando como um serviço. Tipo, todos os dias as 22:00 o programa vai ser executado e no final ele se fecha e aguarda ate no outro dia as 22:00 para ser executado novamente. Gostaria de saber, como eu faço para desponibilizar minha aplicação no servidor desta forma? Ai galera, grato desde ja pela coperação.
Minha classe principal e esta:

package teste.testeVerificaData;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import teste.testeVerificaData.ReadyXml;

public class ConectaBancosTeste {

	public static void main(String[] args) {
		ConexaoBDTeste conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		String UserName = "";
		String CompName = "";
		String DocName = "";
		String Pages = "";
		String JobSize = "";
		Timestamp SubmitDate ;
		Timestamp LastUploadOrigem;


		//******************************************************************//
		// Bloco que puxa os dados das bases e insere na tabela PRNWATCH respectiva	//		
		//******************************************************************//		
		try {
			for (int cont_host= 1; cont_host<=4; cont_host++) {

				DadosEntradaVoteste infoHost = new DadosEntradaVoteste();
				infoHost.setNum_Host(cont_host);
				DadosEntradaVoteste dados = new DadosDAOteste().verificaHost(infoHost);

				String URLCompleta = dados.getURLCompleta();
				String UnidadeHost = dados.getUnidade();
				String Login = dados.getLogin();
				String Senha = dados.getSenha();
				String Tabela_Origem =  dados.getTabela_Origem();
				String Tabela_Destino = dados.getTabela_Destino();
				//******************************************************************//
				// Bloco que verifica as datas inseridas na tabela "LAST_UPLOAD"	//		
				//******************************************************************//	
				DadosEntradaVoteste paramCompDatas = new DadosEntradaVoteste();
				paramCompDatas.setURLCompleta(URLCompleta);
				paramCompDatas.setUnidade(UnidadeHost);
				paramCompDatas.setLogin(Login);
				paramCompDatas.setSenha(Senha);
				paramCompDatas.setTabela_Origem(Tabela_Origem);
				paramCompDatas.setTabela_Destino(Tabela_Destino);

				DadosEntradaVoteste dataReturn = new DadosDAOteste().consultaLastUpload(paramCompDatas);
				String UnidadeLastUpload = dataReturn.getUnidade();
				Timestamp UltimaDataLastUpload= dataReturn.getLastUpload();

				DadosEntradaVoteste comparaData = new DadosEntradaVoteste();				
				comparaData.setURLCompleta(URLCompleta);
				comparaData.setUnidade(UnidadeLastUpload);  
				comparaData.setLogin(Login);
				comparaData.setSenha(Senha);
				comparaData.setTabela_Origem(Tabela_Origem);
				comparaData.setTabela_Destino(Tabela_Destino);
				comparaData.setLastUpload(UltimaDataLastUpload);

				DadosEntradaVoteste resultCompData = new DadosDAOteste().comparaDatasLastUpload(comparaData);
				DateFormat df = new SimpleDateFormat ("dd/MM/yyyy HH:mm:ss");
				Timestamp dataLastUpload = resultCompData.getLastUpload();
				String dataLastUploadFormatada =  (df.format (dataLastUpload)); 
				Timestamp dataTabelaOrigem = resultCompData.getLastUpload2();

				if (dataLastUpload.equals(dataTabelaOrigem)){
					System.out.print("Não ha upload a ser feito para a base : "+UnidadeHost+"\n");
				}else {
					conn = new ConexaoBDTeste(Login, Senha, ConfiguracoeBDDAOteste.DRIVER, URLCompleta);
					conn.conectar();
					ps = conn.getStatement("select * from "+Tabela_Origem.trim()+" where submitdate >"+"'"+dataLastUploadFormatada+"'");
					rs = ps.executeQuery();

					int cont_files_imports = 0;
					while (rs.next()){
						UserName = rs.getString("UserName");
						CompName = rs.getString("ComputerName");
						DocName = rs.getString("DocName");
						Pages = rs.getString("Pages");
						JobSize = rs.getString("JobSize");
						SubmitDate = rs.getTimestamp("SubmitDate");
						cont_files_imports++;

						//***Setando os atributos de DadosEntradaVO.***//
						DadosServicesteste dadosSrv = ServicesFactoryteste.getDadosServices();
						DadosEntradaVoteste dadosEntradaVo = new DadosEntradaVoteste();
						dadosEntradaVo.setUserName(UserName);
						dadosEntradaVo.setCompName(CompName);
						dadosEntradaVo.setDocName(DocName);
						dadosEntradaVo.setPages(Pages);
						dadosEntradaVo.setJobSize(JobSize);
						dadosEntradaVo.setSubmitDate(SubmitDate);
						dadosEntradaVo.setUnidade(UnidadeHost);
						dadosEntradaVo.setURLCompleta(URLCompleta);
						dadosEntradaVo.setLogin(Login);
						dadosEntradaVo.setSenha(Senha);
						dadosEntradaVo.setTabela_Destino(Tabela_Destino);
						dadosEntradaVo.setNum_Host(cont_host);
						try{
							dadosSrv.inserirDados(dadosEntradaVo);
						}catch(Exception _ex){
							_ex.printStackTrace();
						}
						//System.out.println("("+UserName+")( "+CompName+") ("+DocName+") ("+Pages+") ("+JobSize+") ("+SubmitDate+")");
					}
					conn.desconectar();
					System.out.println("O upload da Base "+Tabela_Destino+" foi concluido com sucesso!");
					System.out.println(ConexaoBDTeste.status + cont_files_imports);

					//******************************************************************//
					// Bloco que confere a ultima data e atualiza na tabela LAST_UPLOAD	//		
					//******************************************************************//
					try{
						DadosServicesteste dadosSrv = ServicesFactoryteste.getDadosServices();
						LastUploadOrigem = dadosSrv.verificaUltimaDataInclusao(Tabela_Destino);
						DadosEntradaVoteste dadosEntradaVoteste = new DadosEntradaVoteste();
						dadosEntradaVoteste.setUnidade(UnidadeHost);
						dadosEntradaVoteste.setLastUpload(LastUploadOrigem);
						dadosEntradaVoteste.setTabela_Destino(Tabela_Destino);
						DadosEntradaVoteste dadosRetorno = new DadosDAOteste().verificaDataLastUpload(dadosEntradaVoteste);
						//	String UnidadeRetorno = dadosRetorno.getUnidade();
						Timestamp LastUploadRetorno = dadosRetorno.getLastUpload();
						if(LastUploadRetorno != null){
							System.out.print("A data existe: "+LastUploadRetorno+"\n");
							dadosSrv.updateLastUpload(dadosEntradaVoteste);
						}else{
							System.out.printf("Nao existe uma data no campo \n Fazendo a inserção no campo \n");
							dadosSrv.inserirUltimaData(dadosEntradaVoteste);
						}
					}catch(Exception e){
						e.printStackTrace();
					}
				}

			}
			//Executa o programa ReadyXML para ler e gravar o xml
			ReadyXml x = new ReadyXml();
			x.readyXML();
		}catch(Exception e){
			e.printStackTrace();
		}

	}
}

17 Respostas

andrerios

Pra fazer esse agendamento vc pode usar o Quartz… e pra rodar cria um jar com sua aplicacao…

:wink:

ivandasilva

Cara gera um jar pelo Eclipse e na sua tarefa agendada ou seja o que for executa este jar, quando você cria o jar pelo eclipse, tem a opção de definir qual a classe principal(main)

Espero ter ajudado.

lina

Oi,

Primeiro você deverá criar seu jar:

1º Entre em seu eclipse;

2º Clique com o botão direito do mouse no seu projeto;

3º Na tela Export, selecione Java->JAR file;

4º Deixe selecionado apenas o pacote principal;

5º Digite um caminho para o seu jar;

6º Clicar em Next;

7º Clicar em Next;

8º Na janela de: Manifest Specification, deixe marcado a opção: Generate the manifest file e Save the manifest in the workspac;

9º Em Browse selecione aonde você irá jogar seu MF e escolha o nome para o mesmo;

10º Marque a opção Seal contents -> Seal Some packages;

11º Busque sua main class;

12º Clicar em Finish;

Para ele executar automático no horário, você poderá optar por criar um Thread para ela rodar de tempos em tempos. Ou então, utilizar o próprio agendador de tarefas do S.O

Tchauzin!

D

Bom, eu fiz todos os passos que o lina falou, so nao entendi o motivo dos passos 8 e 9.Porque e preciso gerar este arquivo? e onde eu uso ele?
E como eu executo o .jar gerado, via linha de comando? pq eu executei desta forma: java -jar nome_do_arquivo.jar e me retornou esses erros no console do windows:

Erro ao carregar o driver: net.sourceforge.jtds.jdbc.Driver java.lang.NullPointerException at teste.testeVerificaData.ConexaoBDTeste.getStatement(ConexaoBDTeste.ja va:74) at teste.testeVerificaData.DadosDAOteste.verificaHost(DadosDAOteste.java :216) at teste.testeVerificaData.ConectaBancosTeste.main(ConectaBancosTeste.ja va:34) Exception ---java.lang.NullPointerException Erro ao carregar o driver: net.sourceforge.jtds.jdbc.Driver java.lang.NullPointerException at teste.testeVerificaData.ConexaoBDTeste.getStatement(ConexaoBDTeste.ja va:74) at teste.testeVerificaData.DadosDAOteste.consultaLastUpload(DadosDAOtest e.java:262) at teste.testeVerificaData.ConectaBancosTeste.main(ConectaBancosTeste.ja va:53) Exception em consultaLastUpload() java.lang.NullPointerException java.lang.NullPointerException at teste.testeVerificaData.ConexaoBDTeste.desconectar(ConexaoBDTeste.jav a:63) at teste.testeVerificaData.DadosDAOteste.consultaLastUpload(DadosDAOtest e.java:273) at teste.testeVerificaData.ConectaBancosTeste.main(ConectaBancosTeste.ja va:53)
Grato pessoa!

Metal_Java_Full

Se você tiver acess a netbeans será bem mais fácil!
O Eclipse, as vezes, não aceita as especificaçoes do se projeto.
No netbeans clique com o botao direito no projeto e selecione “Limpar e Contruir”

Ele vai te gerar uma pasta “dist”(se eu nao me engano…)
Lá vai estar o teu arquio .jar
É so executar!!

vlew

D

desfrage:
Bom, eu fiz todos os passos que o lina falou, so nao entendi o motivo dos passos 8 e 9.Porque e preciso gerar este arquivo? e onde eu uso ele?
E como eu executo o .jar gerado, via linha de comando? pq eu executei desta forma: java -jar nome_do_arquivo.jar e me retornou esses erros no console do windows:

Erro ao carregar o driver: net.sourceforge.jtds.jdbc.Driver java.lang.NullPointerException at teste.testeVerificaData.ConexaoBDTeste.getStatement(ConexaoBDTeste.ja va:74) at teste.testeVerificaData.DadosDAOteste.verificaHost(DadosDAOteste.java :216) at teste.testeVerificaData.ConectaBancosTeste.main(ConectaBancosTeste.ja va:34) Exception ---java.lang.NullPointerException Erro ao carregar o driver: net.sourceforge.jtds.jdbc.Driver java.lang.NullPointerException at teste.testeVerificaData.ConexaoBDTeste.getStatement(ConexaoBDTeste.ja va:74) at teste.testeVerificaData.DadosDAOteste.consultaLastUpload(DadosDAOtest e.java:262) at teste.testeVerificaData.ConectaBancosTeste.main(ConectaBancosTeste.ja va:53) Exception em consultaLastUpload() java.lang.NullPointerException java.lang.NullPointerException at teste.testeVerificaData.ConexaoBDTeste.desconectar(ConexaoBDTeste.jav a:63) at teste.testeVerificaData.DadosDAOteste.consultaLastUpload(DadosDAOtest e.java:273) at teste.testeVerificaData.ConectaBancosTeste.main(ConectaBancosTeste.ja va:53)
Grato pessoa!

Porem continua com este problema, como resolvo isso? Ele nao encontra meu driver de conexao com o banco : net.sourceforge.jtds.jdbc.Driver. Como resolver isto?
Grato!

D

Poxa pessoal, me da uma ajuda ai, ja procurei pra tudo em quanto e canto e nao achei uma solução para o problema com esse erro, parece que ninguem nunca teve. Me ajuda ai, por favor

M

Você usa JARs externos na sua aplicação e isso está atrapalhando na hora de exportar.

Primeiro: certifique-se que o JAR contendo a classe “net.sourceforge.jtds.jdbc.Driver” está configurado para ser exportado com o projeto (nas propriedades do projeto vá em “Java Build Path” e na aba “Order and Export” certifique-se que seu JAR está selecionado).

Depois, clique com o botão direito do projeto e escolha “Export”. Escolha “Java -> Runnable JAR File” (deve ser esta opção pois assim o Eclipse reempacota os JAR que são dependências e tudo funciona!).

Agora em “Launch configuration” escolha sua classe com o método main. Em “Export destination” escolha onde o JAR será gerado e com qual nome. Em “Library handling” escolha a opção de extrair (importante!). Basta clicar em “Finish” e deve funionar.

Quanto ao agendamento, faça pelo sistema mesmo (cron no Linux ou agendador de tarefas no Windows).

PS: isso tudo para o Eclipse Ganymede (3.5) se estiver com uma versão mais antiga algumas coisas podem não ser aplicáveis.

D

E ai pessoal! é, infelizmente eu tentei rodar o meu jar em um computador com o windows server 2003 e deu erro.
Primeiro eu instalei o jre-6u17-windows-i586-s.exe na maquina e depois fui ao prompt de comando e executei o jar desta forma:
C:\JAR>java -jar alien.jar

Este comando me retorna um erro:

Erro ao efetuar conexao.java.sql.SQLException: I/O Error: SSO Failed: Native SSP

I library not loaded. Check the java.library.path system property.

java.lang.NullPointerException

at alien.dao.ConexaoBD.getStatement(ConexaoBD.java:71)

at alien.aplicacao.ConectaBancos.main(ConectaBancos.java:89)

09/12/2009 17:26:28 alien.aplicacao.ConectaBancos main

INFO: Exception para iniciar o programa = java.lang.NullPointerException

Poxa, na minha maquina rodou belezinha, porem neste servidor nao, o que pode ser pessoal? Por favor, me ajudem. Grato

Ironlynx

desfrage, você seguiu a dica do marcobiscaro2112?Tome sempre cuidado com a vinculação de jars externos.Sempre dá dor de cabeça(principalmente quando alguém taca um jar na pasta ext dentro da JDK…).

D

Segui sim Ironlynx, fiz exatamente como ele falou, alias, como da primeira vez deu esse erro, eu refiz todos os passos e acrescentei todos os jars que estavam na lista order e export, mas mesmo assim deu erro. Putz, to passando mal na mao desse java, rsrs. Quem souber, me da uma ajuda ai gente. Por favor

D

E necessario criar alguma variavel de ambiente pra que o prgrama rode? No caso essa maquina so vai rodar a aplicação. Por favor

M

desfrage:
E ai pessoal! é, infelizmente eu tentei rodar o meu jar em um computador com o windows server 2003 e deu erro.
Primeiro eu instalei o jre-6u17-windows-i586-s.exe na maquina e depois fui ao prompt de comando e executei o jar desta forma:
C:\JAR>java -jar alien.jar

Este comando me retorna um erro:

Erro ao efetuar conexao.java.sql.SQLException: I/O Error: SSO Failed: Native SSP

I library not loaded. Check the java.library.path system property.

java.lang.NullPointerException

at alien.dao.ConexaoBD.getStatement(ConexaoBD.java:71)

at alien.aplicacao.ConectaBancos.main(ConectaBancos.java:89)

09/12/2009 17:26:28 alien.aplicacao.ConectaBancos main

INFO: Exception para iniciar o programa = java.lang.NullPointerException

Poxa, na minha maquina rodou belezinha, porem neste servidor nao, o que pode ser pessoal? Por favor, me ajudem. Grato


Você percebeu que a exceção mudou? O que há exatamente na classe ConexaoBD na linha 71?

D

Bom a classe conecta banco e esta

package alien.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
 * Classe com os métodos para tratar 
 * conexão com o banco de dados.
 * 
 * */
public final class ConexaoBD{
	
	private String usuario; 
	
	private String senha; 
	
	private String driver; 
	
	private String url;
	
	//private String unidade;
	
	private Connection conexao;
	
	public static  String status;
	
	/**
	 * Construtor.
	 * */
	public ConexaoBD(String pU, String pS, String pD, String pUrl) {
		usuario = pU;
		senha = pS;
		driver = pD;
		url = pUrl;
		
		
	}
	
	/**
	 * Conecta-se ao Banco de dados.
	 * */
	public void conectar() {
		
		try {
			Class.forName(driver);
			conexao = DriverManager.getConnection(url, usuario, senha);
			status = "conectado ao banco";
		} catch (ClassNotFoundException ec) {
			System.out.println("Erro ao carregar o driver: " + driver);
		} catch (SQLException es) {
			System.out.println("Erro ao efetuar conexao." + es);
		}
	}
	
	/**
	 * Desconecta-se do Banco de dados.
	 * */
	public void desconectar() {
		try {
			conexao.close();
			status = "desconectado";
		} catch (SQLException es) {
			System.out.println("Erro ao fechar conexao");
		}
	}
	
	/**
	 * Prepara o Statement para o banco de dados.
	 * */
	public PreparedStatement getStatement(String sql) throws SQLException {
		return conexao.prepareStatement(sql);
	}
}

E na linha 89 da classe conecta banco:

ps = conn.getStatement("select * from us ");

Puts, parece que esta dando problema no PreparedStatement, o que pode ser pessoal? Nao faço a minima ideia, mesmo pq essa aplicação roda perfeitamente no meu notebook, mas no servidor nao. Alguem saberia? Grato

bestlinux

Cara,

Se a aplicação roda perfeitamente em um local e no outro não, acho que você tem que verificar os seguintes pontos:

  • A tabela existe neste local.
  • A conexão esta sendo feita corretamente. (Verifique IP, usuario e senha)
  • Existe algum bloqueio na conexão com o Banco de Dados.
D

Putz, agora ja nao to entendendo mais nada. A aplicação que estava rodadando no meu note, agora ta dando o mesmo erro:

Erro ao efetuar conexao.java.sql.SQLException: I/O Error: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property.

java.lang.NullPointerException

at alien.dao.ConexaoBD.getStatement(ConexaoBD.java:71)

at alien.aplicacao.ConectaBancos.main(ConectaBancos.java:89)

10/12/2009 10:16:58 alien.aplicacao.ConectaBancos main

INFO: Exception para iniciar o programa = java.lang.NullPointerException

Meu Deus, o que eu faço galera? ja nao sei mais o que esta acontecendo. Me ajudem por favor.

D

Nuuuusssa mae! Vcs nao vao acreditar! rsrs, eu havia feito o backup do projeto 1 hora antes de dar problema, praticamente nao mudei nada depois disso. Peguei o backup e rodei em uma outra “instancia” do eclipse que tenho aqui e rodou perfeitamente. Sinceramente nao sei o que e, deve ser alguma biblioteca corrompida ou algo do genero. Mas de qualquer forma valeu pessoal.

Criado 2 de dezembro de 2009
Ultima resposta 10 de dez. de 2009
Respostas 17
Participantes 8