JNDI / Datasource

Boa tarde/noite/dia pessoal…

No link http://www.portaljava.com/home/modules.php?name=Content&pa=showpage&pid=53

Tenho um exemplo de código para acesso ao banco de dados utilizando JNDI, porém não estou conseguindo criar a “conexão” atrvés do método “getConnection()”. A dúvida é extremamente fácil e boba mas se alguém puder me dar uma ajuda agradeço muito.

Meu cérebro parou a mais ou menos 12 hrs atrás e estou meio por instinto…

Opa,

bem provavelmente o problema deve estar no teu xml de configuração ou falta de alguma lib, ou coisa assim. Poste os erros para darmos uma olhadinha.

:okok:


Não sou conhecedor deste tipo de tecnologia por isso naum sei se tenho q configurar algo ou o q!!!!!

Se caso esteja faltando alguma configuração no web.xml ou no struts-config ou se falta algum ".jar"....


Qualquer ajuda é mais do q bem vinda!

obrigado!

Não sou conhecedor deste tipo de tecnologia por isso naum sei se tenho q configurar algo ou o q!!!

Se caso esteja faltando alguma configuração no web.xml ou no struts-config ou se falta algum “.jar”…

Qualquer ajuda é mais do q bem vinda!

obrigado!

Excelente é web!

Qual é o teu banco, e qual é teu servidor?

:pensativo:


PostgreSQL -  Tomcat 5.5.9 (netbeans)

Opa:

teu xml de configuração seria: neste caso meuApp.xml

<Context path="/meuApp" docBase="/meuApp"
        debug="5" reloadable="true" crossContext="true">

  <Resource name="jdbc/MeuDataSource" 
		auth="Container" 
		type="javax.sql.DataSource"
               	maxActive="300" 
		maxIdle="5" 
		maxWait="-1"
		removeAbandoned="true"
		removeAbandonedTimeout="5" 
               	username="sa" 
		password="sa" 
		driverClassName="org.postgresql.Driver"
               	url="jdbc:postgresql://localhost:5432/bd"/>

</Context>

Nota: o driver deve estar no classpath do tomcat. Neste caso tua aplicação está dentro da pasta webapps.

:okok:

Bom tentei fazer uma modularização da seguinte maneira…
Peguei esse exemplo em uma aplicação que achei na net e lá não comentava nada de configuração de xml…

Porém me retorna o seguinte erro

[color=“black”]“Name jdbc is not bound in this Context”[/color]

DBAccessLogin.java

package struts;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import modelo.Usuario;
import struts.DBAccess;
import struts.DBAccessException;
	
public class DBAccessLogin {
		
		//Método usado na tela consultaUsuario.jsp, para consultar todos os dados do usuário
		public static ArrayList consultar(String usuario, String nome) 
		{
			
			String where = "";
			//Verifica quais campos foram informados
			if (nome=="" && usuario!=""){
				where = "WHERE usuario LIKE '"+usuario+"%'";
			}else if((nome!="") && (usuario=="")){
				where = "WHERE nome LIKE '"+nome+"%'";
			}else if((nome!="") && (usuario!="")){
				where = "WHERE nome LIKE '"+nome+"%' AND usuario LIKE '"+usuario+"%'";
			}
			
			//Guarda na variável "sql" o comando select a ser excutado
			String sql = "SELECT * FROM \"Usuario\" "
				+  where;
			
			
			Connection conexao = null;
			PreparedStatement statement = null;
			ResultSet rs = null;
			
			try {
				
				//Cria objeto to tipo ArrayList
				ArrayList usuarios = new ArrayList();
				Usuario usu;
				
				//Pega a conecão
				conexao = DBAccess.getConexao();
				statement = conexao.prepareStatement(sql);
				rs = statement.executeQuery();
				
				while (rs.next())
				{
					usu = new Usuario();
					usu.setUsuario(rs.getString("usuario"));
					usu.setNome(rs.getString("nome"));
					usu.setSenha(rs.getString("senha"));
					usu.setTipoUsuario(rs.getString("tipo_usuario"));
					
					if (rs.getLong("tipo_usuario") == 1){
						usu.setTipoUsuario("ADMINISTRADOR");
					}else{
						usu.setTipoUsuario("USUÁRIO");}
				
					usuarios.add(usu);
				}
				
				//Retorna para o action objeto do tipo ArrayList
				return usuarios;
				
			} catch (SQLException e) {
				throw new DBAccessException("SQLException: " + e.getMessage());
			} catch (Exception e) {
				throw new DBAccessException("Exception: " + e.getMessage());
			} finally {
				fecharTudo(conexao, statement, null);
			}
		}
		
		
	}

LoginAction.java

package struts;

import struts.DBAccessException;
import struts.DBAccessLogin;

import modelo.Usuario;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.SQLException;
import struts.DBAccess;
import struts.LoginActionBean;

import java.sql.ResultSet;
import java.sql.SQLException;


public class LoginAction extends Action {
    
    public ActionForward execute(ActionMapping mapping, ActionForm  form,  HttpServletRequest request, HttpServletResponse response) throws Exception 
    {
      if (isCancelled(request))
         {
           request.getSession().invalidate();
           return mapping.findForward("welcome");
         }
      else
         {
        try
          {
            //UsuarioForm UsuarioForm  = (UsuarioForm)form;
            LoginActionBean LoginActionBean = (LoginActionBean)(form);
            ArrayList usuarios = DBAccessLogin.consultar(LoginActionBean.getNome(),LoginActionBean.getSenha());
            //ArrayList usuarios = dados.UsuarioDAO.consultar(UsuarioForm.getUsuario(),UsuarioForm.getNome());
            

          } 
        catch (Exception e) 
           {
             throw new DBAccessException(" " + e.getMessage() + "!! ");
           } 
          
          return mapping.findForward("success");
         }
        
    }
}

DBAccess.java

package struts;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import struts.DBAccessException;


public class DBAccess {
	public static Connection getConexao() throws DBAccessException {
		try {
			//serviço de nomes
			
			InitialContext cxt = new InitialContext();
			DataSource ds = (DataSource) cxt.lookup("java:/comp/env/jdbc/Teste");
			return ds.getConnection();
			
		} catch (NamingException e) {
			throw new DBAccessException("NamingException: " + e.getMessage());
		} catch (SQLException e) {
			throw new DBAccessException("SQLException: " + e.getMessage());
		}
	}
}

LoginActionBean.java

package struts;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;


public class LoginActionBean extends org.apache.struts.action.ActionForm {
    
    private String nome;
    private String senha;
    //
    public void setNome(String nome)
    {
        this.nome=nome;
    }
    //
    public String getNome()
    {
        return this.nome;
    }
    //
    public void setSenha(String senha)
    {
        this.senha = senha;
    }
    //
    public String getSenha()
    {
        return this.senha;
    }
    
  
    
    public LoginActionBean() 
    {
        super();
    }
    
    
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
    {
        ActionErrors errors = new ActionErrors();
        
        if((getNome().equals("")) || (getNome().length()<1))
        {
            errors.add("nome",new ActionMessage("error.nome.required"));
        }
        
        if((getSenha().equals("")) || (getSenha().length()<1))
        {
            errors.add("nome",new ActionMessage("error.senha.required"));
        }


        return errors;
    }

    public void reset(ActionMapping mapping, ServletRequest request) 
    {
        this.nome=null;
        this.senha=null;
    }
    
    
}

DBAccessException.java

package struts;

public class DBAccessException extends RuntimeException
{
    public DBAccessException(String mensagem) 
    {
        super(mensagem);
    } 

    public DBAccessException () 
    {
        super();
    }    
}

Oi amigo. Td bem?
Ja fazia um tempo que eu tb estava com um problema de criar um Pool de Conexões.
No proprio manual do TOMCAT tem um tutorial bem bacaninha.
Qdo vc iniciar o TOMCAT digite no seu browser: http://localhost:8080
aí ele ira para a pagina inicial do conteiner…
Aí vc vai na parte da documentação e depois no JNDI Resources.
La explica diretitinho como proceder…vc vai ter que montar um Resource JDBC.

Abraços

Alguém mais pode me ajudar nessa?
:cry: