Olá,
Eu quero colocar uma tag dentro do web.xml, por exemplo:
<nomedodatasource>bancoWeb</nomedodatasource>
tem alguma de colocar isso e depois recuperar o valor em um classe?!
Olá,
Eu quero colocar uma tag dentro do web.xml, por exemplo:
<nomedodatasource>bancoWeb</nomedodatasource>
tem alguma de colocar isso e depois recuperar o valor em um classe?!
Tu pode usar como um init-param para um servlet em especifico ou um context-param para a aplicação toda.
ah! blz!
mas como faço pra obter esse valor em uma classe comum.
não é um servlet, é uma classe DAO, por exemplo. :???:
valeu!
Nesse caso, acho que você podia fazer um ServletContextListener, que vai chamar o método contextInitialized, quando a aplicação começar.
Daí você pega o valor do context-param do web.xml, e cria a conexão com o banco, e fecha a conexão no método contextDestroyed.
eh… valeu pela ajuda.
Bem, vou tentar explicar porque eu quero recuperar informações do web.xml.
Trabalho com o JDeveloper 10, montei um arquivo properties com alguns parametros de controle do sistema, por exemplo: conexão com o banco de dados.
Coloquei o arquivo em:
Quando vou rodar a aplicação não encontra o arquivo de jeito nenhum!
Ao colocar um caminho absoluto - D:\proj\conf.properties - daí sim tudo funciona, ou seja, inútil e quando eu gerar o WAR?!
será que agora eu consigo resolver isso hehehe!
valeuzão!
Cara,
É assim:
ServletContextEvent event
event.getServletContext().getInitParameter("PARAMETRO WEB>XML");
Anderson, eu não estou trabalhando com servlets, veja:
Essa é a classe que carrega o properties.
package br.senac.sp.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.PropertyResourceBundle;
public class Parametros
{
private static Properties propriedade;
private static File arquivo;
private static String path = "/WEB-INF/classes/datasource.properties";
/*
* carrega o arquivo de propriedades
* */
static{
try {
arquivo = new File( path );
propriedade = new Properties();
propriedade.load( new FileInputStream(arquivo) );
}catch(IOException ei){
System.out.println( "Erro: " + ei.getMessage() );
}catch(Exception ex) {
System.out.println( "Erro: " + ex.getMessage() );
}
}
/**
*
* @param parametro
* @return valor
*/
public static String getValor(String parametro){
String retorno = null;
try{
retorno = propriedade.getProperty(parametro);
}catch (Exception ex){
System.out.println( "Erro: " + ex.getMessage() );
System.out.println("\nprintStackTrace: ");
ex.printStackTrace();
}
return retorno;
}//
}
esse é um exemplo de como eu a utilizaria:
Transacao transacao = new Transacao(Parametros.getValor("dsname"));
entendeu?!
Então seu proplema é que vc nao ta conseguindo ler o arquivo .propries de dentro da sua aplicação???
Tenta colocar ele no mesmo nivel da classe DAO!
Após algumas pesquisas em forúns e ajuda da minha equipe, consegui chegar a isso:
public class Parametros extends java.util.Properties {
/**
* Construtor
* @param String - path e nome do arquivo de propriedades
*/
public Parametros(String arquivo) {
super();
try{
this.load(getClass().getClassLoader().getResourceAsStream(arquivo));
}catch(Exception e){}
}
}
Funciona perfeitamente, basta o arquivo estar em WEB-INF/classes/ que será localizado.
Mas vejam se o meu raciocinio está errado.
Tenho 5 páginas jsp que fazem conexão com o banco, logo utilizarão o Dao que por sua vez a classe de Property, sendo assim, o arquivo será carregado 5 vezes.
Eu tentei montar essa funcionalidade dentro de um bloco static, para que seja carregado na jvm uma única vez, mas não consegui… :???: pois this.getClass não é estático.
capiche? alguma idéia?! ops! devo abrir um novo tópico? 8O
valeuzão!
Tu pode user um singleton.
Show!!
Poxa não conhecia esse Pattern, muito obrigado a todos, essa é a classe final:
package br.senac.sp.util;
import java.util.Properties;
public class PropertyServer extends Properties {
private static String arquivo = "datasource.properties";
private static PropertyServer instancia;
private PropertyServer(){
try{
instancia.load( getClass().getClassLoader().getResourceAsStream(arquivo) );
}catch(Exception e){
System.out.println("");
}
}
public static PropertyServer getInstance(){
if( instancia == null )
instancia = new PropertyServer();
return instancia;
}
}