RMI server and client in one application - Exceptions during some calls

I wrote an application, which is an RMI-Server (Server1), and another separate application, which is an RMI-Client (Client1). Because I wont use dynamic class loading, I gave the client beside the interface.java also an interface_implementation.java, which is only a dummy of the original interface_implementation of the server. This dummy contains only declarations of the methods (parameters and return values) and no functional code. From this dummy the _stub.class is generated, and it works fine - no problem.
Now I want to modify Client1 to become also an RMI-Server (Server2) for a second, separate Client (Client2), the methods used are different from the first RMI connection. This Client2 uses a dummy of the implementation of Server2 in the same way as described above. The application Client1+Server2 only has to "translate" the calls from Client2 to Server2 into calls of Client1 to Server1 (Server1 is not changed at all). In case of primitive method parameters or return values this chain of RMI-applications works fine, but in case of more complex structures (my own classes) during the call of Client1 to Server1 an "ClassNotFoundException: access denied to class loader" occurs by running through the stub. Both stub.classes are found, all of the applications know the objects needed, the call of Client1 to Server1 is exactly the same call as it was during the simple version (only Server1 and Client1).
Does anybody know, why this exception occurs and how I can overcome this ?
Axel

I figured out a solution - it's a problem of policies. In detail: Server1's codebase entry (file:) refers to the class directory of Server1's project. In the simple case of only Client1, which has no codebase entry, it works fine without a file permission on the side of Server1. In the complex case of Client1+Server2, which has to have a codebase entry (file:) refering to the class directory of the Server2's project on a separate machine, for exactly the same method call from Client1 to Server1 a file permission entry on the side of Server1 is needed for Server1's class directory. But WHY ???
It seems to be a little confusing with the codebase entries, many of the posts are contrary to others and to my personal experiences. Some comments given by Adrian Colley throw a little light upon some aspects. Is there anybody, who can explain the whole topic, when, why, and which part of RMI application deals with codebase entries, also in case of not dynamic code downloading ? May be there is also a reference into the java docs, which I didn't found up to now.
Thanks in advance
Axel

Similar Messages

  • Can I put both RMI server and client in a same program

    hi everybody...
    I wanna know that can I use RMI server and client in a same program....My idea is like that I wanna use the same program for client and server....When I open my program, I can accept connection from other program and if I want to connect to others, I can also connect it. I expect you to understand my question. Here are the sample code for my program...
    package Chat.Rmi;
    import java.lang.*;
    import java.util.*;
    import java.rmi.*;
    import javax.swing.*;
    import java.net.*;
    import java.rmi.server.*;
    import java.rmi.registry.*;
    public class netKitManager implements netKitInterface{
        public netKitManager(){
            try{
            reg = LocateRegistry.createRegistry(4242);
            reg.rebind("NetKitServer",this);
            }catch(RemoteException re){
        public void DirectConnect(String ip){
            try{
            netUser = (netKitInterface) Naming.lookup("rmi://"+ip+":4242/NetKitServer");
            JOptionPane.showMessageDialog(null,"Connection succeded!");
            }catch(NotBoundException nbe){
                JOptionPane.showMessageDialog(null,"There is no server at specified IP address!");
            }catch(MalformedURLException mue){
                JOptionPane.showMessageDialog(null,"IP adress may be wrong!");
            }catch(RemoteException re){
                JOptionPane.showMessageDialog(null,"Remote exception occured!");
        public void SendMessage(String msg){
            try{
            netUser.SetMessage(msg);
            }catch(RemoteException re){
        public void SetMessage(String msg) throws RemoteException{
            chatKit.SetMessage(msg);
        private netKitInterface netUser;
        private Hashtable netUserList;
        private Registry reg;
    }

    Yes it can be done. I have done it.

  • RMI Server and RMI Client Problem

    First, Hi!
    I have create my RMI Server and a RMI Servlet client.
    I can run the server and servlet first time and it works fine.
    Then, I stop rmiregistry and server.
    Then, I start rmiregistry and server for a second time but my RMI Servlet client gets a
    java.rmi.ConnectException: Connection refused to host: xxx.xxx.xxx.xxx; nested exception is: java.net.ConnectException: Connection refused
    If I copy the class again where the servlets resides, it works again. But I have to keep doing that. I have to keep copying the class file to the servlet directory every 2nd time I try to run it for it to work.
    Anyone know what am I doing wrong?

    First, Hi!
    I have create my RMI Server and a RMI Servlet client.
    I can run the server and servlet first time and it
    works fine.
    Then, I stop rmiregistry and server.
    Then, I start rmiregistry and server for a second time
    but my RMI Servlet client gets a
    java.rmi.ConnectException: Connection refused to host:
    xxx.xxx.xxx.xxx; nested exception is:
    java.net.ConnectException: Connection refused
    If I copy the class again where the servlets resides,which class file ? u mean RMIServer's class files ??
    I have faced the same problem too. In my case if i just restart my Tomcat webserver the error goes and the servlet is very well able to connect back to the RMI Server
    it works again. But I have to keep doing that. I have
    to keep copying the class file to the servlet
    directory every 2nd time I try to run it for it to
    work.
    Anyone know what am I doing wrong?

  • Try to use one comupter as both server and client

    Hello, everyone, I am just trying to use my own computer as both server and client to test some codes about networking. For example, use the sample code in java tutorial which is used to test Echo server(code is listed below). Is there anything I have to do to set my computer, such as set my hostname or something like that?
    I am a pure newbie. And the purpose of this question is to test some code including socket on one PC without connect to internet.
    I have tried to change the name "taranis" in the following code to the computer name of my own PC, but it doesn't work, and said: Couldn't get I/O for the connection to: (my computer name).
    import java.io.*;
    import java.net.*;
    public class EchoClient {
    public static void main(String[] args) throws IOException {
    Socket echoSocket = null;
    PrintWriter out = null;
    BufferedReader in = null;
    try {
    echoSocket = new Socket("taranis", 7);
    out = new PrintWriter(echoSocket.getOutputStream(), true);
    in = new BufferedReader(new InputStreamReader(
    echoSocket.getInputStream()));
    } catch (UnknownHostException e) {
    System.err.println("Don't know about host: taranis.");
    System.exit(1);
    } catch (IOException e) {
    System.err.println("Couldn't get I/O for "
    + "the connection to: taranis.");
    System.exit(1);
         BufferedReader stdIn = new BufferedReader(
    new InputStreamReader(System.in));
         String userInput;
         while ((userInput = stdIn.readLine()) != null) {
         out.println(userInput);
         System.out.println("echo: " + in.readLine());
         out.close();
         in.close();
         stdIn.close();
         echoSocket.close();

    Did you write the EchoServer and start it on your
    machine, listening on port 7?
    You can have the client and server running on the same
    machine or different machines, but they have to be
    separate pieces of software.
    Write a separate EchoServer class that starts up and
    listens on that port. Then start the EchoClient and
    make the connection.
    %yeah, I didn't wrote the EchoServer class. But I thought it is automaticly included and therefore has run once I start my computer.
    If I write a EchoServer class, then how should I set the host name of the EchoClient, just simply change "taranis" to my computer name (change "echoSocket = new Socket("taranis", 7);" to echoSocket = new Socket("(my comptuer name)", 7);"?

  • How can a VI be both server and client?

    Hi, 
    I'm new in LabView and I'm trying to build a server and client VI using TCP/IP that runs in two computers. in my program I need both server and client VIs to communicate with each other which means I need both VIs to be server and client. I've tried using a case structure but it doesnt work. The only thing I achieved is a normal server/client system where the server sends a request and the client responses.But i need the client to send requests too.i have attached my VIs to this post.I would appriciate it if someone could help with this problem. 
    Thanks in advanced. 
    Rambaldi.
    Solved!
    Go to Solution.
    Attachments:
    Server-Client.zip ‏41 KB

    Do you really need a client and server on each PC? If you simply need that two to talk to each other they can once the client connects to the server. In most cases you only need one server.
    What Steve said about the not using the same port only applies to two servers on the same machine. A client must use the port the server is listening to and if the client and the server are on the same machine then they will both use the same port. However, only ONE of them is accepting waiting for connections on that port.
    In the code you posted you actually swapped the names. What you call the client is actually the server code and vise versa. In networking a server is an application that listens to an assigned port, accepts connections on that port and provides whatever services it has implemented. A client is an application that establishs a connection to a server. Once a connection is established the two applications can communicate in both directions. The applications themselves will define how the conversation should progress and whether it is a one way conversation or a two way conversation. You don't specify what you are trying to accomplish but I suspect you only need a single server.
    In TCP, every connection is defined by the source and destination IP addresses and the source and destination ports. The server uses a known port (FTP is port 21, HTTP is 80, telnet is 23, or some custom port in the user space beyonds the reserved ports) to listen for connections. The client will use the well known port of teh server and generally picks a random port for its port number. The LabVIEW VIs do this automatically. This is how a server and a client on the same computer can use the same port number. Two servers however cannot. The server application can spawn a child task allowing it to service multiple connections at one time though. Each connection will be unique though since the client's port number, address or both will change for each connection.
    OK, end of networking 101.
    Can you describe in a bit more detail what exactly you want to accomplish. Given that I could probably provide you with more information for your application.
    Mark Yedinak
    "Does anyone know where the love of God goes when the waves turn the minutes to hours?"
    Wreck of the Edmund Fitzgerald - Gordon Lightfoot

  • UDP server and client running on same machine

    Hi all,
    I can't get the QuoteServer example to work. I am trying to run both server and client on same machine since I only have one machin available at the moment.
    I am using win xp behind a firewall. Anything that might interfere?
    With some System outs I can see that the server is waiting for request but never getting any...

    Restarted computer and now it works. Are ports locked up if I get an exception in the 'wrong' place?

  • Directory structure for servlets and webservices in one application

    hi,
    Can any one help me for creating servlets and webservices in one
    application and deploying in Jboss 4.2.0.
    I want to know exactly what is the directory structure for creating this
    application and what are the additional .xml files for deploying this application.
    if any one know this answere please tell the answere.

    I figured out a solution - it's a problem of policies. In detail: Server1's codebase entry (file:) refers to the class directory of Server1's project. In the simple case of only Client1, which has no codebase entry, it works fine without a file permission on the side of Server1. In the complex case of Client1+Server2, which has to have a codebase entry (file:) refering to the class directory of the Server2's project on a separate machine, for exactly the same method call from Client1 to Server1 a file permission entry on the side of Server1 is needed for Server1's class directory. But WHY ???
    It seems to be a little confusing with the codebase entries, many of the posts are contrary to others and to my personal experiences. Some comments given by Adrian Colley throw a little light upon some aspects. Is there anybody, who can explain the whole topic, when, why, and which part of RMI application deals with codebase entries, also in case of not dynamic code downloading ? May be there is also a reference into the java docs, which I didn't found up to now.
    Thanks in advance
    Axel

  • I am using server and client systems when i am trying to open the browser in two or more machines it says that firefox is already running, i want to open the browser in all machines simeltaniously

    I am using server and clients machines in my office, here i want to open browsers in all systems simultaneously but i am unable open the browser, when i am trying to open the browser in the second machine it says that firefox is already open... pls. solve this problem
    Thank you

    You can't open one Profile more than once. You need a separate Profile for each browser on each PC that you open.
    https://support.mozilla.com/en-US/kb/Profiles

  • Force CORBA server and client to localhost

    Hi,
    i have to run an omg corba server and client via orbd on a single machine with win xp. The machine is connected to the network, but this is not relevant for the corba communication.
    I can now force the orbd to start at localhost. After starting server and client everything works well until disconnecting machine from network, because client and server are started at ip of network card.
    How can i force the client and server to use a localhost port for corba communication (client and server)?
    Hope anyone has an idea...
    br
    ralf
    P.S.: If I start the applications after disconnecting network everthing works.

    Resolved the problem myself.
    The correct property is a java system property:
    com.sun.CORBA.ORBServerHost=localhost
    If you set this property in your application before instanciating an ORB, the orb will be forced to run on the set value (in this case localhost). If you do not set this property the ORB will be started at the IP of your network card if it is active (connected to the network)...

  • Connection fails if server and clients are in different subnets

    Hello,
    our Volume License Manager (v2.1) is running in another subnets than the clients (All machines are running under Windows XP-SP2 without Domains or ADS, just workgroups).
    The server is in subnet A (192.168.42.0/24), all clients are located in another subnet  B (192.168.50.0/24).
    Routing is properly configured and is working fine, traffic to the specific hosts is not blocked by a firewall. We can ping every machine,
    open telnet connections to the NILM, everything works.
    But if the clients try to connect to the remote NILM (both local client NI License Manager and VLM port settings are correct)  their connection attempt always
    times out with error code "NILM10"
    (I already read the mentioned KBs, no solution has helped so far). This is true if clients and server are separated.
    For testing purposes, i plugged one client into the server's subnet (server's IP: 192.168.50.250, client 192.168.50.10)
    and it worked perfectly. Is there a reason why  server and client have to be on the same subnet or is it some other kind of problem that I am not aware of?
    Thank you.
    Thorsten

    Hello Thorsten,
    Did you add the server's domain to the client computer's DNS settings. To do this, complete the following steps on the client computer:
    1. Open Local Area Network Settings from the Control Panel (Start»Control Panel»Network Connections»Local Area Connection)
    2. Click the Properties button
    3. Select Internet Protocol (TCP/IP) from the list of network components
    4. Click the Properties button
    5. Click the Advanced button
    6. Change to the DNS tab
    7. Ensure Append these DNS suffixes is selected
    8. Click the Add button
    9. Enter the domain suffix of the license server and click Add
    10. Close any open dialog boxes, choosing OK and Close as necessary.
    (http://digital.ni.com/public.nsf/allkb/3AAF37CD7B89A2CD86257070005A075A?OpenDocument)
    Further you should check this KBs.
    Why is My NI License Manager Slow or Not Responsive with a Configured Network Server on Another Domain?
    http://digital.ni.com/public.nsf/allkb/27D6BD8116EF257A862572F2005C2181?OpenDocument
    How Can I Access NI Volume License Manager from a Different Network or Behind a Firewall?
    http://digital.ni.com/public.nsf/websearch/54E52C3F348B929786256DCD0056B19B?OpenDocument
    Regards,
    WolfgangZ

  • Data streaming between server and client does not complete

    Using an ad-hoc app, data streaming between server
    and client does not complete as it supposed to be.
    The process runs well in solaris 5.8, however under 5.9
    we have found the characters stream buffer length limitation
    is around 900 to 950 characters (by default we are using 3072
    characters).
    Example:
    - We are transfering HTML file, which will be displayed
    in the App client, with buffer=3072, the HTML only displayed / transfered
    as xxxxxxxx characters, but with buffer=900 the HTML is displayed properly,
    in this case, the only problem that we have is the file transfer will
    eventually longer than usual.
    - There is another case, where we have to transfer information (data) as stream
    to the client. A long data stream will not appear at all in the client.
    Any ideas why the change between 5.8 and 5.9 woudl cause problems?
    The current app-driver that we are using is compiled using Solaris 5.6,
    if possible we would like to have use of a later version, which is compiled using Solaris 5.9, do you think this will probably solve our problem?
    Thanks
    Paul

    Does this have anything to do with Java RMI? or with Java come to think of it?

  • MultiThreaded Server and Client connections query.

    I have written a MultiThreaded Server to accept incoming client requests.
    Multiple clients can connnect to this server and have a conversation.
    I invoke the 'MultiServer' from the command line and then invoke 3 clients
    from the command line.('Client').
    c:> java MultiServer
    c:> java Client
    c:> java Client
    c:> java Client
    All the 3 clients now run in their own thread and send messages
    to the server.
    The problem I am facing is this:
    When client1 connects to the server and sends a message to the server (with the server responding)
    it works fine.Both Server and Client can exchange messages.
    When client2 connects to the server and sends a message and when the server
    responds with a message,the message does NOT go to client2,but goes to Client1
    As Clients have their own thread to run,shouldnt the messages also be delivered to
    individual clients
    Am I missing something?
    My Code
    public class MultiServer {
        public static void main(String[] args) throws IOException {
            ServerSocket serverSocket = null;
            boolean listening = true;
            try {
                serverSocket = new ServerSocket(4444);
                System.out.println("MultiServer listening on Port 4444");
            } catch (IOException e) {
                System.err.println("Could not listen on port: 4444.");
                System.exit(-1);
            // Indefinite Loop.
            while (listening)
             new MultiServerThread(serverSocket.accept()).start();
            serverSocket.close();
    public class MultiServerThread extends Thread {
        private Socket socket = null;
        public MultiServerThread(Socket socket) {
         super("MultiServerThread");
         this.socket = socket;
        public void run() {
         try {
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
             BufferedReader in = new BufferedReader(
                            new InputStreamReader(
                            socket.getInputStream()));
               BufferedReader stdInFromServer = new BufferedReader(new InputStreamReader(System.in));
            String fromTheClient,fromServer;
               fromServer = "Hi Client,How u doing? ";
            // Send a message from the Server.
               out.println(fromServer);
                while ((fromTheClient = in.readLine()) != null) {
                 if (fromTheClient.equals("ByeServer"))
                 break;
                 // Display message received from Client.
                 System.out.print("Client Response : ");
              System.out.println(fromTheClient);
                 // Input reply from the Server.
                 fromServer = stdInFromServer.readLine();
                 out.println(fromServer);
                 if (fromServer.equals("Bye."))
                    break;
             out.close();
             in.close();
             socket.close();
         } catch (IOException e) {
             e.printStackTrace();
    Client Code
    ===========
    public class Client {
        public static void main(String[] args) throws IOException {
            Socket kkSocket = null;
            PrintWriter out = null;
            BufferedReader in = null;
            try {
                kkSocket = new Socket("localhost", 4444);
                out = new PrintWriter(kkSocket.getOutputStream(), true);
                in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
            } catch (UnknownHostException e) {
                System.err.println("Don't know about host: localhost.");
                System.exit(1);
            } catch (IOException e) {
                System.err.println("Couldn't get I/O for the connection to: localhost.");
                System.exit(1);
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
            String fromServer;
            String fromUser;
            while ((fromServer = in.readLine()) != null) {
                System.out.println("Server: " + fromServer);
                if (fromServer.equals("Bye."))
                    break;
                    fromUser = stdIn.readLine();
             if (fromUser != null) {
                    out.println(fromUser);
            out.close();
            in.close();
            stdIn.close();
            kkSocket.close();
    }

    Taking standard input for multiple threads from one console is quite unpredictable. I think the first client thread is waiting for input when you connect the second. You type something into your server window and since the first thread was waiting for input, it takes the input and sends it to client 1.

  • Dns server and client in java

    Hello!
    Im trying to code a dns server and client in java.
    It`s supposed to be a very simple one. The server should just resolve the query, started from the client.
    Where can I find any code samples? It would really help me to get started.
    Thank you very much!
    Anne

    Do you have some code ?

  • How to start oracle database server and client in windows 8

    Hi at all
    I'm a new entry in this forum and I'm a beginner with database oracle.
    I used always SQL Server as database and it was easy to use after installation.
    With SQL Server configuration management program I could to launch the SQL Server (SQLEXPRESS) service and the database server start up!!
    With SQL Server management studio I could to launch the client application, then was establishing a connection to the server and all was working fine!
    Now, how to work with oracle database?
    I installed oracle server and client version 11g R2 on windows 8, but how can I start the server database? .. and how can I start the client application for querying?
    regards in advance.
    P.S.: Sorry for my english. 

    SomeoneElse
    thanks for the response.
    I setting the service to start manually because otherwise windows is slow to startup.
    In particular I have precisely this oracle service on my operating system after installation.
    - ) OracleVssWriterSYSDBA
    - ) OracleDBConsolesysdba
    - ) OracleJobSchedulerSYSDBA
    - ) OracleMTSRecoveryService
    - ) OracleOraDb11g_home1ClrAgent
    - ) OracleOraDb11g_home1TNSListener
    - ) OracleServiceSYSDBA
    What are the services that start the server and I have to launch?
    What is the client program in menu --> start -- > all program --> Oracle - OraClient 11g home..... that I have to use for querying database?
    thanks.

  • Windows Media Player no sound while playing a avi file in server and client connection using TCP/IP connection

    Hello there
    I have a problem with my windows media player while using server and client connection by using TCP/IP connection. So when I play a video using Windows Media Player in LabVIew there isn't any sound come out but when I'm playing a video by a Windows Media Player only the sound will come out. Can you help me solve this problem?
    I also upload the vi as the reference.
    The username for the client is ihsanhaikalz and the password is ganteng
    Thanks
    Attachments:
    Client Remote.vi ‏746 KB
    Server Remote.vi ‏1433 KB

    Hi ican,
    I was looking at your VI's but I cannot seem to pinpoint exactly where you are using Windows Media Player.  In order to more quickly assist you, could you please recreate this issue more concisely in a smaller set of VIs.  Also, were you able to get sound when you did not use the TCP/IP connection and simply played the files in LabVIEW?
    I noticed in a few places that you were using the Play Sound File.VI from the Graphics and Sounds palette.  Is that what you are refering to?  I noticed there that the file path that you have designated for the song is simply the song title.  Instead, this should be a path to where the song is located on your computer.
    Also, if you are planning on using Windows Media Player, have you considered using the ActiveX commands for Windows Media Player?  Here are a few examples if you are unfamiliar with this functionality.
    Example 1 and Example 2.
    I hope this helps!
    Kim W.
    Applications Engineer
    National Instruments

Maybe you are looking for

  • Multiple lines for same app on daily trend report?

    Hey All, This is my first app and my first time reading the reports so pardon me if I am confused. I noticed that there are several lines (about 20) on my trend report all for the same App. From reading about the trend reports it seemed like each app

  • How do you change the date/currency format for every user in OSX 10.6?

    I imaged a bunch of mac labs at work only to realize the base image has the date/currency set for United States rather then United Kingdom. The regional settings are correct. I tried changing it on the local admin account but it does not affect a new

  • Business component errors messages

    I would like to customize the Business component errors messages in order for it to be more explicite For example, I would like to translate the following error message: DAC-305: DbAccess commitTransaction failed. Session: modelSessionInfo JBO-26041:

  • How do I organize individual songs by artists name in my iphone5?

    Hey, the pre-installed music player in my iphone5 doesn't have an option for me to organize individual songs by artists. It is organized by song names. I'm sure I can do this in itune. How do i do this? Also I have another question. When I play my mu

  • InDesign/PhotoShop Compatibility

    I recently purchased InDesign and have an older version of Photoshop (CS). Am I going to come across any issues by using an older version of Photoshop with InDesign?