Galera, a questão é a seguinte:
Imaginem um ambiente onde temos varias maquinas em uma rede.
Uma destas máquinas teria o Jboss-4.0.5.GA. Uma apçicação rodando nesta máquina(pelo jboss) enviaria mensagens em formato XML para o JBOSS.
Então uma segunda máquina teria também o Jboss-4.0.5.GA e precisaria receber também essas mesmas mensagens, que então seriam consumidas por uma aplicação nela instalada.
Minha pergunta é. Tem como fazer a comunicação entre esses JBOSS, atulizando alguma configuração do próprio JBoss? Ou se tem outra maneira e qual poderia ser ela?
Pelo pouco que você escreveu, eu acreditoq que caberia um JMS ai.
[quote=mark_domi]Pelo pouco que você escreveu, eu acreditoq que caberia um JMS ai.
[/quote]
Na verdade já seria JMS, porém o produtor estaria em uma maquina diferente do consumidor, ai que entra o meu problema. Pq as 2 aplicações que estão em maquina diferente tem a seguinte funçao:
A aplicação da maquina A, gera a mensagem XML, seria o produtor.
A aplicação da maquina B, consome essa mensagem.
A minha dúvida então é saber como fazer o JBOSS da maquina B receber as Mensagens da maquina A.
[quote]Na verdade já seria JMS, porém o produtor estaria em uma maquina diferente do consumidor, ai que entra o meu problema. Pq as 2 aplicações que estão em maquina diferente tem a seguinte funçao:
A aplicação da maquina A, gera a mensagem XML, seria o produtor.
A aplicação da maquina B, consome essa mensagem.
[/quote]
você pode alterar as propriedades antes de fazer lookup
properties = Properties()
properties["jnp://122.31.24.14"]
properties["org.jnp.interfaces.NamingContextFactory" ]
properties["org.jnp.interfaces"]
initialContext = InitialContext(properties)
se não for isso é algo bem proximo disso.
mark_domi, seria uma boa alternativa, daria até para tentar.
Porém, eu não posso mexer na aplicação. A aplicação que gera a fila, não é minha, por isso queria ver se o próprio Jboss não faria isso, mandar as mensagens para outra maquina.
É algo bem estranho eu sei, mas vai saber, de repente existe alguma propriedade nas configurações do Jboss que de para apontar para outra maquina.
sempre existe a posibilidade…rsrsr
Se eu entendi direito:
1 - um gera uma mensagem em uma fila de JMS no JBOSS no servidor X
2 - o outro le uma fila de JMS no servidor Y
3 - você não tem acesso ao código de nenhum desses softwares.
Bem o que você quer se chama SOA
Vamos lá.
ninguem consome a fila do servidor X (se tem alguem este alguem deve ser desligado, porque você quer que as mensagens caiam em Y).
se não houver transformação nenhuma da informação, você precisa disso para ontem, você pode desenvolver uma aplicaçãozinha simples que le uma fila de JMS e envia para outra. agora se tiver transformação, e quer um algo bem feito você pode usar um ESB, como parece ser coisa simples, eu recomentaria o OpenESB que é totalmente grafico, mas como você usa JBOSS você pode procurar por JBOSSESB (esse cara você tem que probramar também).
Abraço
[quote=mark_domi]sempre existe a posibilidade…rsrsr
Se eu entendi direito:
1 - um gera uma mensagem em uma fila de JMS no JBOSS no servidor X
2 - o outro le uma fila de JMS no servidor Y
3 - você não tem acesso ao código de nenhum desses softwares.
Bem o que você quer se chama SOA
Vamos lá.
ninguem consome a fila do servidor X (se tem alguem este alguem deve ser desligado, porque você quer que as mensagens caiam em Y).
se não houver transformação nenhuma da informação, você precisa disso para ontem, você pode desenvolver uma aplicaçãozinha simples que le uma fila de JMS e envia para outra. agora se tiver transformação, e quer um algo bem feito você pode usar um ESB, como parece ser coisa simples, eu recomentaria o OpenESB que é totalmente grafico, mas como você usa JBOSS você pode procurar por JBOSSESB (esse cara você tem que probramar também).
Abraço
[/quote]
É isso mesmo que você citou nos itens 1 ao 3, embora na aplicação consumidora eu tenha acesso ao código, fui eu quem programou ela.
Porém a principio ela deveria rodar na mesma maquina da aplicação Produtor, mas acabaram mudando a maquina e dai tenho que achar uma forma para resolver isso.
Mas vou dar uma pesquisada nessas dicas que me passou.
Valeu
encontrei aqui no forum, algo que resolveu meu problema, em partes:
aqui vai uma parte do código que tem no link:
public void connect() throws NamingException, JMSException {
InitialContext initialContext;
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
properties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
<b>properties.put(Context.PROVIDER_URL, "jnp://172.16.0.202:1099"); //HOST:PORT JBOSS</b>
initialContext = new InitialContext(properties);
QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) initialContext.lookup("ConnectionFactory");
queueConnection = queueConnectionFactory.createQueueConnection();
queue = (Queue) initialContext.lookup("queue/fila"); //Nome da fila
queueSession = queueConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
QueueReceiver queueReceiver = queueSession.createReceiver(queue);
queueReceiver.setMessageListener(this);
queueConnection.start();
}
Na parte em negrito eu seto a maquina e a porta onde estam as mensagens no Jboss. Quando faço isso de uma máquina windows para outra, funciona perfeito. Mas quando tento de uma máquina windows para uma linux, dai da o seguinte erro:
javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: Exception creating connection to: 127.0.1.1; nested exception is:
java.net.NoRouteToHostException: No route to host: connect]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:722)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at ReceiverMessage.connect(JmsMessageHandler.java:76)
at JmsMessageHandler.main(JmsMessageHandler.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Caused by: java.rmi.ConnectIOException: Exception creating connection to: 127.0.1.1; nested exception is:
java.net.NoRouteToHostException: No route to host: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:587)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:94)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625)
... 9 more
Caused by: java.net.NoRouteToHostException: No route to host: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:516)
at java.net.Socket.connect(Socket.java:466)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:179)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569)
... 14 more
Alguém saberia como resolver? Tenho pouco conhecimento de rede, e somente pelo IP da máquina linux não está dando certo, talvez tenha que fazer outra coisa.
Acabei de resolver o problema, eram as variaveis de ambiente do linux, classpath, java_home, não estavam corretas.
Refiz o processo e dai funcionou, na verdade descobri por acaso. Troquei o JDK 1.5 pelo 1.6 e quando setei as variaveis passsou a funcionar.