Jdbc not bound

1 resposta
T

Boa tarde galera, estou com problemas em estabelecer conexão com um banco mySQL através do jboss…
estou usando jboss 4.2 e minha aplicação é em jsf.
O erro acontece na chamada de um método na minha classe Bean que executa um código sql.

Segue os códigos…

mysql-ds.xml

<jndi-name>thiago</jndi-name>
    <connection-url>jdbc:mysql://localhost/thiago?autoReconnect=true</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>root</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>

CustomerBean

package br.com.thiago.corejsf;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;
import javax.sql.DataSource;

public class CustomerBean {

	private Connection conn;

	public void open() throws SQLException, NamingException {
		if (conn != null)
			return;
		Context ctx = new InitialContext();
		DataSource ds = (DataSource) ctx.lookup("java:jdbc/thiago");
		conn = ds.getConnection();
	}

	public Result getAll() throws SQLException, NamingException {
		try {
			open();
			Statement stmt = conn.createStatement();
			ResultSet result = stmt.executeQuery("SELECT * FROM contatos");
			return ResultSupport.toResult(result);
		} finally {
			close();
		}
	}

	private void close() throws SQLException {
		if (conn == null)
			return;
		conn.close();
		conn = null;

	}

}

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<head>
<f:loadBundle basename="br.com.thiago.corejsf.messages" var="msgs"/>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title><h:outputText value="#{msgs.pageDataBaseTitle}"/></title>
</head>
<body>
<h:form>
	<h:dataTable value="#{customer.all}" var="customer">
		<h:column>
			<f:facet name="header">
				<h:outputText value="#{msgs.customerIdHeader}"/>
			</f:facet>
			<h:outputText value="#{customer.id}"/>
		</h:column>

		<h:column>
			<f:facet name="header">
				<h:outputText value="#{msgs.nameHeader}"/>
			</f:facet>
			<h:outputText value="#{customer.nome}"/>
		</h:column>

		<h:column>
			<f:facet name="header">
				<h:outputText value="#{msgs.emailHeader}"/>
			</f:facet>
			<h:outputText value="#{customer.email}"/>
		</h:column>

	</h:dataTable>
</h:form>
</body>
</f:view>
</html>

error

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: /database/index.jsp(15,1) '#{customer.all}' Error reading 'all' on type br.com.thiago.corejsf.CustomerBean
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


root cause 

org.apache.jasper.el.JspELException: /database/index.jsp(15,1) '#{customer.all}' Error reading 'all' on type br.com.thiago.corejsf.CustomerBean
	org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:107)
	javax.faces.component.UIData.getValue(UIData.java:582)
	javax.faces.component.UIData.getDataModel(UIData.java:1063)
	javax.faces.component.UIData.setRowIndex(UIData.java:417)
	com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
	javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:785)
	javax.faces.component.UIData.encodeBegin(UIData.java:879)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
	javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
	com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:244)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:175)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


root cause 

javax.naming.NameNotFoundException: jdbc not bound
	org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
	org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
	org.jnp.server.NamingServer.getObject(NamingServer.java:543)
	org.jnp.server.NamingServer.lookup(NamingServer.java:267)
	org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625)
	org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
	javax.naming.InitialContext.lookup(Unknown Source)
	br.com.thiago.corejsf.CustomerBean.open(CustomerBean.java:22)
	br.com.thiago.corejsf.CustomerBean.getAll(CustomerBean.java:28)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
	javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
	com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
	org.apache.el.parser.AstValue.getValue(AstValue.java:97)
	org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
	org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
	javax.faces.component.UIData.getValue(UIData.java:582)
	javax.faces.component.UIData.getDataModel(UIData.java:1063)
	javax.faces.component.UIData.setRowIndex(UIData.java:417)
	com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
	javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:785)
	javax.faces.component.UIData.encodeBegin(UIData.java:879)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
	javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
	com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:244)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:175)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


note The full stack trace of the root cause is available in the JBossWeb/2.0.0.GA logs.

1 Resposta

luclorencini

O problema foi a forma como você escreveu o ‘caminho’ JNDI.

Seu datasource possui o seguinte nome:

<jndi-name>thiago</jndi-name>

Troque então o endereço de lookup:

DE: "java:jdbc/thiago"

PARA: "java:/thiago"

Desta forma o servidor fará o bind corretamente.

NOTA: A forma como você codificou funcionaria se você trocasse o jndi-name para jdbc/thiago 8)

Att

Criado 31 de julho de 2008
Ultima resposta 14 de jan. de 2010
Respostas 1
Participantes 2