JBoss Community

JBoss Remoting 3 HelloWorld Sample

modified by Kylin Soong in JBoss Remoting Development - View the full document

What's the JBoss Remoting 3 HelloWorld Sample

 

JBoss Remoting is wide used in JBoss Application Server, Remoting 3 is the next generation of JBoss Remoting, this article will provide a quick start sample for using JBoss Remoting 3.

 

More about JBoss Remoting 3 please refer to https://www.jboss.org/jbossremoting/remoting-3

 

The HelloWorld Sample's architecture like below:

https://community.jboss.org/servlet/JiveServlet/downloadImage/21315/remoting3_sample.png

  • CharSequenceReceiver play a role as Server, it use JBoss Remoting 3, listen on localhost/30123, it will output every received char sequence.
  • CharSequenceSender play a role as Client, it connect to Server, create a Remoting 3 Connection, use this connection it can send char sequence repeated

 

Source Code

 

package org.jboss.remoting3.sample;
 
import java.io.IOException;
import java.net.InetSocketAddress;
 
import org.jboss.remoting3.Channel;
import org.jboss.remoting3.Endpoint;
import org.jboss.remoting3.MessageInputStream;
import org.jboss.remoting3.OpenListener;
import org.jboss.remoting3.Remoting;
import org.jboss.remoting3.remote.RemoteConnectionProviderFactory;
import org.jboss.remoting3.security.SimpleServerAuthenticationProvider;
import org.jboss.remoting3.spi.NetworkServerProvider;
import org.xnio.IoUtils;
import org.xnio.OptionMap;
import org.xnio.Options;
import org.xnio.Sequence;
import org.xnio.channels.AcceptingChannel;
import org.xnio.channels.ConnectedStreamChannel;
 
public class CharSequenceReceiver {
 
    private static final int THREAD_POOL_SIZE = 100;
    private static final int BUFFER_SIZE = 8192;
    private static byte[] buffer;
 
    protected final Endpoint serverEndpoint;
 
    private AcceptingChannel<? extends ConnectedStreamChannel> server;
 
    public CharSequenceReceiver() throws IOException {
        serverEndpoint = Remoting.createEndpoint("connection-test-server", OptionMap.create(Options.WORKER_TASK_CORE_THREADS, THREAD_POOL_SIZE, Options.WORKER_TASK_MAX_THREADS, THREAD_POOL_SIZE));
        serverEndpoint.addConnectionProvider("remote", new RemoteConnectionProviderFactory(), OptionMap.create(Options.SSL_ENABLED, Boolean.FALSE));
        final NetworkServerProvider networkServerProvider = serverEndpoint.getConnectionProviderInterface("remote", NetworkServerProvider.class);
        SimpleServerAuthenticationProvider provider = new SimpleServerAuthenticationProvider();
        provider.addUser("bob", "test", "pass".toCharArray());
        server = networkServerProvider.createServer(new InetSocketAddress("localhost", 30123), OptionMap.create(Options.SASL_MECHANISMS, Sequence.of("CRAM-MD5")), provider, null);
        System.out.println("Server Created, " + server.getLocalAddress());
 
        serverEndpoint.registerService("test", new OpenListener(){
 
            public void channelOpened(Channel channel) {
                channel.receiveMessage(new Channel.Receiver(){
 
                    public void handleError(Channel channel, IOException error) {
 
                    }
 
                    public void handleEnd(Channel channel) {
//                        System.out.println(channel.getConnection().getRemoteEndpointName() + " ended");
                    }
 
                    public void handleMessage(Channel channel, MessageInputStream message) {
                        try {
                            channel.receiveMessage(this);
                            buffer = new byte[BUFFER_SIZE];
                            while (message.read(buffer) > -1);
                            System.out.println("    Receive: " + new String(buffer));
                        } catch (Exception e) {
                            e.printStackTrace();
                        } finally {
                            IoUtils.safeClose(message);
                        }
                    }
                });
            }
 
            public void registrationTerminated() {
 
            }}, OptionMap.EMPTY);
    }
 
 
    public static void main(String[] args) throws IOException {
        new CharSequenceReceiver();
    }
 
}

 

 

package org.jboss.remoting3.sample;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
 
import org.jboss.remoting3.Channel;
import org.jboss.remoting3.Connection;
import org.jboss.remoting3.Endpoint;
import org.jboss.remoting3.MessageOutputStream;
import org.jboss.remoting3.Registration;
import org.jboss.remoting3.Remoting;
import org.jboss.remoting3.remote.RemoteConnectionProviderFactory;
import org.xnio.IoFuture;
import org.xnio.IoUtils;
import org.xnio.OptionMap;
import org.xnio.Options;
 
public class CharSequenceSender {
 
    private static final Integer THREAD_POOL_SIZE = 100;
 
    protected final Endpoint clientEndpoint;
 
    protected final Registration clientReg;
 
    protected final Connection conn;
 
    public CharSequenceSender() throws IOException {
        clientEndpoint = Remoting.createEndpoint("connection-test-client", OptionMap.create(Options.WORKER_TASK_CORE_THREADS, THREAD_POOL_SIZE, Options.WORKER_TASK_MAX_THREADS, THREAD_POOL_SIZE));
        clientReg = clientEndpoint.addConnectionProvider("remote", new RemoteConnectionProviderFactory(), OptionMap.create(Options.SSL_ENABLED, Boolean.FALSE));
        conn = clientEndpoint.connect("remote", new InetSocketAddress("localhost", 0), new InetSocketAddress("localhost", 30123), OptionMap.EMPTY, "bob", "test", "pass".toCharArray()).get();
        System.out.println("Connection created, " + conn.getEndpoint().getName());
        send();
    }
 
 
    private void send() {
        System.out.println("enter 'quit' or 'exit' exit the ChatDemo");
 
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
 
        while (true) {
            try {
                String line = in.readLine().toLowerCase();
                if (line.startsWith("quit") || line.startsWith("exit")) {
                    break;
                }
 
                MessageOutputStream stream = null;
                Channel channel = null;
 
                try {
                    final IoFuture<Channel> future = conn.openChannel("test", OptionMap.EMPTY);
                    channel = future.get();
                    stream = channel.writeMessage();
                    stream.write(new String(line.getBytes(), "UTF-8").getBytes());
                } catch (Exception e) {
                    throw new RuntimeException("send char sequence error", e);
                } finally {
                    stream.close();
                    IoUtils.safeClose(channel);
                }
 
            } catch (Exception e) {
                throw new RuntimeException("send char sequence error", e);
            }
        }
 
        IoUtils.safeClose(clientReg);
        IoUtils.safeClose(clientEndpoint);
    }
 
 
    public static void main(String[] args) throws IOException {
        new CharSequenceSender();
    }
 
}

 

Source code in github https://github.com/kylinsoong

 

Run and Test

 

  • Clone Source code from github, or download Source code from attachment, use maven build:

 

mvn clean install dependency:copy-dependencies

 

  • Start CharSequenceReceiver

 

java -cp target/dependency/*:target/jboss-remoting-test.jar org.jboss.remoting3.sample.CharSequenceReceiver

 

  • Start CharSequenceSender

 

java -cp target/dependency/*:target/jboss-remoting-test.jar org.jboss.remoting3.sample.CharSequenceSender

 

  • Type char sequence in client side as below:

https://community.jboss.org/servlet/JiveServlet/downloadImage/21316/VM-remoting-test-client.png

  • Check From Server side 3 char sequence be received by server

Comment by going to Community

Create a new document in JBoss Remoting Development at Community