RMI server calling a method on a client object ?

Hi All,
I am writing a client - server application and my intention is to use RMI for comunication.
When the client has to retrive datas from the server it's easy, but let's suppose that the server has to inform the client about some updates about the data, how can I do that?
I do not want the client keeping calling methods on the server to see if there is something of new :(
Is there some way to pass an OutputStream to the client, so when the server writes someting, the client reads it ? ( the client should have a thread which keeps reading)
Or maybe I could pass a reference of a client class to the server so when the server needs to inform the client, it calls a method on this class?
thanks, Fab

The client can be a Remote Object to, passed as a remote reference when calling the server.
Basically all you'll have to do is "register" the client on the serverside.
Your serverside class would the have a:
register(RemoteClient client) method.
The server could the use this remote reference for callbacks.
So, all you have to do is declare the Remote Interface for the client and implement it, and the call the servers myRemoteServer.register(this).
If you've already implemented the server, it's a peace of cake to enhance your client.

Similar Messages

  • Calling a method that returns an object Array

    Hello.
    During a JNICALL , I wish to call a method which returns an object array.
    ie my java class has a method of the form
    public MyObject[] getSomeObjects(String aString){
    MyObject[] theObjects=new MyObject[10];
    return theObjects
    Is there an equivalent to (env)->CallObjectMethod(...
    which returns a jobjectArray instead of a jobject, and if not could somebody suggest a way around this.
    Thanks,
    Neil

    I believe an array oj jobjects is also a jobject. You can then cast it to another class.

  • How to call the method of a Business Object?

    Hi,
    Can someone guide me how to call the method of a business object?
    For example, I want to use the method SalesDocument.Copy of the Business Object VBAK. How can I do that? If you are familiar with any similar scenario please help.
    Regards,
    Renjith Michael.

    Hi
    double click on the copy  and
    go to abap tab
    there u can get functionmodule name
    u can call that
    Rewards if helpful

  • Calling parent method from within child object

    Hello,
    A quick question! Is it possible to call a method in a parent object from within a child object.By child object I mean an object that was instantiated within the parent object.
    Thanks.

    A quick question! Is it possible to call a method in a
    parent object from within a child object.By child
    object I mean an object that was instantiated within
    the parent object.Since you are using ambiguous terminology, it would be much better if you provided a small sample of your code to avoid confusion. I am guessing that you are actually talking about an inner class when you say child class.
    If that is correct, then you can do something like this:
    class Parent {
      void foo() {}
      void bar() {}
      class Child {
        void foo() {}
        void test() {
          bar(); // No conflicts, just call the Parent method
          Parent.this.foo(); // Use explicit qualification to avoid conflicts.

  • RMI server call in 1.4.2_13 1.5.0_12 vs. 1.6.0_3

    I compiled rmi server and client using 1.4.2_13,Calling server functions from applet.
    If applet runs from 1.5.0_12 browser, I do not see any problems.
    But If applet runs from 1.6.0_* browser, then some of server functions are returing StreamCorruptedException
    Any help will be appreciated
    Thanks

    I compiled rmi server and client using 1.4.2_13,Calling server functions from applet.
    If applet runs from 1.5.0_12 browser, I do not see any problems.
    But If applet runs from 1.6.0_* browser, then some of server functions are returing StreamCorruptedException
    Any help will be appreciated
    Thanks

  • Calling a method from a UICommand Object

    How do I call an action method from a UICommand object?
    I create a HtmlCommandLink in my backing bean, and I think I should be setting the action, but with what? The method takes a MethodBinding but I can't find much detail on how to get that. I just want to call a method like linkAction1_action() in the example below, but you cannot pass a method.
    public class Page1 extends AbstractPageBean {
      private HtmlPanelGroup panel = new HtmlPanelGroup();
      public HtmlPanelGroup getPanel() {
        return panel;
      public void setPanel(HtmlPanelGroup panel) {
        this.panel = panel;
      public Page1() {
        HtmlCommandLink link = new HtmlCommandLink();
        link.setAction(/* what do I put here */);
        this.panel.getChildren().add(link);
      public String linkAction1_action() {
        return "GoBack";
    }

    OK. A couple days later and I am able to answer my
    own question. Anyway, I will lay it out there for
    anyone interested. This worked for me...
    public class Page1 extends AbstractPageBean {
    private HtmlPanelGroup panel = new HtmlPanelGroup();
    public HtmlPanelGroup getPanel() {
    return panel;
    public void setPanel(HtmlPanelGroup panel) {
    this.panel = panel;
    public Page1() {
    HtmlCommandLink link = new HtmlCommandLink();
    link.setAction(
    FacesContext.getCurrentInstance()
    .getApplication()
    .createMethodBinding("#{Page1.linkAction1_action}",
    new Class[0]));
    this.panel.getChildren().add(link);
    public String linkAction1_action() {
    return "GoBack";
    Since you're setting the action from within the Page1 object, why don't you create a method binding manually? This will be much more performant that using the application to create and EL-based binding.
    Try:
    link.setAction(new MethodBinding()
          public Object invoke(FacesContext facesContext, Object[] objects) throws EvaluationException, MethodNotFoundException
            return linkAction1_action();
          public Class getType(FacesContext facesContext) throws MethodNotFoundException
            return String.class;
    });Note that you also avoid any naming convention - you do not require your Page1 object to be configured as a managed bean "Page1".

  • Calling a method in an owning object

    I have an application that involves an object (B) that is a member (not a sub-class) of another object (A). Within the owned object (B) I want to call up a method from the owning object A. E.g I would like to do something like this:
    class A
    object B; // B is a member of A
    methodX( )
    class B
    owner.methodX( ); // invoke the methodX that is a member of object A.
    Is this possible and how can i do it?

    No, there is no implicit reference to an "owning" object. Think about the following code:
    class Parent {
      Child child
      Parent(Child child) { this.child = child; }
      void doSomething() {}
    class Child {
    class Test {
    public static void main(String[] args) {
       Child child = new Child();
       Parent p1 = new Parent(child);
       Parent p2 = new Parent(child);
    }So the two instances of Parent both have a reference to the same instance of Child. Which one is the "owner"?
    You'll have to explicitly give your "child" object a reference to the "owner" object in order to call methods on it

  • Generic approach to call a method for any business object

    My requirement is to call the DISPLAY method of a business object when I have the objectType and objectId.
    Say I have BUS2012 and Id 4500001111, now I want to call a method which invoke the DISPLAY method for this object with objectId (say ME_DISPLAY_PURCHASE_DOCUMENT for purchase order). I even have the key fields for the business object.
    Is it possible ?
    Thanks in advance !
    Ruhi Hira

    Hi Ruhi,
               Yes you can call the method for display.Before we can do that we need to fix the procedure for the calling of the method.If you want to call it programitically or you want to call it in task builder or you want to use it as a activity in the work item.we can check for the BUSXXXXXX what ever number is there and we can also check for the activity type pre defined by SAP for it.If suppose you dont have the activity we can create the method for the BOR object type using SWO1.May be it helps your query.
    Have a best day ahead.

  • Rmi-iiop: calling secured method on Ejb -- NO PERMISSION Exception

    In WL6.1, I have an Ejb with secured methods. The (Swing) client application accesses the Ejb through rmi-iiop using the JDK1.3.1 Orb.
    Unfortunately, it seems that the caller identity (which was supplied in the InitialContext lookup) is not propagated
    to the server: any call to a secured method
    fails with a CORBA NO_PERMISSION Exception.
    Using the t3 protocol the program works fine, but that would require the 25Mb weblogic.jar on all clients, which is unattainable for us.
    Any ideas how this situation can be corrected?
    -Allard Siemelink

    Hi Allard,
    Please pose this in the weblogic.developer.interest.rmi-iiop.
    Thanks,
    Allard Siemelink wrote:
    In WL6.1, I have an Ejb with secured methods. The (Swing) client application accesses the Ejb through rmi-iiop using the JDK1.3.1 Orb.
    Unfortunately, it seems that the caller identity (which was supplied in the InitialContext lookup) is not propagated
    to the server: any call to a secured method
    fails with a CORBA NO_PERMISSION Exception.
    Using the t3 protocol the program works fine, but that would require the 25Mb weblogic.jar on all clients, which is unattainable for us.
    Any ideas how this situation can be corrected?
    -Allard Siemelink--
    Apurb Kumar
    Developer Relations Engineer
    BEA Support

  • Calling a method on a remote object to ping the server

    I need a generic way of pinging a server to check if it is still there. Assuming I don't know the methods defined in the remote interface of the server, one way to achieve this would be to invoke one of the Object methods on the server and catch any exceptions. To do this I could call invoke on the RemoteRef interface, but this requires the opnum of the method, and I don't know what these are for the Object methods. Can anyone help, or suggest a better method for pinging the server ?
    William
    For example:
    // my remote service
    Remote service;
    // obtain remote ref
    RemoteRef ref = ((RemoteObject) service).getRef();
    // invoke Object method e.g. hashCode
    ref.invoke( ... );

    if you mean a real ping like windows/unix send from the ping command then it can not be done from jave. you can either connect to the echo port and test it that way or you would have to make a native call.

  • RMI-server communicates oracle: Exception

    Hallo everybody,
    My task is:
    - to implement in oracle Java stored procedure,
    - to implement RMI server
    - to load in oracle wrapper for Connection-object (ConnectionImpl), that has a reference at Connection (default oracle Connection), this ConnectionImpl-object will be passed to RMI-server, the RMI-server will call a method on this object.
    - Stub and Skeleton of ConnectionImpl are on both sides available (inside of oracle (as .jar) and on RMI-server side).
    First I start RMI-server. Then I call the stored procedure. It finds RMI-server, calls the method on RMI-server side, then RMI-server tries to call the method of ConnectionImpl with the following result:
    Fehler: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
         java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
         java.net.SocketException: Connection reset
    java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
         java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
         java.net.SocketException: Connection reset
    java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
         java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
         java.net.SocketException: Connection reset
         at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:292)
         at sun.rmi.transport.Transport$1.run(Transport.java:148)
         at java.security.AccessController.doPrivileged(Native Method)
         at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
         at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
         at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
         at java.lang.Thread.run(Thread.java:534)
         at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
         at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
         at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:133)
         at server.NativeDllServer_Stub.init(Unknown Source)
         at storedprocedure.OracleTest.verbinde(OracleTest:26)
    Caused by: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
         java.net.SocketException: Connection reset
         at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:274)
         at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
         at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:101)
         at elena.ConnectionImpl_Stub.returnString(Unknown Source)
         at server.NativeDllServer.init(NativeDllServer.java:18)
    I will be thankful for every tip, how I can resolve it.

    Its clear you have the java permission set to allow db Java to write to a socket, since the call to the RMI server works, but maybe you are missing the permission to allow db java to listen and/or read from a socket?
    See:
    http://download-west.oracle.com/docs/cd/B14117_01/java.101/b12021/security.htm#sthref714
    for java.net.SocketPermission
    Chris

  • 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

  • Java.rmi.ConnectException on calling callback method

    I have an interface exposed as a remote service with a simple method to register the callback object on wich the server calls a method to notify an event.
    public void registerForNotification (ExitCodeCallback callback) throws RemoteException;
    public interface ExitCodeCallback extends Remote
       * @param event
       * @throws RemoteException
      public void notifyExitCode (ExitCodeEvent event) throws RemoteException;
    public class ExitCodeEvent implements Serializable
       * Comment for <code>serialVersionUID</code>
      private static final long serialVersionUID = -8542839971016423057L;
      private Integer code;
      private String sourceName;
       * @param source
       * @param exitCode
      public ExitCodeEvent (String source, Integer exitCode)
        exitCode = code;
        sourceName = source;
       * @return Object
      public Object asString ()
        return sourceName + " exited with code " + code;
    }When the server try to call this method causes an exception to be thrown
    java.rmi.ConnectException: Connection refused to host: 26.2.242.76; nested exception is:
         java.net.ConnectException: Connection refused: connect
         at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
         at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
         at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
         at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:94)
         at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:179)
         at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
         at $Proxy2.notifyExitCode(Unknown Source)
         at it.sogei.jscheduler.rmi.server.SchedulerServicesServerSide$InnerServerExitCodeCallback.notifyExitCode(SchedulerServicesServerSide.java:156)
         at it.sogei.jscheduler.rmi.server.ApplicationTask.notifyExitCode(ApplicationTask.java:129)
         at it.sogei.jscheduler.rmi.server.WaiterThread.run(WaiterThread.java:47)
         at java.lang.Thread.run(Thread.java:595)
    Caused by: java.net.ConnectException: Connection refused: connect
         at java.net.PlainSocketImpl.socketConnect(Native Method)
         at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
         at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
         at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
         at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
         at java.net.Socket.connect(Socket.java:516)
         at java.net.Socket.connect(Socket.java:466)
         at java.net.Socket.<init>(Socket.java:366)
         at java.net.Socket.<init>(Socket.java:179)
         at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
         at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
         at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569)
         ... 10 morebut, surprisingly, the client receives the event even if the ExitCodeEvent.asString() called on that object print the following line
    null exited with code null.
    I wonder how this could be happened?

    - It happens every single time the callback method is invoked, I see the event been deserialized client-side with the fields initialized with null values and server-side there is the java.rmi.ConnectException.
    - The client can't unexport the callback object, that's because I didn't think to do it.
    this is the method where I start to notify to all the registered client the event
    for (ExitCodeCallback callbackElement : callback)
            try
              callbackElement.notifyExitCode(event);
            catch (RemoteException ex)
              logger.debug("Unable to notify.", ex);
          }where
    List<ExitCodeCallback> callback;and implementation of the callback interface is
    public class ClientExitCodeCallback implements ExitCodeCallback
      transient Logger logger = Logger.getLogger(ClientExitCodeCallback.class);
       * @see it.sogei.jscheduler.ExitCodeCallback#notifyExitCode()
      public void notifyExitCode (ExitCodeEvent event) throws RemoteException
        logger.warn(event.asString());
    }

  • Kicking out a client from rmi server

    I have a few clients on a rmi server .
    how can I disconnect a client from the server?
    the client is an applet.
    I treid calling a method containning System.exit(0)
    from the server on to the client but it throws a
    java.securtiy .. exception?
    so how can I close down the client applet from the server?
    thanks

    please help
    shall I throw a remote exception on the server

  • RMI Server issuing commands to clients - help please

    I am trying to setup 2 clients to respond when an RMI server sends them a message, however I have never done any distributed programming before.
    Can anyone please post up some classes which show how to have a client listening and a server connecting to them in order to activate a method. I would be extremely grateful. If anyone knows of a web site or another similar resource with an example like this that would also be much appreciated...
    Many thanks,
    drawdE

    Earlier responses pointed out something important:
    when it comes to real communications, the roles of
    client and server are frequently switched.Yes, but CONCEPTUALLY.
    What you mean to say really, is that a process can be ASKED for some resource (then it would be acting like a "server") or it can ASK for a resource (it would be acting like a "client"). Please note that i said it ACTS like something. It is not the same thing as it REALLY BEING that thing substantially. What i'm driving at is that when you design an app, objects that make it up take dual roles at THAT LEVEL of their own operation, but universally (when you look at the ENTIRE app), things cannot switch around like that anytime they want. An RMI Server is just that: A server. Clients connect to it, and there's no reason for the server to want to connect to a client of its own volition. When you start doing that, you're messing around with WHAT IT MEANS to implement client/server arch.....For instance, the objects that make up of that talk to bound remote objects on the server, CAN act out this dual role: but not when you have a bird's eye view of the entire app.
    Its bad design. Its bad practise.
    >
    At the "architectural" level - something I admit is
    vague - I suggest that in the application described by
    the original poster, the only distinctions between
    client and server are
    o There are multiple clients but only one server.What the original post doesnt seem to get is that there would be as many clients as servers if he succeeds.
    o A client can register with a server for on-going
    communications, In everything else i would agree, but not in RMI: its nature just forbids it, because it means implementing what is in the server-side......on the client-side, just so the client can be TALKED TO by the "one server", as you put it.
    but not the reverse.
    >
    This last point is key to server-initiated
    communications (using RMI). When a client registers
    with a server, it passes a reference to an object that
    extends Remote. The server holds onto this reference,
    and when it has something to say to the clientlike what? RMI isnt built that way! the client talks to the server. End of story.
    , then
    the server calls a method of that remote objectimplying another server on the client-side!!! doesnt make sense at all.
    >
    Finally, It bears repeating in this forum: With RMI,
    such "callbacks" will not work if the clients are
    behind firewalls.Correct, but irrelevant: firewalls or no firewalls, WHY are you trying to do it in the first place?
    It also bears repeating in this forum: RMI is client/server architecture in practice, but its the NATURE of RMI that forbids it from being used the way ANY OTHER C/S architecture out there is flexible.

Maybe you are looking for

  • Can you have 2 seperate email addresses with one apple account

    My family has had one apple account forever.  My wife just changed her email address to an @icloud.com Can her address or account be linked to my longstanding apple account?

  • High waits on scatter read and buffer busy wait ..

    one of my system is undergoing some serious problem ~ i checked when some sql querying few large tables ( 30 millions rows ,partioned ) system waits became significant .. the ones stand out are scatter read and buffer busy wait ... on the longop , yo

  • How to send attachments to a laptop by bluetooth

    When I'm travelling and am away from the internet, I need to transfer email attachments onto my laptop to work on them. This seems straightforward with a jpeg, as you can save it to the media drive and then there is a 'send by bluetooth' option on th

  • About xml discover request

    Hi, I hava some questions as below: 1. I send the XML Discover call to request a list of catalog, it can get info cube and ods cube, ods cube is used to select data? 2. It losts dimension "Request Package" and dimension which own "Navigation Attribut

  • How to bring PCUI_GP DCs to local development environment

    Hi, I want to create a fresh FPM based application in local development environment. For this I need to add the PCUI_GP DCs as used DCs. Currently they are not available in local development environment but only in DTR Track... How do i bring these D