[jboss-dev-forums] [JBoss Remoting Development] - JBoss Remoting 3 HelloWorld Sample

Kylin Soong do-not-reply at jboss.com
Tue Aug 20 04:31:59 EDT 2013


Kylin Soong [https://community.jboss.org/people/kylin] modified the document:

"JBoss Remoting 3 HelloWorld Sample"

To view the document, visit: https://community.jboss.org/docs/DOC-51182

--------------------------------------------------------------
*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 https://www.jboss.org/jbossremoting/remoting-3

The HelloWorld Sample's architecture like below:
 https://community.jboss.org/servlet/JiveServlet/showImage/21315/remoting3_sample.png  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/JVM/tree/master/remoting/testhttp:// 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/showImage/21316/VM-remoting-test-client.png  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
[https://community.jboss.org/docs/DOC-51182]

Create a new document in JBoss Remoting Development at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=102&containerType=14&container=2051]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-dev-forums/attachments/20130820/6ba4ddb5/attachment-0001.html 


More information about the jboss-dev-forums mailing list