Como faço para acessar uma queue que se encontra em outro servidor?
...
Context context =getInitialContext();
ConnectionFactory factory = (ConnectionFactory) context
.lookup("ConnectionFactory");
public static Context getInitialContext () throws JMSException,NamingException
{
Properties prop = new Properties();
prop.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
prop.setProperty("java.naming.factory.url.pkgs", "org.jnp.interfaces");
prop.setProperty("java.naming.provider.url", "jnp://10.110.107.45:1099");
Context context = new InitialContext(prop);
return context;
}
Tenho a fila rodando em localhost e tento enviar uma mensagem para fila a partir de um server que esta em outra maquina remota.
Provavelmente você precise de um lookup jndi. Acredito que um EJB remoto também.
sim ja tenho o looku, em getInitialContext(), o meu problema e nesta linha
prop.setProperty(“java.naming.provider.url”, “localhost:1099”);
setando localhoste rodando o codigo acima via metodo main ele funciona, mas como quero executar em um ejb em um servidor remoto
deve setar outro caminho em vez de localhost , ja tentei colocar o ip da maquina tentei com jnp:ip:porta , mas nada deu certo.
Qual app server está utilizando?
Se for o JBoss, existe um arquivo de configuração que você precisa incluir no src.
jboss-ejb-client.properties
endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
#Endereço do host
remote.connection.default.host=127.0.0.1
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
#Usuário e senha de acesso aplicação ao app server
remote.connection.default.username=testuser
remote.connection.default.password=senha123
Além, dos seguintes jars:
Isto, claro, para a versão 7.1 do JBoss (Brontes).
vixi to com a versao 4.2 , ta punk o negocio aki.
Entao tentei de varia maneiras mas nao consegui, se houvesse uma maneira de fazer o inverso ja ajudaria , tipo em vez de mandar uma mensagem para uma fila remota eu pudesse ler mensagem de uma fila remota, isso tbm nao consegui
Acho que uma solução muito mais limpa seria criar um serviço (ejb) no servidor remoto para receber as requisições e colocá-las na fila (localmente)
Concordo.[/quote]
+1. Mas acho que, se ele não conseguir acessar a JNDI remotamente, não vai mudar grande coisa o problema (de não conseguir acessar o EJB remotamente).
[]'s
Entao acessar ejbs remotos consigo, so nao sei como acessar a fila remota e ler os dados dela.
Gostaria de criar a fila no servidor remoto, e que o meu MessageDrivenBean fosse notificado qdo algo fosse enviado pra fila,
Ja testei as duas aplicacoes no mesmo server e tudo funciona perfeitamente.
Algume tem um exemplo de como acessar uma fila remota?
Meu MDB
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/SnsQueue") // Aqui como referencio a fila remota?
A outra dica que vcs deram nao sei se funciona pra mim, pq imagine meu projeto no server remoto enviando uma mensagem para a fila via ejb remoto, onde o metodo remoto esta rodando em localhost por exemplo ou outro servidor remoto qualquer, enquanto a app esta no ar meu ejb remoto envia as mensagens para a fila , mas a app pode ficar indisponivel neste caso axo que pode dar problema, pois o ejb remoto nao sera encontrado e a mensagem nao sera adicionada a fila.
Pessoal obrigado pela ajuda, consegui fazer funcionar atraves deste tutorial
https://community.jboss.org/wiki/HowDoIConfigureAnEJB3MDBToTalkToARemoteQueue
Agradeço a tdos que contribuiram com suas opnioes e possiveis soluções para o problema, aprendi mto neste post.
abraços.