Resultado de uma busca no BD como atributo de contexto

1 resposta
alequimico

Olá Pessoal

Estou tentando instanciar uma classe minha e faze-la atributo do contexto. Até aí nada de mais, porém essa minha classe tem como variável de instância um ArrayList de uma outra classe (Bean) que é instanciada com valores recebidos de uma busca no Banco de dados.

Quando na classe que implementa ServletContextListener é mapeada no web.xml, obtenho o erro SERVER 404, Aplicação não encontrada.

O códido dessa classe eh esse:

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import br.com.sia.banco.Banco;

public class ProcedimentosListener implements ServletContextListener{

	public void contextInitialized(ServletContextEvent event) {

		Procedimentos procedimentos;   //O Objeto que gostaria de colocar como atributo de contexto;
		Banco banco = new Banco();   //O objeto que abrirá conexão com o banco e possui métodos administrativos
		ServletContext sc = event.getServletContext(); //Instacia do contexto
		
                procedimentos = banco.getProcedimentos(sc.getInitParameter("medico")); //Este método faz uma busca no banco de dados, e busco todos os procedimentos,
																	   // colocando-os no arrayList do objeto "procedimentos"
		sc.setAttribute("procedimentos", procedimentos);//Coloco o objeto "procedimentos" como atributo do contexto
		banco.fechaConexao(); // fecho minha conexão com o banco de dados;
	}
	
	public void contextDestroyed(ServletContextEvent event) {
		
	}

}
Quando removo o código de instancia com o banco de dados
Banco banco = new Banco();
e suas utilizações, o programa funciona e tenho os procedimentos (vazios, entretanto) setados como atributos do contexto... Há alguma forma de conectar ao banco, gerar o Procedimentos e seta-lo como atributo do contexto???

1 Resposta

alequimico

Apenas para dar mais detalhes…

parte do meu web.xml

<context-param>
  	<param-name>medico</param-name>
  	<param-value>223116</param-value>
  </context-param>
  
  <listener>
  	<listener-class>
  		br.com.sia.model.ProcedimentosListener
  	</listener-class>
  </listener>

Um pedaço do Banco

public class Banco {

	private String url = "jdbc:mysql://localhost:3306/SIADB";
	public Connection con=null;
	public ResultSet rs = null;
	public PreparedStatement psmt=null;
	private Profissional prof;
	
	public Banco(){
		try {
			Class.forName("com.mysql.jdbc.Driver");
			con = DriverManager.getConnection(url,"root","root");
		} catch (ClassNotFoundException cnfe){
			cnfe.printStackTrace();
		} catch (SQLException e){
			e.printStackTrace();
		}
	}

       public Procedimentos getProcedimentos(String cbo) {
		String tabela = Auxiliar.getNomeTabela(cbo);
		Procedimentos proceds = new Procedimentos();
		try {
			psmt = con.prepareStatement("select * from " + tabela);
			rs = psmt.executeQuery();
			while(rs.next()) {
				Procedimento proced = new Procedimento();
				proced.setCodigo(rs.getString("codigo"));
				proced.setProcedimento(rs.getString("procedimento"));
				proceds.addProcedimento(proced);
			}
		} catch(SQLException e) {
			e.printStackTrace();
		}
		return proceds;
	}

Toda essa parte funciona perfeitamente, porém estou sendo obrigado a seta-lo como atributo de sessão e não como de contexto, como seria o ideal…

Criado 30 de novembro de 2008
Ultima resposta 30 de nov. de 2008
Respostas 1
Participantes 1