Question

I am trying several stomp libraries for java (gozirra, stompj, activemq). All these libraries have poor documentation, such as having only one example, and I have a serious problem:

I need SSL support.

The stomp+ssl protocol exists and is supported by activemq but I am not able to find a Java client that supports it.

Was it helpful?

Solution

With library from activemq do it this way :

                System.setProperty("javax.net.ssl.keyStore",
            "/home/foo/.keystore/client.ks");
    System.setProperty("javax.net.ssl.keyStorePassword", "changeme");
    System.setProperty("javax.net.ssl.trustStore",
            "/home/foo/.keystore/client.ts");

    StompConnection connection = new StompConnection();
    SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory
            .getDefault();
    SSLSocket sslsocket = (SSLSocket) factory.createSocket("127.0.0.1",
            61612);
    connection.open(sslsocket);

OTHER TIPS

I found this forum discussion about JMS on Android, which references the experimental Stomp API included in ActiveMQ 5.2 and greater (example copied below)

Also mentioned is that the REST API might be a better fit for mobile devices, allowing state to be maintained purely at the broker.

StompConnection connection = new StompConnection();
connection.open("localhost", 61613);

connection.connect("system", "manager");
StompFrame connect = connection.receive();
if (!connect.getAction().equals(Stomp.Responses.CONNECTED)) {
    throw new Exception ("Not connected");
}

connection.begin("tx1");
connection.send("/queue/test", "message1", "tx1", null);
connection.send("/queue/test", "message2", "tx1", null);
connection.commit("tx1");

connection.subscribe("/queue/test", Subscribe.AckModeValues.CLIENT);

connection.begin("tx2");

StompFrame message = connection.receive();
System.out.println(message.getBody());
connection.ack(message, "tx2");

message = connection.receive();
System.out.println(message.getBody());
connection.ack(message, "tx2");

connection.commit("tx2");
connection.disconnect();

Not sure it works on Android but worth a try is the FuseSource StompJMS client available on Github. It uses the hwatdispatch library which has both standard TCP and SSL transports built in. Worth a shot anyway.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top