Advantages of using RMI?

I've a software which I'm just trying to use as a proof-of-concept. This software is supposed to be a client-server software but with one added requirement, that is with the ability to extend itself by having the client downloading additional/updated code/plugin/features/functionalities so that I don't have to reinstall the clients on various machines separately each time I introduce a new capability.
So with this in mind, it sounds like a job for RMI which enables code to be dynamically downloaded and executed. Thus I've been reading up on the basics of RMI and then I figure out that it maybe possible to do a easier alternative way to simulate the same thing, of course perhaps without some bells and whistles and more advanced capability offered by RMI.
My concept is that I can just upload any new functionalities (extensions) in .class files (which implements a common interface understood by client) to a web server, which the client will poll and check for. After which the client can simply use a URL object (and UrlConnection object) to download to client. And since the extension implements an interface understood by client, the client can call the methods (which should be there as specified by the interface) and then dynamically use the Java reflection API to check and instantiate and run methods from this extension plugin.
So do you recommend going for RMI or doing it the simpler way?

You could take a look at the following open-source project:
https://cajo.dev.java.net
It's an RMI framework that can do the things your are mentioning, even some more :-)
John

Similar Messages

  • What is the advantage of using RMI over socket connection

    plz tell me guys what is the advantage of using RMI over socket connection bcoz inherently RMI also uses socket connection.so what is the exact difference in between thm and what is the advantage of using RMI over socket connection.

    i knew tht bt i http://www.catb.org/~esr/faqs/smart-questions.html#writewell
    How To Ask Questions The Smart Way
    Eric Steven Raymond
    Rick Moen
    Write in clear, grammatical, correctly-spelled language
    We've found by experience that people who are careless and sloppy writers are usually also careless and sloppy at thinking and coding (often enough to bet on, anyway). Answering questions for careless and sloppy thinkers is not rewarding; we'd rather spend our time elsewhere.
    So expressing your question clearly and well is important. If you can't be bothered to do that, we can't be bothered to pay attention. Spend the extra effort to polish your language. It doesn't have to be stiff or formal — in fact, hacker culture values informal, slangy and humorous language used with precision. But it has to be precise; there has to be some indication that you're thinking and paying attention.
    Spell, punctuate, and capitalize correctly. Don't confuse "its" with "it's", "loose" with "lose", or "discrete" with "discreet". Don't TYPE IN ALL CAPS; this is read as shouting and considered rude. (All-smalls is only slightly less annoying, as it's difficult to read. Alan Cox can get away with it, but you can't.)
    More generally, if you write like a semi-literate b o o b you will very likely be ignored. So don't use instant-messaging shortcuts. Spelling "you" as "u" makes you look like a semi-literate b o o b to save two entire keystrokes.

  • What is the advantages of using Interface?

    Hi,
    I still don't get what's the advantages of using interface. Reusability? is it the main advantage? thanks in advance.

    What is GOF?
    Interface is a good program practice when working with RMI (Remote Method Invocation) application. Imagine your anti-virus. When you connect to internet your software invoke a method into your software vendor site and download the new definitions. Now every anti-virus Subscription is different. The method you invoke, will depends on your Subscription. If you hard code the method abstractly, you will not achieve this functionality.
    Another concept is that because Java does not practice multile inheritance interface is a goog way to interface into another class.
    Example
    I want to extends to multiple class which java do not support. I will write an interface i.e I want to extends to FileOutputStream, OutputStream, Object, Integer, String, ActionEvent, Window etc.
    I will write an interface like this
    interface MyClass {
    pulic void setFileOutputStream ( FileOutputStream file );
    public void setOutputStream ( OutputStream );
    public Object getObject ( );
    public Seriable getInterget ( )
    ------------------- //You get the gist
    With this interface you can implement they behaviours
    You could say, why don't we just import them. When yo import them you have already hard coded there behaviour. But this way you can apply diferent behaviour throughout you application development. And any class that implement them must provide ways of using it.

  • Is there any problems in IE if using RMI.?

    Hello buddies,
    this is my 3rd attempt to get answer. before it i tried 2 times but didn't get answered.
    actually i m making a chat application. in that there is a canvas on which we can draw something and send it to all users. i make an applet and from within the applet i m calling a frame. all this awt components like canvas and buttons etc. displays in the frame. applet is just a platform do call the frame. i m using RMI to do the chat. i tried to run it first in appletviewer and it works fine. but when i tried to run in IE from <applet> tag no frame is displays. i am trying to solve it from last 20 days but still unsolved. here is the code if anybody wishes to try it.
    // clinet frame...
    import java.rmi.*;
    import java.rmi.server.*;
    import canvas.Drawer;
    import java.awt.*;
    import java.applet.*;
    import java.applet.Applet;
    import java.awt.event.*;
    import java.util.*;
    import ru.zhuk.graphics.*;
    /*<applet code="ChatClient" width=600 height=300>
    </applet>
    public class ChatClient extends Frame implements IChatClient,ActionListener,MouseListener,MouseMotionListener
         // GLOBAL VARIABLES USED IN THE PROGRAMME...
         boolean flag=false;
         int n;
         String str="";
         String Coord=null;
         IChatService service=null;
         FrameApplet fa=null;
         TextField servername,serverport,username;
         Button connect,disconnect;
         TextField message;
         Button send,sendText;
         TextArea fromserver;
         int i=0,j=0;
         int x[] = new int[1000];
         int y[] = new int[1000];
         Drawer canvas;
         boolean connected=false;
         String title,user="";
         // Class Members //
         public ChatClient()
         public ChatClient(String str)
              super(str);
              setBounds(50,20,600,450);
              setLayout(new FlowLayout(FlowLayout.CENTER,45,10));
              title=str;
              setStatus();
              // Create controls //
              add(new Label("Chat Server Name : "));
              servername=new TextField(20);
              add(servername);
              servername.setText("localhost");
              add(new Label("Chat Server Port : "));
              serverport=new TextField(20);
              add(serverport);
              serverport.setText("900");
              add(new Label("Your User Name : "));
              username=new TextField(20);
              add(username);
              username.setText("Umesh");
              connect=new Button("Connect");
              connect.addActionListener(this);
              add(connect);
              disconnect=new Button("Disconnect");
              disconnect.addActionListener(this);
              add(disconnect);
              message=new TextField(30);
              add(message);
              sendText=new Button("Send Text");
              sendText.addActionListener(this);
              add(sendText);
              fromserver=new TextArea(10,50);
              add(fromserver);
              fromserver.setEditable(false);
    canvas = new Drawer();
              canvas.setSize(250,250);
              canvas.setBackground(Color.cyan);
              add(canvas);
              canvas.addMouseListener(this);
              canvas.addMouseMotionListener(this);
              send=new Button("Send");
              send.addActionListener(this);
              add(send);
              try
                   UnicastRemoteObject.exportObject(this);
              catch(Exception e)
              setVisible(true);
              for(j=0;j<1000;j++)
                   x[j]=0;
                   y[j]=0;
              Coord = new String();
              Coord = "";
    //          fa=new FrameApplet();
         public void mousePressed(MouseEvent me){}
         public void mouseReleased(MouseEvent me)
              Coord = Coord + "r";
         public void mouseClicked(MouseEvent me){}
         public void mouseEntered(MouseEvent me){}
         public void mouseExited(MouseEvent me){}
         public void mouseDragged(MouseEvent me)
              if (Coord == "")
                   Coord = me.getX() + "," + me.getY();
              else
                   Coord = Coord + " " + me.getX() + "," + me.getY();
         public void mouseMoved(MouseEvent me){}
         // RMI connection //
         private void connect()
              try
                   service = (IChatService)Naming.lookup("rmi://pcname/ChatService");
                   service.addClient(this);
                   connected=true;
                   setStatus();
                   user=username.getText();
                   Coord = "";
              catch(Exception e)
                   fromserver.append("Error Connecting ...\n" + e);
                   System.out.println(e);
                   connected=false;
                   setStatus();
                   service=null;
         private void disconnect()
              try
                   if(service==null)
                        return;
                   service.removeClient(this);
                   service=null;
              catch(Exception e)
                   fromserver.append("Error Connecting ...\n");
              finally
                   connected=false;
                   setStatus();
         private void setStatus()
              if(connected)
                   setTitle(title+" : Connected");
              else
                   setTitle(title+" : Not Connected");
         // IChatClient methods //
         public String getName()
              return user;
         public void sendMessage(String msg)
              fromserver.append(msg+"\n");
         public void SendCanvasObject(String str)
              this.str = str;
              fromserver.append(str + "\n");
              Graphics g = canvas.getGraphics();
              paint(g);
         // Actionlistener //
         public void actionPerformed(ActionEvent e)
              if(e.getSource()==connect)
                   connect();
                   if(connected)
                        servername.setEnabled(false);
                        serverport.setEnabled(false);
                        username.setEnabled(false);
                        connect.setEnabled(false);
                        Coord = "";
              else
              if(e.getSource()==disconnect)
                   disconnect();
                   servername.setEnabled(true);
                   serverport.setEnabled(true);
                   username.setEnabled(true);
                   connect.setEnabled(true);
              else
              if(e.getSource()==send)
                   flag = true;
                   if(service==null)
                        return;
                   try
                        fromserver.append("Sending an image...\n");
                        service.SendCanvasObject(this,Coord);
                        i=0;
                        for(j=0;j<1000;j++)
                             x[j]=0;
                             y[j]=0;
                        Coord = "";
                        fromserver.append("\n" + "Image Sent...");
                   catch(RemoteException re)
                        fromserver.append("Error Sending Message ...\n" + re);
                   catch(Exception ee)
                        fromserver.append("Error Sending Message ...\n" + ee);
              else
              if(e.getSource()==sendText)
                   if(service==null)
                        return;
                   try
                        service.sendMessage(this,message.getText());
                        message.setText("");
                   catch(RemoteException exp)
                        fromserver.append("Remote Error Sending Message ...\n" + exp);
                   catch(Exception ee)
                        fromserver.append("Error Sending Message ...\n" + ee);
         public void paint(Graphics g)
              if(flag==true)
                   i=0;
                   StringTokenizer stoken = new StringTokenizer(str,"r");
                   String strin = "";
                   while(stoken.hasMoreTokens())
                        strin = stoken.nextToken();
                        fromserver.append("\n" + strin + "\n");
                        StringTokenizer stoken1 = new StringTokenizer(strin," ");
                        String strin1 = "";
                        j=0;
                        while(stoken1.hasMoreTokens())
                             strin1 = stoken1.nextToken();
                             fromserver.append("\n" + strin1 + "\n");
                             x[j]=Integer.parseInt(strin1.substring(0,strin1.indexOf(",")));
                             y[j]=Integer.parseInt(strin1.substring(strin1.indexOf(",")+1,strin1.length()));
                             j++;
                        for(int k=0;k<j-1;k++)
                             g.drawLine(x[k],y[k],x[k+1],y[k+1]);     
                   i++;
    import java.rmi.*;
    import java.rmi.server.*;
    import canvas.Drawer;
    import java.util.*;
    import ru.zhuk.graphics.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
    public class FrameApplet extends Applet implements ActionListener
         ChatClient f;
         public void init()
              Button b = new Button("Start Chat");
              b.addActionListener(this);
              add(b);
         public void actionPerformed(ActionEvent ae)
              f=new ChatClient("Chat");
              f.show();
              f.setSize(400,400);
    here is html file which i calls from IE
    <html>
    <title>Micky Chat</title>
    <body>
    <br>
    <br>
    <center>
    <applet code="FrameApplet.class" width=200 height=200>
    </applet>
    </center>
    </body>
    </html>
    and at last a shocking thing is it is runs in Netscape displaying frames but not calling paint method.
    pls. help me
    thanks a lot
    umesh

    Hi Umesh!
    Sorry that I cannot be too concrete about that since it has to be centuries ago when I fell over this problem.
    As far as I can remember, the JDK provided by MS has no RMI built-in. These was probably one of the main reasons why Sun sued Microsoft concering its handling of Java.
    Afterwards MS released a path for its Java Runtime that included RMI support, but AFAIK they never included it in the standard package. So much luck when searching for the ZIP! (-;
    A little bit of googling might help, e.g.:
    http://groups.google.com/groups?hl=de&lr=&ie=UTF-8&oe=UTF-8&threadm=37f8ddf6.4532124%40news.online.no&rnum=17&prev=/groups%3Fq%3Dmicrosoft%2Bjvm%2Brmi%2Bsupport%26start%3D10%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26selm%3D37f8ddf6.4532124%2540news.online.no%26rnum%3D17
    cheers,
    kdi

  • If I use the same iCloud account for my ipad and iPhone, will changes I make on one change on the other as well?  I'm not sure of the advantage of using teh same iCloud for both devices.

    If I use the same iCloud account for my ipad and iPhone, will changes I make on one change on the other as well?  I'm not sure of the advantage of using teh same iCloud for both devices.

    No, it only mirrors changes to synced data.  This includes mail, contacts, calendars, reminders, safari bookmarks, notes, iWork documents and data, and photo stream photos (assuming you choose to sync all this data).  Changes to iTunes data such as music, apps, podcasts, etc., are not synced using iCloud.  In your example, if you delete an app from one device it will remain on the other until deleted there too.

  • What are the limitations of using RMI over http with EJB?

    We have a requirement for an intranet application where the majority of the clients
    (Swing clients) will be able to connect directly using either T3 or IIOP. However,
    there are a number of clients that will need to traverse a firewall.
    We could use SOAP, but I dont want to lose the value that RMI gives us (clustering,
    security, statefullness support etc). I am thinking of using RMI over http - which
    Weblogic supports.
    I have been trying to find some documentation on the topic - but havent succeded
    so far. What I would like to understand is: What limitations I would have using
    RMI over http. Do I lose anything (apart from performance) using http?
    Regards,
    Nick

    You will have to enable tunneling on the server side and I have not heard of any
    complaints of using it.
    Shiva.
    Nick Minutello wrote:
    In fact, we are not using applets - and its not an internet application. We are
    using Java Webstart and Swing on our intranet (the problem of the size of the
    weblogic.jar is a pain - but well known)
    The question for me is; Apart from performance, are there any limitations to using
    RMI over http?
    Can we also use JMS over http?
    -Nick
    Shiva Paranandi <[email protected]> wrote:
    "Old wine new bottle".
    The biggest problem with the approach of Applets like
    stuff connecting to weblogic is the size of the classes that need to
    be supplied to the
    users. The applets/swing would need a lot of weblogic classes which you
    need to
    supply as jar file. This file can be in the order of MBs depending on
    the
    weblogic version. we had a similar kind of problem and migrated the applets
    to use
    servlets instead of directly invoking ejbs or jms topics etc. Having
    the applets
    connect
    to servlets you would still benefit from the features of clustering etc.
    and added to
    that
    you would reduce the number of remote calls.
    Shiva.
    Nick Minutello wrote:
    We have a requirement for an intranet application where the majorityof the clients
    (Swing clients) will be able to connect directly using either T3 orIIOP. However,
    there are a number of clients that will need to traverse a firewall.
    We could use SOAP, but I dont want to lose the value that RMI givesus (clustering,
    security, statefullness support etc). I am thinking of using RMI overhttp - which
    Weblogic supports.
    I have been trying to find some documentation on the topic - but haventsucceded
    so far. What I would like to understand is: What limitations I wouldhave using
    RMI over http. Do I lose anything (apart from performance) using http?
    Regards,
    Nick

  • What are the advantage of using a passive monitoring technique ?

    What are the advantage of using a passive monitoring technique

    Hi Plawansai,
    I saw your question that is still unanswered.
    I believe an advantage of using a passive monitoring technique is that it won't interfer with live traffic, as it does not inject traffic into the network or modify the traffic that is already on the network.
    One drawback anyway, is that post-processing time can take a large amount of time with passive monitoring!
    A combination of the two monitoring methods seems to be the route to go.
    V.

  • What are the advantages of using Map IDs?

    Hi:
    I am trying to find out the advantages for using map ids as
    opposed to just using the file names for the topics, but I couldn't
    find this information in the RH7 Help or the forums. Can you please
    list the advantages and disadvantages.
    Also, I am describing how I wish to implement the context
    sensitive help feature for my application and you can tell me which
    approach is better. We make an application that is packaged within
    a Java IDE. We want to launch context sensitive help topics from
    the wizards and cheat sheets. Now, this context sensitive help can
    be either be installed on the local machine or network (file://
    protocol) or available on our portal (https:// protocol). We do
    have the infrastructure in place to let the user decide whether
    he/she wants to access the local help topic or the one over the
    internet. Will map ids work for both the scenarios?
    Thanks,
    K

    It sounds like your application call needs to call an online
    version of the help first and if this is not available to point to
    a local copy. Is that right? If so, how this happens is entirely in
    the hands of your developers. I know it can be done, just sketchy
    on the actual procedure.
    As far as the CSH in the help is concerned, you can use
    mapids for both versions of the help if you want. If using webhelp
    you'd do well to check out
    this
    link on Peter Grainge's site.

  • What is the advantages of using Flexconnect groups

    what is the advantages of using Flexconnect groups in WLC?
    Reg,
    Ezra.

    Pls refer this document for more detail about these features
    http://www.cisco.com/c/en/us/td/docs/solutions/Enterprise/Mobility/emob73dg/emob73/ch7_HREA.html#wp1091114
    FlexConnect is one mode an AP can operate, typically deployed in Branch setup where you do not have a controller at branch site. Those AP can register to a controller at your HQ or main site. So traffic will terminate at your branch switch instead of tunnel back to HQ-WLC.
    If you want roaming within your branch FlexConnect AP then you have to put those AP into a FlexConnect Group. Then only key information shared among those AP to facilitate fast roaming.
    Pls do not forget to rate our responses if you find them useful.
    HTH
    Rasika

  • What are Parameters? How are they differenet from Variables? Why can't we use variables for passing data from one sequnece to another? What is the advantage of using Parameters instead of Variables?

    Hi All,
    I am new to TestStand. Still in the process of learning it.
    What are Parameters? How are they differenet from Variables? Why can't we use variables for passing data from one sequnece to another? What is the advantage of using Parameters instead of Variables?
    Thanks in advance,
    LaVIEWan
    Solved!
    Go to Solution.

    Hi,
    Using the Parameters is the correct method to pass data into and out of a sub sequence. You assign your data to be passed into or out of a Sequence when you are in the Edit Sequence Call dialog and in the Sequence Parameter list.
    Regards
    Ray Farmer

  • Advantages of using XSLT mapping

    Can any one explain me the advantages of using XSLT mapping compare to graphical.java and abap mappings

    Hi
    Please go through the below links for details on XSLT Mappings..
    XSLT Mapping
    /people/udo.martens/blog/2006/04/26/xslt-recursive-templates
    Thread:
    Sample XSLT mapping required
    XSLT Mapping Links::->
    /people/prasadbabu.nemalikanti3/blog/2006/03/30/xpath-functions-in-xslt-mapping
    /people/sreekanth.babu2/blog/2005/01/05/design-time-value-mappings-in-xslt
    /people/anish.abraham2/blog/2005/12/22/file-to-multiple-idocs-xslt-mapping
    XSLT Mapping with java enhancement
    /people/pooja.pandey/blog/2005/06/27/xslt-mapping-with-java-enhancement-for-beginners
    XSLT - ABAP.
    /people/r.eijpe/blog/2005/11/04/using-abap-xslt-extensions-for-xi-mapping
    exception handling errors in respect with XSLT mapping
    http://help.sap.com/saphelp_nw2004s/helpdata/en/8a/7672f7d7e444439fd7024f806221a4/content.htm
    Hope this will help
    Regards
    Piyush
    **reward points if found useful.

  • Advantages to using iMessage?

    Hi, are there any advantages to using iMessage if you're on a plan with unlimited taik and text? iMessage uses data on the 4GLTE network if one is not on a Wi-Fi connection, so why use iMessage when you have unlimited text messages? I'm curious; I like iMessages, but why use data if you're on a tiered plan if you don't have to?

        MaceWindu57, we want you to take advantage of every benefit available on our wireless network. The iMessaging feature works great for group text conversations and sending/recieving messages to iPads or iPods. Additionally, this option is also awesome when you're in a location that has no wireless reception as you can send iMessages over Wi-Fi instead. Lastly, iMessaging is a free way to send/recieve text messages for those that don't subscribe to a Messaging Plan.
    LasinaH_VZW
    Follow us on Twitter @VZWSupport

  • What are the advantages of using ENC for a datasource

    Other than eliminating a tight binding between a EJB and a datasource , what are
    the other considerations and/or advantages of using JNDI ENC to define a datasource
    reference vs a direct lookup of a Datasource in the EJB implmentation?
    For example, are their performance advantages by the datasource being cached in
    JNDI ENC?

    Hello Bryan,
    Basically the main advantage is to not have the tight coupling between the EJB
    and the particular JNDI name that it's bounded to. Please refer to a previous
    post where I addressed this issue (perhaps a few days ago on this newsgroup).
    In addition, you will always gain performance improvements by caching the remote/local
    home objects for your EJBs.
    Best regards,
    Ryan LeCompte
    [email protected]
    http://www.louisiana.edu/~rml7669
    "Bryan Boyer" <[email protected]> wrote:
    >
    Other than eliminating a tight binding between a EJB and a datasource
    , what are
    the other considerations and/or advantages of using JNDI ENC to define
    a datasource
    reference vs a direct lookup of a Datasource in the EJB implmentation?
    For example, are their performance advantages by the datasource being
    cached in
    JNDI ENC?

  • Advantages of using partitions for tasks

    I like my setup on one partition.  But I'm wondering, are there advantages to using separate partitions for /, /home, /boot, and swap?
    Simple question, but I'd like to know the answer from many sources, cause it seems like the type of question that has multiple answers.

    My laptop and a little server in the home which I'll set up to the face the internet at some point so I can get to files/music etc have split partitioning: / /usr /var /home /tmp (via tmpfs) and separate /boot (needed for lvm/encryption/funny filesystems). I set up the partitions on advice of some of the hardening guides (see wiki). As well as allowing for problems with huge log files crashing the system as mentioned above, the idea is to have separate partitions to restrict what can be done in each area of the file system via mounting options in fstab. Eg, one of the options you could give to /var and/or /home would be noexec, so no exectuables/scripts could be run. If someone breaks in, it should make it harder to gain complete control.
    It's prob overkill, but I am a big fan of peace of mind It doesn't take much longer to set up (make it lvm so you don't have to worry about getting the partition sizes wrong) and it doesn't hinder how my system runs in any way.

  • Advantages of using OPPQ tcode

    Hi ,
    We use OPPQ tcode to maintain MRP parametes with respect to a specific plant and we also have individual tcodes to maintain MRP paramters - like "MRP Controllers, Planning Horizon,Floats,Rescheduling etc". Is there any specific reason/advantages to use OPPQ tcode to maintain MRP parameters instead of using individual tcodes to maintain MRP parameters?. Thanks in advance.

    Using OPPQ we can copy the MRP parameters of an existing plant to a newly created plant in one-go.
    If we know the parameters of an existing plant it makes sense to copy it directly through this txn instead of individual maintenance.Also any 'particular' data can be changed as per your requirement in the new plant easily.
    Apart from the above advantage the 'reference plant' option in OPPQ helps us in reduced data maintenance w.r.to 4 parameters namely Plg cycle/Plg calendar/ROC profile/Rounding profile.
    All we need is to create the data in reference plant which is then made available for the planning/new plant automatically.

Maybe you are looking for

  • Exit for role determination via exit for scheduling agreement and contract?

    Hi.. I have a requirement to fetch the agents in run-time for PO,PR,SCHEDULE AGREEMENT, CONTRACT.. For PO i am using EXIT : - M06E0005 For PR release i am using EXIT :- M06B0001 By using above 2 exits i am getting the agents at run-time... Same way i

  • Ipod touch 4th gen with iOS 5 capacity bar says other section is taking up 1.53 GB?

    When I sync my ipod touch 4th gen with iOS 5 i have 2.8 GB of music and 1.27 GB of apps and i have a 8 GB ipod but the "other" section is taking up 1.53 GB?? i know thats not normal so how do i fix that?

  • Looking for a good database program

    I have used Filemaker Pro in the past and have really liked using that program.  Is there something out there but maybe a bit less pricey?

  • Photoshop cc crash after initialising screen

    Photoshop CC can´t be started on Windows 7 Ultimate. The program is working quite Ok since i bought it but today it doesn´t start anymore. It crashes after the first popup screen with the message" "Photoshop coulnd´t be initialised due to a program e

  • Answers Set operations

    Hello All, In Answers i have used the set operations functionality to union two columns and saved this as a report. Is there anyway to create a dashboard propmt on this report (basically its a single column contain the results of 2 columns) Please su