Javax.naming.NameNotFoundException

15:21:11,414 WARN  [JMSContainerInvoker] destination not found: queue/ControladorBatchArrecadacaoGCOM reason: javax.naming.NameNotFoundException: ControladorBatchArrecadacaoGCOM not bound
15:21:11,414 WARN  [JMSContainerInvoker] creating a new temporary destination: queue/ControladorBatchArrecadacaoGCOM
15:21:11,429 INFO  [ControladorBatchArrecadacaoGCOM] Bound to JNDI name: queue/ControladorBatchArrecadacaoGCOM
15:21:11,445 INFO  [EJBDeployer] Deployed: file:/C:/Arquivos de programas/jboss-4.0.1sp1/server/default/deploy/gsanpcg.ear/ControladorBatchArrecadacaoGCOM.jar

Esse trecho é parte do que aparece no console durante o deploy do JBoss.
Alguem sabe o que causa esse tipo de erro “javax.naming.NameNotFoundException” ??

Bom, pesquisando sempre encontramos algo mais…
Esses “nomes” queue/ControladorBatchArrecadacaoGCOM e ControladorBatchArrecadacaoGCOM são constantes JNDI do EJB. Com que eu comparo pra saber se o nome está correto?

E aí, blz>>

"javax.naming.NameNotFoundException" é quando você tenta fazer lookup num registro que não existe no JNDI.

É o seguinte... o JBoss é diferente dos outros AS pra fazer lookup. 

Experimente colocar os nomes do lookup assim:

    ControladorBatchArrecadacaoGCOM[b]/remote[/b]

    queue/ControladorBatchArrecadacaoGCOM[b]/remote[/b]

Segredo: Coloque “/remote” ou “/local” na frente no JNDI Name para fazer lookup no JBoss.

     [code]
     Objeto obj = ctx.lookup(JNDI_NAME+"/remote");
     [/code]

Espero que seja isso!!

Abraço!!

Visite o Blog do Perereca: http://www.blogdoperereca.blogspot.com

Olá Rodrigo,

Estou executando alguns códigos de exemplo de um livro (EJB em Ação) e está ocorrendo uma exceção com relação à busca JNDI. Você sabe qual pode ser a causa raiz do problema?

Este é o código do client:

package com.ejb3inaction.actionbazaar.client;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.ejb3inaction.actionbazaar.buslogic.HelloUser;
import com.ejb3inaction.actionbazaar.buslogic.HelloUserBean;

public class HelloUserClient {
	private static HelloUser helloUser;
	public static void main(String[] args) {
		try {
			Context context = new InitialContext();
			helloUser = (HelloUser) context.lookup("chapter1/" + HelloUserBean.class.getSimpleName() + "/remote");
			helloUser.sayHello("Curious George");
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
}

Esta é a exceção:

     [java] javax.naming.NameNotFoundException: chapter1 not bound
     [java] 	at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
     [java] 	at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
     [java] 	at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
     [java] 	at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
     [java] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     [java] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     [java] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     [java] 	at java.lang.reflect.Method.invoke(Method.java:597)
     [java] 	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
     [java] 	at sun.rmi.transport.Transport$1.run(Transport.java:159)
     [java] 	at java.security.AccessController.doPrivileged(Native Method)
     [java] 	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
     [java] 	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
     [java] 	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
     [java] 	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
     [java] 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
     [java] 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
     [java] 	at java.lang.Thread.run(Thread.java:619)
     [java] 	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
     [java] 	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
     [java] 	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
     [java] 	at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
     [java] 	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625)
     [java] 	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
     [java] 	at javax.naming.InitialContext.lookup(InitialContext.java:392)
     [java] 	at com.ejb3inaction.actionbazaar.client.HelloUserClient.main(HelloUserClient.java:16)
Conforme a exceção, o nome "chapter1" não foi econtrado. Contudo, através do JBoss Web Console (JBoss 4.0.5) posso verificar que o nome está registrado na lista dos JMX MBeans.

Obrigado,
Jean Pierobom
SCJP, SCWCD

Jean,
Até ontem eu estava com vários problemas e um deles era esse. Tudo foi resolvido depois de configurar corretamente o datasource. Será que tá tudo certo com ele? Ele tá dentro da pasta server/default/deploy?

Oi André,

Obrigado pela rápida resposta.

Tem um script ant que faz o deploy. Ele copiou para "server/default/deploy" um arquivo xml que declara duas filas (que provavelmente são para executar outros exemplos do livro) e também o arquivo chapter1.ear:
<?xml version="1.0" encoding="UTF-8"?>

<server>

	<mbean code="org.jboss.mq.server.jmx.Queue"

		name="jboss.mq.destination:service=Queue,name=OrderBillingQueue">

		<attribute name="JNDIName">jms/OrderBillingQueue</attribute>

		<use-java-context>false</use-java-context>

		<depends optional-attribute-name="DestinationManager">

			jboss.mq:service=DestinationManager

		</depends>

	</mbean>

	<mbean code="org.jboss.mq.server.jmx.Queue"

		name="jboss.mq.destination:service=Queue,name=ShippingRequestQueue">

		<attribute name="JNDIName">jms/ShippingRequestQueue</attribute>

		<use-java-context>false</use-java-context>

		<depends optional-attribute-name="DestinationManager">

			jboss.mq:service=DestinationManager

		</depends>

	</mbean>

</server>
Neste arquivo xml, eu preciso acrescentar mais algo para declarar o MBean "chapter1"?

Obrigado,
Jean

Hmm… Pior que não sei cara :
Eu não usei o ant aqui, então tive que criar o datasource e fazer o deploy na mão (na verdade, essa de fazer o deploy, o Eclipse monta o .war e coloca no diretório sozinho).

Falo isso pra não deixar você ‘na mão’ (deixar você esperando uma resposta minha). Uma pergunta só: no seu persistence.xml, você coloca o que na hora de especificar o data source (ou melhor, você está usando o persistence.xml e está especificando o ds)?

Então André…

Esse exemplo não usa JPA, alías, não usa nenhum tipo de persistência. É só um Olá Mundo mesmo, bem simples.

Abraço,
Jean