Problemas com uma exceção!

24 respostas
rodrigo.fai

Olá pessoal!

Tenho um servidor local onde costumo rodar e testar minhas aplicações! Essa semana eu finalizei um projeto que roda perfeitamente sem problemas nenhum(no servidor local da minha máquina).
Mas essa aplicação deve rodar em um outro servidor da minha empresa, onde os clientes terão acesso.
Meu projeto rodava perfeitamente neste outro servidor até q eu criei um arquivo .properties contendo informações de conexão com o banco d dados, afim de tornar a aplicação mais flexível.
Não estou conseguindo saber pq ao tentar acessar tao arquivo acorre a exceção:

java.lang.NullPointerException
	java.lang.Class.forName0(Native Method)
	java.lang.Class.forName(Unknown Source)
	net.sytes.tsda.zeus.dao.DAOConnectorZeus.conecta(DAOConnectorZeus.java:20)

Eu faço a busca da arquivo usando o seguinte código:

this.arquivo = getClass().getResource(pFile).getPath();

Lembrando q em minha máquina roda perfeitamente! Este problema está acontecendo quando eu migro p/ outro servidor!
Já verifiquei os configurações de conexão com a base da dados e está tudo ok.

Alguém sabe me dizer oq pode estar acontcendo?

Vlw.

24 Respostas

T

Se na sua máquina está rodando perfeitamente, verifique as bibliotecas da lib do servidor de aplicação da outra máquina ou a versão da jvm.

rodrigo.fai

A versão da jvm é a mesma! Quanto as bibliotecas, eu utilizo somente a do banco de dados, e já está corretamente configurado no outro servidor!

adriano.ferranti

Você já tentou gerar um trace para verificar se as propriedades de conexão estão sendo lidas corretamente do arquivo .properties ?

rodrigo.fai

Como eu gero um trace?

erickcellani
try {
//codigo
} catch(Exception e) {
	e.printStackTrace()
}

:slight_smile:

adriano.ferranti

Como eu gero um trace?

Apenas dê um

System.out.println(valor_esperado);

para ver se os valores estão sendo lidos corretamente do arquivo .properties

Se você estiver usando o log4j pode usar:

logger.info(valor_esperado);
rodrigo.fai
try {
//codigo
} catch(Exception e) {
	e.printStackTrace()
}

:)

Fiz o trace aqui mas nao consegui solucionar o problema!
Vejam c fiz certo… o código abaixo é responsável por buscar o arquivo .properties.

String arquivo = getClass().getResource(pFile).getPath();

Me parece q ele encontra o arquivo normalmente, porem me retorna null ao tentar buscar uma informação!

public String getJdbcDriver()
	{
		try
		{
			String jdbcDriver = this.properties.getProperty("jdbc.driver");
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
		return this.jdbcDriver;
	}

Esse método acima esta retornando null!!

Pq isto esta acontecendo somente no outro servidor e nao na minha máquina?

erickcellani
this.properties.getProperty("jdbc.driver")

como está isso lá no seu arquivo properties??

rodrigo.fai

Como eu gero um trace?

Apenas dê um

System.out.println(valor_esperado);

para ver se os valores estão sendo lidos corretamente do arquivo .properties

Se você estiver usando o log4j pode usar:

logger.info(valor_esperado);

Os valores estão sendo lidos corretamente, senão a minha aplicacao nao estaria rodando normalmente na minha máquina!!! O problema eh quando eu migro p/ outra maquina, ou seja, quando eu armazeno em outro servidor!

rodrigo.fai

erickcellani:
this.properties.getProperty("jdbc.driver")

como está isso lá no seu arquivo properties??

Meu arquivo .properties esta assim:

#Configurações de conexão ao banco de dados
jdbc.driver=org.firebirdsql.jdbc.FBDriver
url.zeus=jdbc:firebirdsql://127.0.0.1:3050/d:/softwares/windows/sistema zeus v2.0.0/ZEUS.GDB
url.id=jdbc:firebirdsql://127.0.0.1:3050/d:/softwares/Windows/Sistema ZEUS v2.0.0/Datalogger/
user=SYSDBA
password=masterkey

As propriedades url.zeus e url.id eu altero de acordo com a máquina, ou seja, ond o base de dados esta armazenada em cada maquina!

adriano.ferranti

Ele não está achando o arquivo de properties no servidor.
A sua propriedade properties é do tipo PropertyResourceBundle ?

rodrigo.fai

adriano.ferranti:
Ele não está achando o arquivo de properties no servidor.
A sua propriedade properties é do tipo PropertyResourceBundle ?

Como eu sei qual é a minha propriedade properties?

erickcellani

rodrigo.fai… foi vc mesmo que criou o properties???

adriano.ferranti

rodrigo.fai:
adriano.ferranti:
Ele não está achando o arquivo de properties no servidor.
A sua propriedade properties é do tipo PropertyResourceBundle ?

Como eu sei qual é a minha propriedade properties?

Me refiro ao tipo da sua variável this.properties

Você pode postar todo seu código? Acho que fica mais fácil…

rodrigo.fai

adriano.ferranti:
rodrigo.fai:
adriano.ferranti:
Ele não está achando o arquivo de properties no servidor.
A sua propriedade properties é do tipo PropertyResourceBundle ?

Como eu sei qual é a minha propriedade properties?

Me refiro ao tipo da sua variável this.properties

Você pode postar todo seu código? Acho que fica mais fácil…

Saquei!! Eh do tipo Properties msm!!

Seque abaixo o código da classe responsavel por carregar o arquivo .properties:

package net.sytes.tsda.zeus.properties;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class Propertie
{
	private Properties properties = new Properties();
	private FileInputStream fileInputStream = null;
	
	public Propertie(String pFile)
	{
		String arquivo = getClass().getResource(pFile).getPath();
		getFile(arquivo);
	}
	
	public void getFile(String pFile)
	{
		File file = new File(pFile);
		try
		{
			this.fileInputStream = new FileInputStream(file);
			this.properties.load(fileInputStream);
		}
		catch (FileNotFoundException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public String getJdbcDriver()
	{
		String jdbcDriver = this.properties.getProperty("jdbc.driver");
		
		return jdbcDriver;
	}
	
	public String getBanco(String pBanco)
	{
		String banco = this.properties.getProperty(pBanco);
		
		return banco;
	}
	
	public String getUser()
	{
		String user = this.properties.getProperty("user");
		
		return user;
	}
	
	public String getPassword()
	{
		String password = this.properties.getProperty("password");
		
		return password;
	}
	
	public String getPath()
	{
		String path = this.properties.getProperty("diretorio.figuras");
		
		return path;
	}
	
	public void closeFile()
	{
		try
		{
			this.fileInputStream.close();
		}
		catch (IOException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
rodrigo.fai

Foi eu msm q criei a properties!!!

adriano.ferranti

Você pode tentar usar

public Propertie(String pFile)
{
   String arquivo = Propertie.class.getClassLoader().getResource(pFile).getPath();
   getFile(arquivo);
}
rodrigo.fai

adriano.ferranti:
Você pode tentar usar

public Propertie(String pFile) { String arquivo = Propertie.class.getClassLoader().getResource(pFile).getPath(); getFile(arquivo); }

Não deu certo ainda… continua dando NullPointerException soh q agora na linha ond tento corregar o arquivo:

String arquivo = Propertie.class.getClassLoader().getResource(pFile).getPath();

Deste geito deu arrado ate na minha maquina!
Muito estranho isto! mas qual eh a diferenca d c usar desta maneira??

adriano.ferranti

rodrigo.fai:
adriano.ferranti:
Você pode tentar usar

public Propertie(String pFile) { String arquivo = Propertie.class.getClassLoader().getResource(pFile).getPath(); getFile(arquivo); }

Não deu certo ainda… continua dando NullPointerException soh q agora na linha ond tento corregar o arquivo:

String arquivo = Propertie.class.getClassLoader().getResource(pFile).getPath();

Deste geito deu arrado ate na minha maquina!
Muito estranho isto! mas qual eh a diferenca d c usar desta maneira??

Eita… maldito CTRL+C e CTRL + V

eu quis dizer:

String arquivo = Propertie.class.getClassLoader().getResource(pFile);

sendo que o arquivo deve estar no seu classpath

um exemplo da diferença você pode ver em:

https://lists.xcf.berkeley.edu/lists/advanced-java/2000-October/013378.html

rodrigo.fai

adriano.ferranti:
rodrigo.fai:
adriano.ferranti:
Você pode tentar usar

public Propertie(String pFile) { String arquivo = Propertie.class.getClassLoader().getResource(pFile).getPath(); getFile(arquivo); }

Não deu certo ainda… continua dando NullPointerException soh q agora na linha ond tento corregar o arquivo:

String arquivo = Propertie.class.getClassLoader().getResource(pFile).getPath();

Deste geito deu arrado ate na minha maquina!
Muito estranho isto! mas qual eh a diferenca d c usar desta maneira??

Eita… maldito CTRL+C e CTRL + V

eu quis dizer:

String arquivo = Propertie.class.getClassLoader().getResource(pFile);

sendo que o arquivo deve estar no seu classpath

um exemplo da diferença você pode ver em:

https://lists.xcf.berkeley.edu/lists/advanced-java/2000-October/013378.html

Tb não vai funcionar pq eu tenho q receber uma string! Lembra? Desta maneira ele me retorna uma URL!

Devo trocar o tipo da variavel?

adriano.ferranti

Acho que é mais simples você tentar:

PropertyResourceBundle bundle = null;
bundle = (PropertyResourceBundle) PropertyResourceBundle.getBundle("file_name");
System.out.println(bundle.getString("property_name"));

onde file_name deve ser o nome do pacote onde está o arquivo mais o nome do arquivo sem a extensão.
Ex.: meupacote.meu_arquivo
para o arquivo meu_arquivo.properties dentro do package meupacote

e property_name, óbvio é o nome da propriedade que você quer ler.

rodrigo.fai

adriano.ferranti:
Acho que é mais simples você tentar:

PropertyResourceBundle bundle = null;
bundle = (PropertyResourceBundle) PropertyResourceBundle.getBundle("file_name");
System.out.println(bundle.getString("property_name"));

onde file_name deve ser o nome do pacote onde está o arquivo mais o nome do arquivo sem a extensão.
Ex.: meupacote.meu_arquivo
para o arquivo meu_arquivo.properties dentro do package meupacote

e property_name, óbvio é o nome da propriedade que você quer ler.

ALELUUUUUUIA!!! huahuahuahua

Funcionou agora krinha!!! Vlw msm hein… muito grato!

A classe fikou ate mais enxuta:

package net.sytes.tsda.zeus.properties;

import java.util.PropertyResourceBundle;

public class Propertie
{
	private PropertyResourceBundle bundle = null;
	
	public Propertie(String pFile)
	{
		this.bundle = (PropertyResourceBundle) PropertyResourceBundle.getBundle("/net/sytes/tsda/zeus/properties/"+pFile);
	}
	
	public String getJdbcDriver()
	{
		String jdbcDriver = this.bundle.getString("jdbc.driver");
		
		return jdbcDriver;
	}
	
	public String getBanco(String pBanco)
	{
		String banco = this.bundle.getString(pBanco);
		
		return banco;
	}
	
	public String getUser()
	{
		String user = this.bundle.getString("user");
		
		return user;
	}
	
	public String getPassword()
	{
		String password = this.bundle.getString("password");
		
		return password;
	}
	
	public String getPath()
	{
		String path = this.bundle.getString("diretorio.figuras");
		
		return path;
	}
}

Mas gostaria de saber quao eh a diferença entre a classe Properties e a PropertyResourceBundle!

adriano.ferranti

É isso aí :stuck_out_tongue:

Pode dar uma olhada em:

rodrigo.fai

Valew!!!

Criado 28 de maio de 2007
Ultima resposta 28 de mai. de 2007
Respostas 24
Participantes 4