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