Execução de um programa java

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();
		}

	}
}

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

:wink:

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.

Oi,

Primeiro você deverá criar seu jar:

Entre em seu eclipse;
Clique com o botão direito do mouse no seu projeto;
Na tela Export, selecione Java->JAR file;
Deixe selecionado apenas o pacote principal;
Digite um caminho para o seu jar;
Clicar em Next;
Clicar em Next;
Na janela de: Manifest Specification, deixe marcado a opção: Generate the manifest file e Save the manifest in the workspac;
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!

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!

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

[quote=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!
[/quote]

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!

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

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.

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

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…).

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

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

[quote=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
[/quote]
Você percebeu que a exceção mudou? O que há exatamente na classe ConexaoBD na linha 71?

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

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.

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.

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.