Olá pessoal,
não estou conseguindo visualizar por que não acha o JNDI que defini no TOMCAT em DATASOURCE…
Se alguém já caiu nesse erro e pode me ajudar agradeço…
Queria incluir o nome java:comp/env/jdbc/perseveranc mas ao salvar no TOMCAT dá erro e não grava …
Pois bem então gravei o nome JNDI como "local" ai gravou…
Ao tentar acessar via sistema ao tentar encontrar o JNDI dá erro …
public Connection getConnectionByPool() throws Exception {
Connection conn = null;
DataSource ds = null;
try {
if (initCtx == null) {
initCtx = new InitialContext();
}
System.out.println("PooLING="+POOLING_NAME);
ds = (DataSource) initCtx.lookup(POOLING_NAME); -->Dá erro nessa linha ao debugar
conn = ds.getConnection();
System.out.println("Conexao Aberta");
} catch (Exception e) {
e.printStackTrace();
throw new Exception("Erro ao obter conexao via JNDI: "
+ POOLING_NAME, e);
}
return conn;
}
PooLING=local
javax.naming.NameNotFoundException: Name local is not bound in this Context
at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
at javax.naming.InitialContext.lookup(Unknown Source)
at br.com.paulo.prova.locator.ServiceLocator.getConnectionByPool(ServiceLocator.java:74)
at br.com.paulo.prova.locator.ServiceLocator.getConnection(ServiceLocator.java:42)
at br.com.paulo.prova.dao.ClienteDAO.listaCliente(ClienteDAO.java:23)
at br.com.paulo.prova.action.ListaAction.execute(ListaAction.java:18)
at br.com.paulo.prova.servlet.ServletAction.service(ServletAction.java:26)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
///
--ServiceLocate
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class ServiceLocator {
private static String POOLING_NAME = "local";
private final static String DRIVER_NAME = "com.mysql.jdbc.Driver";
private final static String DB_URL = "jdbc:mysql://localhost:3306/prova";
private final static String DB_USER_NAME = "root";
private final static String DB_PASSWORD = "pa";
private boolean usePool = true;
protected DataSource ds;
static { //Busca o datasource configurado no arquivo resources.application existente em WEB-INF\classes\resources
ResourceBundle prop = ResourceBundle.getBundle("resources.application");
try {
POOLING_NAME = prop.getString("geral.datasource");
} catch (Exception e) {
}
}
private static InitialContext initCtx = null;
private static ServiceLocator instance = new ServiceLocator();
public static ServiceLocator getInstance() {
return instance;
}
public Connection getConnection() throws Exception {
if (usePool) {
System.out.println("pool");
return getConnectionByPool();
} else {
System.out.println("manual");
return getConnectionManual();
}
}
public Connection getConnectionManual() throws Exception {
Connection conn = null;
try {
Class.forName(DRIVER_NAME);
conn=DriverManager.getConnection(DB_URL,DB_USER_NAME,DB_PASSWORD);
System.out.println("Conexão Aberta !!!");
} catch (Exception e) {
System.out.println("Conexão Não Aberta !!!");
e.printStackTrace();
throw new Exception("Erro ao obter conexao via JNDI: " ,e);
}
return conn;
}
public Connection getConnectionByPool() throws Exception {
Connection conn = null;
DataSource ds = null;
try {
if (initCtx == null) {
initCtx = new InitialContext();
}
System.out.println("PooLING="+POOLING_NAME);
ds = (DataSource) initCtx.lookup(POOLING_NAME); -->Dá erro nessa linha ao debugar
conn = ds.getConnection();
System.out.println("Conexao Aberta");
} catch (Exception e) {
e.printStackTrace();
throw new Exception("Erro ao obter conexao via JNDI: "
+ POOLING_NAME, e);
}
return conn;
}
public void setUsePool(boolean usePool) {
this.usePool = usePool;
}
}
//--NO TOMCAT COMO CONFIGUREI ----
//até usei um properties
-- application.properties --
geral.identificacao=Identifica\u00E7\u00E3o
geral.datasource=local
//COmo está cadastrado no TOMCAT /DATASOURCE
Data Sources
JNDI Name:local
Data Source URL:jdbc:mysql://localhost:3306/prova
JDBC Driver Class:com.mysql.jdbc.Driver
User Name: root
Password:*****