Problemas com uma exceção!

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.

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.

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!

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

Como eu gero um trace?

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

:slight_smile:

Como eu gero um trace?[/quote]

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);
try {
//codigo
} catch(Exception e) {
	e.printStackTrace()
}

:)[/quote]

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?

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

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

Como eu gero um trace?[/quote]

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); [/quote]

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!

[quote=erickcellani]this.properties.getProperty("jdbc.driver")

como está isso lá no seu arquivo properties??[/quote]

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!

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

[quote=adriano.ferranti]Ele não está achando o arquivo de properties no servidor.
A sua propriedade properties é do tipo PropertyResourceBundle ?[/quote]

Como eu sei qual é a minha propriedade properties?

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

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

Como eu sei qual é a minha propriedade properties?[/quote]

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

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

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

Como eu sei qual é a minha propriedade properties?[/quote]

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

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

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

Foi eu msm q criei a properties!!!

Você pode tentar usar

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

[quote=adriano.ferranti]Você pode tentar usar

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

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??

[quote=rodrigo.fai][quote=adriano.ferranti]Você pode tentar usar

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

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

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