-
1. Re: Find Connection to HTTP Transport Servlet
gaohoward Nov 13, 2012 9:53 PM (in response to jhollerer)Basically you need to config a connector that use servlet transport, for example:
{code}
<connector name="netty-servlet">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
<param key="host" value="localhost"/>
<param key="port" value="8080"/>
<param key="use-servlet" value="true"/>
<param key="servlet-path" value="/messaging/HornetQServlet"/>
</connector>
{code}
and of course you need to deploy a hornetq servlet at the server. There are two servlet examples with HornetQ, (one of them use servlet with ssl), you may want to take a look.
Howard
-
2. Re: Find Connection to HTTP Transport Servlet
jhollerer Nov 14, 2012 1:52 AM (in response to gaohoward)Hi Howard,
Thanks - for the answer, but i looked at the examples and they only take care about the server side.
As mentioned i already setup the server - using the servlet, but i do not understand from client point of view how to connect to the "servlet" (and the server behind).
The client cannot take the configuration, cannot take jms (port 80 only), cannot use jni (port 80 only) - and there is no example, to tell the client where to find the servlet (only using JNI which is not available).
So what you described is the server part - which i fully understand - but my issue is to connect to that server now (only using port 80) !
Thanks
Johannes
-
3. Re: Find Connection to HTTP Transport Servlet
ataylor Nov 14, 2012 3:13 AM (in response to jhollerer)simply configure another servlet connector with a different host or port.
-
4. Re: Find Connection to HTTP Transport Servlet
ataylor Nov 14, 2012 3:27 AM (in response to ataylor)this exactly what Howard explained, you just need to change the host and port to that of your remote server
-
5. Re: Find Connection to HTTP Transport Servlet
jhollerer Nov 14, 2012 5:52 AM (in response to ataylor)So - to be clear:
if i take the configuration for the server part to be
<connector name="netty-servlet">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
<param key="host" value="myserver.com"/>
<param key="port" value="80"/>
<param key="use-servlet" value="true"/>
<param key="servlet-path" value="/messaging/HornetQServlet"/>
</connector>i then implement the client using:
{code}
HashMap map = new HashMap();
map.put("host", "myserver.com");
map.put("port", 80);map.put("use-servlet", "true");
map.put("servlet-path", "/messaging/HornetQServlet");
TransportConfiguration config = new TransportConfiguration(NettyConnectorFactory.class.getName(), map);
ClientSessionFactory sf = new ClientSessionFactoryImpl(config);{code}
right ?
-
6. Re: Find Connection to HTTP Transport Servlet
ataylor Nov 14, 2012 5:58 AM (in response to jhollerer)1 of 1 people found this helpfulcorrect, however if you are using core API you dont need to define the connector, if you are usingJMS API you define the conenctor and associate a connection factory with it.
-
7. Re: Find Connection to HTTP Transport Servlet
gaohoward Nov 14, 2012 6:10 AM (in response to jhollerer)If you can use jndi, look up the connection factory that is configured with a servlet connector.
-
8. Re: Find Connection to HTTP Transport Servlet
jhollerer Nov 14, 2012 10:05 AM (in response to gaohoward)i tried the following:
{code}
HashMap map = new HashMap();
map.put("host", "localhost");
map.put("port", 80);
map.put("use-servlet", "true");
map.put("servlet-path", "/messaging/HornetQServlet");
TransportConfiguration config = new TransportConfiguration(NettyConnectorFactory.class.getName(), map);
ServerLocator serverLocatorWithoutHA = HornetQClient.createServerLocatorWithoutHA(config);
ClientSessionFactory sessionFactory = serverLocatorWithoutHA.createSessionFactory();
{code}
but i get an exception:
HornetQException[errorCode=3 message=Timed out waiting to receive cluster topology. Group:null]
what do i need to change ?
-
9. Re: Find Connection to HTTP Transport Servlet
gaohoward Nov 14, 2012 8:33 PM (in response to jhollerer)Please put full exception stack here (if any). Make sure your hornetq servlet is deployed correctly (i.e. the servlet's context root, mapping etc. should match '/messaging/HornetQServlet')
-
10. Re: Find Connection to HTTP Transport Servlet
jhollerer Nov 15, 2012 3:48 AM (in response to gaohoward)There is not much more then that...
the rest goes back to my code - calling: ClientSessionFactory sessionFactory = serverLocatorWithoutHA.createSessionFactory();
{code}
HornetQException[errorCode=3 message=Timed out waiting to receive cluster topology. Group:null]
at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:804)
{code}
i actually setup a test - with that code part - which starts in a servlet (deployed on a jetty server):
{code}
public void init() throws ServletException {
try{
EmbeddedJMS jms = new EmbeddedJMS();
jms.start();
ConnectionFactory connectionFactory = (ConnectionFactory) jms.lookup("/ServletConnectionFactory");
Queue queue = (Queue) jms.lookup("/queue/testQueue");
Connection connection = connectionFactory.createConnection();
Session connectionSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = connectionSession.createProducer(queue);
TextMessage message = connectionSession.createTextMessage("This is a text message");
messageProducer.send(message);
MessageConsumer messageConsumer = connectionSession.createConsumer(queue);
connection.start();
TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000);
System.out.println("Received message: " + messageReceived.getText());
}catch (Exception e){
e.printStackTrace();
System.out.println(e);
}
}
{code}
still getting that error !
-
11. Re: Find Connection to HTTP Transport Servlet
gaohoward Nov 15, 2012 6:06 AM (in response to jhollerer)There is nothing wrong with your client side code. I can run the code without any problem. I believe the problem is with your server.
Can you upload your hornetq-configuration.xml and hornetq-jms.xml here?
Just be aware that to be able to use servlet transport you need to deploy a 'special' servlet in the server. (see hornetq's servlet example). Once deployed, you should be able to view it from jmx-console.
Howard
-
12. Re: Find Connection to HTTP Transport Servlet
jhollerer Nov 15, 2012 6:49 AM (in response to gaohoward)Hi Howard,
Thanks for your help ....
thats my web.xml - starting the HttpTunnelingServlet - and then my HornetQ Servlet
{code}
<servlet>
<servlet-name>NettyServlet</servlet-name>
<servlet-class>org.jboss.netty.channel.socket.http.HttpTunnelingServlet</servlet-class>
<init-param>
<param-name>endpoint</param-name>
<param-value>local:localhost</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>NettyServlet</servlet-name>
<url-pattern>/HornetQServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>MessagingServer</servlet-name>
<servlet-class>com.amergy.hornetqtest.MessagingServer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
{code}
find attached my configuration files
Thanks
Johannes
-
hornetq-jms.xml 536 bytes
-
hornetq-configuration.xml 2.2 KB
-
-
13. Re: Find Connection to HTTP Transport Servlet
gaohoward Nov 15, 2012 7:33 AM (in response to jhollerer)Those seems fine. Only difference may be I'm using jboss 5 as container. Make sure your servlet also defines correct context root, like:
<application>
<display-name>My Application</display-name>
<module>
<web>
<web-uri>servlet-transport-example.war</web-uri>
<context-root>/messaging</context-root>
</web>
</module>
</application>
in my case. Also make sure your client use the correct port (in your server config the port is 8080), and also make sure your client uses hornetq client jars whose version matches the server's (esp netty jar should be the same between client and server).
I upload my servlet ear here. Could you make it into your container and see if it works?
-
14. Re: Find Connection to HTTP Transport Servlet
jhollerer Nov 15, 2012 9:10 AM (in response to gaohoward)Hi Howard,
Very strange - i checked again everything - and the servlet seems to be started (when i try to open the url http://localhost:8080/messaging/HornetQServlet) i see in the output
{code}
Nov 15, 2012 3:05:19 PM org.jboss.netty.channel.socket.http.HttpTunnelingServlet
Warnung: Unallowed method: GET
{code}
so the hornetq servlet is there
I also see the startup of the server ...
{code}
HornetQ Server version 2.2.19.SNAPSHOT (HQ_2_2_19_SNAPSHOT, 122) [6ed09b69-2d98-11e2-9cc1-a322d3524edd]) started
{code}
and still i get the error:
{code}
Caused by: HornetQException[errorCode=3 message=Timed out waiting to receive cluster topology. Group:null]
at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:804)
at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:601)
... 23 more
{code}
i am really stuck with it - i have no idea why this does not work out ...