[RESOLVIDO] Enviar mensagem para uma fila com Glassfish

Olá galera, beleza?
Estou seguindo a apostila da K19 sobre Integração de Sistemas com Webservices e JMS e estou com um problema.

Estou criando uma classe que envia uma mensagem para uma fila cadastrada no Glassfish, segundo a apostila seria apenas:
Criar a ConnectionFactory e a Fila no console de administração do Glassfish. OK
Criar um Java Project adicionado em Libraries o gf-client.jar que vem dentro da pasta modules do Glassfish. OK, adicionei o jar com o nome gf-client-module.jar
Porém ao executar a classe ocorre algumas exceptions.

Código da classe:

[code]package br.com.jms.emissores;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;

/**

  • Classe para enviar mensagens para uma Fila

  • @author carlos.pomari
    */
    public class EnviaNovoPedido {
    public static void main(String[] args) throws Exception {
    // Serviço de nomes - JNDI
    InitialContext ic = new InitialContext();

     // Fábrica de conexões JMS
     ConnectionFactory factory = (ConnectionFactory)
     	ic.lookup("jms/K19Factory");
     		
     // Fila
     Queue queue = (Queue) ic.lookup("jms/pedidos");
     
     // Conexão JMS
     Connection connection = factory.createConnection();
     
     // Sessão JMS
     Session session = connection.createSession(false, 
     		Session.CLIENT_ACKNOWLEDGE);
     
     // Emissor de mensagens
     MessageProducer sender = session.createProducer(queue);
     
     // Mensagem
     TextMessage message = session.createTextMessage();
     message.setText("Uma pizza de 4 queijos e uma coca-cola 2L - " + 
     		System.currentTimeMillis());
     
     // Enviando
     sender.send(message);
     
     // Fechando
     sender.close();
     session.close();
     connection.close();
     
     System.out.println("Mensagem Enviada");
     System.exit(0);
    

    }
    }[/code]

Erro na console:
15/07/2011 14:32:17 com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.
15/07/2011 14:32:24 com.sun.enterprise.connectors.ActiveRAFactory createActiveResourceAdapter
GRAVE: RAR6001 : Class Not found : com.sun.messaging.jms.ra.ResourceAdapter
15/07/2011 14:32:24 com.sun.enterprise.connectors.ActiveRAFactory createActiveResourceAdapter
GRAVE:
com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Error in creating active RAR
at com.sun.enterprise.connectors.ActiveRAFactory.createActiveResourceAdapter(ActiveRAFactory.java:109)
at com.sun.enterprise.connectors.service.ResourceAdapterAdminServiceImpl.createActiveResourceAdapter(ResourceAdapterAdminServiceImpl.java:212)
at com.sun.enterprise.connectors.ConnectorRuntime.createActiveResourceAdapter(ConnectorRuntime.java:378)
at com.sun.enterprise.resource.naming.ConnectorObjectFactory.getObjectInstance(ConnectorObjectFactory.java:108)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at com.sun.enterprise.naming.impl.SerialContext.getObjectInstance(SerialContext.java:556)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:514)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at br.com.jms.emissores.EnviaNovoPedido.main(EnviaNovoPedido.java:24)
Caused by: java.lang.ClassNotFoundException: com.sun.messaging.jms.ra.ResourceAdapter
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at com.sun.enterprise.connectors.ActiveRAFactory.createActiveResourceAdapter(ActiveRAFactory.java:101)
… 9 more
Exception in thread “main” javax.naming.NamingException: Lookup failed for ‘jms/K19Factory’ in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NamingException: Failed to look up ConnectorDescriptor from JNDI [Root exception is com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Error in creating active RAR]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at br.com.jms.emissores.EnviaNovoPedido.main(EnviaNovoPedido.java:24)
Caused by: javax.naming.NamingException: Failed to look up ConnectorDescriptor from JNDI [Root exception is com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Error in creating active RAR]
at com.sun.enterprise.resource.naming.ConnectorObjectFactory.getObjectInstance(ConnectorObjectFactory.java:115)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at com.sun.enterprise.naming.impl.SerialContext.getObjectInstance(SerialContext.java:556)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:514)
… 3 more
Caused by: com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Error in creating active RAR
at com.sun.enterprise.connectors.ActiveRAFactory.createActiveResourceAdapter(ActiveRAFactory.java:109)
at com.sun.enterprise.connectors.service.ResourceAdapterAdminServiceImpl.createActiveResourceAdapter(ResourceAdapterAdminServiceImpl.java:212)
at com.sun.enterprise.connectors.ConnectorRuntime.createActiveResourceAdapter(ConnectorRuntime.java:378)
at com.sun.enterprise.resource.naming.ConnectorObjectFactory.getObjectInstance(ConnectorObjectFactory.java:108)
… 6 more
Caused by: java.lang.ClassNotFoundException: com.sun.messaging.jms.ra.ResourceAdapter
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at com.sun.enterprise.connectors.ActiveRAFactory.createActiveResourceAdapter(ActiveRAFactory.java:101)
… 9 more

Informações adicionais.
IDE: Eclipse Helios
ServerWeb: Glassfish 3.1

Alguém poderia me ajudar? E, pergunta, existe alguma diferença entre “gf-client.jar” e “gf-client-module.jar”?

Olá amigo, vc precisa adicionar outras libs no seu classpath, pois está falatando a jms.ResourseAdapter do EJB.

coloque a lib ejb 3, javax.ejb no seu classpath

coloque também a classe do JavaDb

Fallow

Cara, quando criei o projeto, na aba Libraries, coloquei o gf-client-module.jar, ele está no meu classpath, e na ReferencedLibraries tem vários jars que ao que parece todos são “filhos” do gf-client. Segue print estrutura do projeto.

http://tinypic.com/view.php?pic=2coisn6&s=7

Está faltando algum jar ainda.
jax-ra.rar talvez.

Soh testando mesmo.

Ma veja que na sua Exception o Caused By acusa ClassNotFoundException: com.sun.messaging.jms.ra.ResourceAdapter

pesquisando eu encontrei essa classe em javax-ra.jar

Vou continuar pesquisando aqui…
Fallow

Entendi cara, vou pesquisar aqui também, obrigado por enquanto! =]

Consegui resolver cara.
Exclui a pasta do Glassfish 3.1 e baixei o glassfish 3.0.1, na versão 3.0.1 vem o jar chamado “gf-client”. Foi só colocar ele e funciounou.
E realmente como você disse esse jar “jasr-ra” existe quando coloquei o “gf-client” ele aparece na ReferencedLibraries.

Agora resta saber, deve ter alguma diferença na implementação para o 3.1?

Legal cara, então pode ser soh com relação ao build. Ja peguei versao do JBOSS 5.0.1 que faltava um jar mas na 5.1 o jar estava lah e nao dava exception…

Mas mandar ver mano, resolveu é isso…
Fallow
Abraço

[quote=carlospomari]Consegui resolver cara.
Exclui a pasta do Glassfish 3.1 e baixei o glassfish 3.0.1, na versão 3.0.1 vem o jar chamado “gf-client”. Foi só colocar ele e funciounou.
E realmente como você disse esse jar “jasr-ra” existe quando coloquei o “gf-client” ele aparece na ReferencedLibraries.

Agora resta saber, deve ter alguma diferença na implementação para o 3.1?[/quote]

Só pra deixar registrado aqui, eu também estou seguindo a apostila e passei pelo mesmo problema e resolvi da seguinte forma:
Eu baixei o glassfih_3.1.2 e realmente dentro da pasta modules só tem a lib gf-client-module.jar, mas se você olhar dentro do diretório lib vc vai encontrar a lib gf-client.jar, usando essa, você não terá nenhum problema.

Um abraço!