[RESOLVIDO] Enviar mensagem para uma fila com Glassfish

7 respostas
C

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:
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);
	}
}

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"?

7 Respostas

P

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

C

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

P

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

C

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

C

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?

P

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

M

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?

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!

Criado 15 de julho de 2011
Ultima resposta 8 de mai. de 2012
Respostas 7
Participantes 3