Problemas JNDI JBoss 4.2.1

2 respostas
guerios

Pessoal o problema é o seguinte, estou tentando atualizar o meu Jboos 4.0.4 para a versão 4.2.1 por que preciso da mail.jar mais atualizada, não gostaria de simplesmente atualizar a lib no jboss, o que eu acho correto é atualizar o jboss.

Todas os meus datasources funcionam normalmente no 4.0.4, e passaram a não funcionar mais na versão 4.2.1, ou seja dá erro de lookup na hora de fazer o bind do datasource

Notem, eu já procurei no google e no guj se alguém já teve o mesmo problema ou passou por ele e não encontrei, na página do Jboss só menciona algumas portas fechadas por causa de segurança, no changelog do mesmo não menciona nenhuma mudança do modo de configuração do jndi através do -ds.xml.

Algum de vocês tem alguma idéia do que pode estar acontecendo ?
Será que a configuração antiga não funciona mais ?
O que devo mudar nos xml’s para fazer os datasources funcionarem novamente ?

O erro que dá é o abaixo e só dá na nova versão do Jboss, na versão antiga funciona que é uma beleza.

Caused by: javax.naming.NameNotFoundException: jdbc not bound

10:56:11,838 ERROR [STDERR] 	at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)

10:56:11,838 ERROR [STDERR] 	at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)

10:56:11,838 ERROR [STDERR] 	at org.jnp.server.NamingServer.getObject(NamingServer.java:543)

10:56:11,838 ERROR [STDERR] 	at org.jnp.server.NamingServer.lookup(NamingServer.java:267)

10:56:11,838 ERROR [STDERR] 	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)

10:56:11,838 ERROR [STDERR] 	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:589)

10:56:11,838 ERROR [STDERR] 	at javax.naming.InitialContext.lookup(InitialContext.java:351)

O Datasource é esse:

<?xml version="1.0" encoding="UTF-8"?> jdbc/ClientDS ClientDS true
<connection-url>
		jdbc:postgresql://10.50.2.14:5432/sistema
	</connection-url>
	<driver-class>org.postgresql.Driver</driver-class>
	<user-name>maria</user-name>
	<min-pool-size>2</min-pool-size>
	<max-pool-size>20</max-pool-size>
	<check-valid-connection-sql>
		SELECT 1+1
	</check-valid-connection-sql>
</local-tx-datasource>

2 Respostas

otaviofcs

Dá uma olhada aqui : http://blog.riopro.com.br/2007/06/19/criando-um-datasource-no-jboss/

Funciona no 4.2.0

guerios

Perfeitamente nobre colega Otavio.

Agora tenho a certeza de que não é a versão do Jboss e sim alguma coisa errada na minha configuração

Mas não consigo descobrir o que é, pois a receita de bolo que se encontra no blog foi executada linha a linha e mesmo assim não funcionou, até por que seria estranho fazer de forma diferente.

A questão é, no projeto principal eu consigo fazer o lookup e encontrar o datasource, mas num jar dentro do projeto não consigo.

Para exemplificar melhor:

O Meu sistema conecta a um banco de dados (Funciona normalmente) contêm um sistema de segurança que conecta em outro banco de dados com outro datasource o qual usei como exemplo ai em cima (Não funciona)

O Log do jboss mostra que o Bind do datasource foi feito corretamente, fiz até uma classe de teste para tentar achar o datasource e nada. O Datasource não aparece na lista.

Fiz o seguinte JSP para teste, fiz em scriplets para facilitar.

<%@ page import="java.io.*" import="java.util.*" import="javax.naming.*"
	import="javax.sql.*" contentType="text/plain"%>
<%
	String dsNome = "DefaultDS";
	try {
		out.println(" ");
		//com.sun.enterprise.naming.SerialInitContextFactory
		Hashtable p = new Hashtable();
		p.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
		p.put(Context.PROVIDER_URL, "jnp://10.90.2.113:1099");
		Context contexto = new InitialContext(p);
        out.println("Lista de Binds do Contexto JNDI");
		out.println(" ");		
        out.println("Lista de Nomes do Contexto JNDI");		
		NamingEnumeration lista = contexto.list("");
		
		while (lista.hasMore()) {
			out.println("Item: " + lista.next());
		}
		Hashtable hst = contexto.getEnvironment();
		Object factoryName = hst.get("java.naming.factory.initial");
		out.println(" ");
		out.println("Lista de parâmetros do ambiente");
		Enumeration lista2 = hst.elements();
		while (lista2.hasMoreElements()) {
			out.println("Param: " + lista2.nextElement());
		}

		out.println("Nome da factory " + factoryName);
%>

<%
		out.println("Tentando achar o JNDI do seguranca");
		DataSource ds = (DataSource) contexto.lookup(dsNome);
		if (ds == null) {
			out.println(dsNome);
		} else {
			out.println("DATASOURCE ENCONTRADO! PARABÈNS !!!!!!!");
		}

	} catch (NamingException e) {
		out.println("Nome não encontrado " + dsNome);
		out.println(e);
	}
%>

Será que não estou colocando o Datasource em outro contexto de lookup ?

Agradeço qualquer luz. Abraço ai

Criado 26 de setembro de 2007
Ultima resposta 26 de set. de 2007
Respostas 2
Participantes 2