Clustering with RMI classes

 

Prasad:
          I'm talking about a UserCache. It is not that much information, but it contains info
          from a lot of different tables. So if you came to our site and had a session then went
          away. Your session will expire at some point. Then when you come back, if we have a
          UserCache on the machine you were on, you are probably in there, but if you end up on
          another machine then we have to reload from the database. So what I'm thinking about is
          a static UserCache that resides on a machine that all the machines in the cluster could
          use.
          Thanks,
          Rob
          Prasad Peddada wrote:
          > Rob Williams wrote:
          >
          > > Jon:
          > >
          > > I was going to post a message about almost exactly the same thing. My thing is
          > > that I have a UserCache right now so that if someone comes back to the site we
          > > load their information up instantly. Obviously, if you come back to the site and
          > > get put on a different machine, we get your stuff from disk.
          >
          > Rob,
          > May I ask you what kind of information you want to load and how big is the
          > data?
          >
          > > We had a consultant come out who was sent by BEA to help us implement clustering
          > > and he recommended that we do in memory clustering by having a machine out front
          > > to 'proxy' and then a cluster. I asked a question on here and the BEA guy
          > > (Michael) seemed to think that that was not a good idea. Had it been a good
          > > idea, I was thinking the proxy machine (which I would have doubled w/another to
          > > avoid a single point of failure) would have been a good place to put the
          > > UserCache and then the machines in the cluster could just get the user info
          > > using RMI.
          >
          > I am trying to understand why you need RMI. When you use session replication
          > mechanism basically you have failover mechanism. If one server goes does the other
          > one still has all the information you need. Its too expensive at this point to
          > replicate the state information across all the servers in the cluster whether it is
          > RMI or EJB. Based on number of servers you have in the cluster, the session
          > replication failover mechanism might very well serve your needs.
          >
          > Prasad
          >
          > > Thoughts?,
          > >
          > > Rob
          > >
          > > Jon Eagles wrote:
          > >
          > > > All,
          > > >
          > > > I am in a situation where I want to create an RMI object which represents a
          > > > cache. For simplicity, let's say that the cache is called IntegerCache and
          > > > it holds a hastable of Integer objects as a private class variable. When my
          > > > Weblogic servers start up, I want to make use of the startup class
          > > > functionality to create an instance of the IntegerCache and populate it with
          > > > the Integer objects representing the numbers 1, 2 and 3. I then want to put
          > > > the IntegerCache object into the cluster-wide JNDI tree at the name
          > > > "cache.IntegerCache". It is my understanding that each server in the
          > > > cluster will create its own IntegerCache and add a stub to the service pool
          > > > stored at the node "cache.IntegerCache". Assuming that I have three servers
          > > > in my cluster, at this point, I have three IntegerCache stubs in the service
          > > > pool.
          > > >
          > > > Now, suppose a client wishes to get a reference to an IntegerCache out of
          > > > the tree and let's further assume that it gets the stub from server 1.
          > > > Since we are using RMI and the object does have state (the hashtable of
          > > > Integer objects), we must use the targeted model to retrieve a pinned
          > > > reference.
          > > >
          > > > Given the above scenario, can anyone tell me whether the following is
          > > > accurate:
          > > >
          > > > 1. If the client then adds Integer 4 to its IntegerCache stub, that Integer
          > > > will ONLY be added to the hashtable for the IntegerCache object that resides
          > > > in server 1. This addition will NOT be replicated to the other servers.
          > > >
          > > > 2. If statement1 above is correct, how can I achieve a solution where I
          > > > have a shared cluster-wide cache object. I don't want to have to implement
          > > > the individual cached objects (in this case Integers) as entity beans and
          > > > have the container constantly load and passivate them. The reason for this
          > > > is due to the fact that there is significant overhead involved in creating
          > > > my "Integer" objects and I would like to minimize the number of times I have
          > > > to do this.
          > > >
          > > > Any help would be appreciated.
          > > >
          > > > Thanks,
          > > >
          > > > -Jon
          

Similar Messages

  • Anyone have some real-world experience with clustering and RMI?

    We are getting ready to do some stress testing on a clustered WLS RMI
              environment. Does anyone have any real world experience with this type
              of environment. I'm looking for information related to performance
              (transactions per second), how does it scale as you add new instances
              (does it get to a point where another instance actually degrades
              performance), how easy is it to administer the cluster?
              Any input would be greatly appreciated,
              thanks,
              Edwin
              

    Edwin:
              You might also want to refer to my earlier posting in this newsgroup re:
              setting an optimal value for executeThreadCount and percentSocketReaders
              on the client side in a cluster setup. Look for the subject "variable
              performance in a cluster".
              Srikant.
              Edwin Marcial wrote:
              > We are getting ready to do some stress testing on a clustered WLS RMI
              > environment. Does anyone have any real world experience with this type
              > of environment. I'm looking for information related to performance
              > (transactions per second), how does it scale as you add new instances
              > (does it get to a point where another instance actually degrades
              > performance), how easy is it to administer the cluster?
              >
              > Any input would be greatly appreciated,
              >
              > thanks,
              >
              > Edwin
              

  • Trouble with RMI codebase

    Hi, i've created a file transfer application via RMI, it work very well, i can transfer file longer than 1 GB without any problem.
    But when i copy my project with all classes to another directory, it doesn't work. I'm sure that the trouble is in the VM options :
    "-Djava.rmi.server.codebase=file:E:\RMIFileTransfer\classes\ -Djava.security.policy=file:E:\RMIFileTransfer\policy\RMI.policy ", that points to the old directory. I don't want to change "E:\RMIFileTransfer\" in the VM options each time i move my project!!!
    How can be java.rmi.server.codebase and java.security.policy properties setted by an user input, or in the main( String args[] ) method? (sorry for my bad english...)

    (a) use a JAR file, not a directory system
    (b) the codebase setting has to have the same meaning throughout the system, i.e. to the server, the registry, and the client. Obviously a file: URL is not likely to comply, because every host has its own file system. Have a look into providing the JAR file via an HTTP service and using an http: URL.

  • Exporting data clusters with type version

    Hi all,
    let's assume we are saving some ABAP data as a cluster to database using the IMPORT TO ... functionality, e.g.
    EXPORT VBAK FROM LS_VBAK VBAP FROM LT_VBAP  TO DATABASE INDX(QT) ID 'TEST'
    Some days later, the data can be imported
    IMPORT VBAK TO LS_VBAK VBAP TO LT_VBAP FROM DATABASE INDX(QT) ID 'TEST'.
    Some months or years later, however, the IMPORT may crash: Since it is the most normal thing in the world that ABAP types are extended, some new fields may have been added to the structures VBAP or VBAK in the meantime.
    The data are not lost, however: Using method CL_ABAP_EXPIMP_UTILITIES=>DBUF_IMPORT_CREATE_DATA, they can be recovered from an XSTRING. This will create data objects apt to the content of the buffer. But the component names are lost - they get auto-generated names like COMP00001, COMP00002 etc., replacing the original names MANDT, VBELN, etc.
    So a natural question is how to save the type info ( = metadata) for the extracted data together with the data themselves:
    EXPORT TYPES FROM LT_TYPES VBAK FROM LS_VBAK VBAP FROM LT_VBAP TO DATABASE INDX(QT) ID 'TEST'.
    The table LT_TYPES should contain the meta type info for all exported data. For structures, this could be a DDFIELDS-like table containing the component information. For tables, additionally the table kind, key uniqueness and key components should be saved.
    Actually, LT_TYPES should contain persistent versions of CL_ABAP_STRUCTDESCR, CL_ABAP_TABLEDESCR, etc. But it seems there is no serialization provided for the RTTI type info classes.
    (In an optimized version, the type info could be stored in a separate cluster, and being referenced by a version number only in the data cluster, for efficiency).
    In the import step, the LT_TYPES could be imported first, and then instances for these historical data types could be created as containers for the real data import (here, I am inventing a class zcl_abap_expimp_utilities):
    IMPORT TYPES TO LT_TYPES FROM DATABASE INDX(QT) ID 'TEST'.
    DATA(LO_TYPES) = ZCL_ABAP_EXPIMP_UITLITIES=>CREATE_TYPE_INFOS ( LT_TYPES ).
    assign lo_types->data_object('VBAK')->* to <LS_VBAK>.
    assign lo_types->data_object('VBAP')->* to <LT_VBAP>.
    IMPORT VBAK TO <LS_VBAK> VBAP TO <LT_VBAP> FROM DATABASE INDX(QT) ID 'TEST'.
    Now the data can be recovered with their historical types (i.e. the types they had when the export statement was performed) and processed further.
    For example, structures and table-lines could be mixed into the current versions using MOVE-CORRESPONDING, and so on.
    My question: Is there any support from the standard for this functionality: Exporting data clusters with type version?
    Regards,
    Rüdiger

    The IMPORT statement works fine if target internal table has all fields of source internal table, plus some additional fields at the end, something like append structure of vbak.
    Here is the snippet used.
    TYPES:
    BEGIN OF ty,
      a TYPE i,
    END OF ty,
    BEGIN OF ty2.
            INCLUDE TYPE ty.
    TYPES:
      b TYPE i,
    END OF ty2.
    DATA: lt1 TYPE TABLE OF ty,
          ls TYPE ty,
          lt2 TYPE TABLE OF ty2.
    ls-a = 2. APPEND ls TO lt1.
    ls-a = 4. APPEND ls TO lt1.
    EXPORT table = lt1 TO MEMORY ID 'ZTEST'.
    IMPORT table = lt2 FROM MEMORY ID 'ZTEST'.
    I guess IMPORT statement would behave fine if current VBAK has more fields than older VBAK.

  • VersioningError when Using JDBC driver for SQL Server with RMI

    Hi,
    I wrote a simple class for inserting rows into a database. The database is SQL Server 2000, and I am using weblogic's mssqlserver4 driver. The class works fine, but when I try to export the class as a remote object (using Sun's RMI implementation, not Weblogic RMI), I get the following error:
    Exception in thread "main" weblogic.common.internal.VersioningError: No WebLogic packages defined in CLASSPATH at weblogic.common.internal.VersionInfo.<init>(VersionInfo.java:35) at weblogic.version.<clinit>(version.java:18)
    at weblogic.jdbc.common.internal.FileProxy.initFileHandles(FileProxy.java:30) at weblogic.jdbc.mssqlserver4.BaseConnection.prepareConnection(BaseConnection.java:215)
    at weblogic.jdbc.mssqlserver4.Driver.newConnection(Driver.java:34) at weblogic.jdbc.mssqlserver4.ConnectDriver.connect(ConnectDriver.java:151) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171)
    Can anyone tell me why this happens? What is difference between using the driver standalone and using it with RMI? Does it have anything to do with the fact that I'm using Javasoft RMI and not Weblogic RMI? I'm pretty sure I have the classpaths set up correctly.
    Thanks,
    Bo

    Bo Min Jiang wrote:
    Hi,
    I wrote a simple class for inserting rows into a database. The database is SQL Server 2000, and I am using weblogic's mssqlserver4 driver. The class works fine, but when I try to export the class as a remote object (using Sun's RMI implementation, not Weblogic RMI), I get the following error:
    Exception in thread "main" weblogic.common.internal.VersioningError: No WebLogic packages defined in CLASSPATH at weblogic.common.internal.VersionInfo.<init>(VersionInfo.java:35) at weblogic.version.<clinit>(version.java:18)
    at weblogic.jdbc.common.internal.FileProxy.initFileHandles(FileProxy.java:30) at weblogic.jdbc.mssqlserver4.BaseConnection.prepareConnection(BaseConnection.java:215)
    at weblogic.jdbc.mssqlserver4.Driver.newConnection(Driver.java:34) at weblogic.jdbc.mssqlserver4.ConnectDriver.connect(ConnectDriver.java:151) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171)
    Can anyone tell me why this happens? What is difference between using the driver standalone and using it with RMI? Does it have anything to do with the fact that I'm using Javasoft RMI and not Weblogic RMI? I'm pretty sure I have the classpaths set up correctly.
    Thanks,
    BoHi. Show me the whole stacktrace of the exception. The issue seems to be the driver licensing
    code, which is looking for the bea.license file, and not finding it. Have your code run a System command
    to find and print out the classpath it thinks is in effect. You will then see if the license file is there.
    Joe

  • Problem using CORBA clients with RMI/EJB servers..!!!???

    Hi,
    I have a question on using EJB / or RMI servers with CORBA clients using
    RMI-IIOP transport, which in theory should work, but in practice has few
    glitches.
    Basically, I have implemented a very simple server, StockTreader, which
    looks up for a symbol and returns a 'Stock' object. In the first example, I
    simplified the 'Stock' object to be a mere java.lang.String, so that lookup
    would simply return the 'synbol'.
    Then I have implemented the above, as an RMI-IIOP server (case 1) and a
    CORBA server (case 2) with respective clients, and the pair of
    client-servers work fine as long as they are CORBA-to-CORBA and RMI-to-RMI.
    But the problem arises when I tried using the RMI server (via IIOP) with the
    CORBA client, when the client tries to narrow the object ref obtained from
    the naming service into the CORBA idl defined type (StockTrader) it ends up
    with a class cast exception.
    This is what I did to achieve the above results:
    [1] Define an RMI interface StockTrader.java (extending java.rmi.Remote)
    with the method,
    public String lookup( String symbol) throws RMIException;
    [2] Implement the StorckTrader interface (on a PortableRemoteObject derived
    class, to make it IIOP compliant), and then the server to register the stock
    trader with COS Naming service as follows:
    String homeName =....
    StockTraderImpl trader =new StockTraderImpl();
    System.out.println("binding obj <" homeName ">...");
    java.util.Hashtable ht =new java.util.Hashtable();
    ht.put("java.naming.factory.initial", args[2]);
    ht.put("java.naming.provider.url", args[3]);
    Context ctx =new InitialContext(ht);
    ctx.rebind(homeName, trader);
    [3] Generate the RMI-IIOP skeletons for the Implementation class,
    rmic -iiop stock.StockTraderImpl
    [4] generate the IDL for the RMI interface,
    rmic -idl stock.StockTraderImpl
    [5] Generate IDL stubs for the CORBA client,
    idlj -v -fclient -emitAll StockTraderImpl.idl
    [6] Write the client to use the IDL-defined stock trader,
    String serverName =args[0];
    String symList =args[1];
    StockClient client =new StockClient();
    System.out.println("init orb...");
    ORB orb =ORB.init(args, null);
    System.out.println("resolve init name service...");
    org.omg.CORBA.Object objRef
    =orb.resolve_initial_references("NameService");
    NamingContext naming =NamingContextHelper.narrow(objRef);
    ... define a naming component etc...
    org.omg.CORBA.Object obj =naming.resolve(...);
    System.out.println("narrow objRef: " obj.getClass() ": " +obj);
    StockTrader trader =StockTraderHelper.narrow(obj);
    [7] Compile all the classes using Java 1.2.2
    [8] start tnameserv (naming service), then the server to register the RMI
    server obj
    [9] Run the CORBA client, passing it the COSNaming service ref name (with
    which the server obj is registered)
    The CORBA client successfully finds the server obj ref in the naming
    service, the operation StockTraderHelper.narrow() fails in the segment
    below, with a class cast exception:
    org.omg.CORBA.Object obj =naming.resolve(...);
    StockTrader trader =StockTraderHelper.narrow(obj);
    The <obj> returned by naming service turns out to be of the type;
    class com.sun.rmi.iiop.CDRInputStream$1
    This is of the same type when stock trader object is registered in a CORBA
    server (as opposed to an RMI server), but works correctly with no casting
    excpetions..
    Any ideas / hints very welcome.
    thanks in advance,
    -hari

    On the contrary... all that is being said is that we needed to provide clearer examples/documentation in the 5.1.0 release. There will be no difference between the product as found in the service pack and the product found in the 5.1.1. That is, the only substantive will be that 5.1.1 will also
    include the examples.
    "<=one way=>" wrote:
    With reference to your and other messages, it appears that one should not
    expect that WLS RMI-IIOP will work in a complex real-life system, at least
    not now. In other words, support for real-life CORBA clients is not an
    option in the current release of WLS.
    TIA
    "Eduardo Ceballos" <[email protected]> wrote in message
    news:[email protected]...
    We currently publish an IDL example, even though the IDL programmingmodel in Java is completely non-functional, in anticipation of the support
    needs for uses who need to use IDL to talk to the Weblogic server,
    generically. This example illustrates the simplest connectivity; it does not
    address how
    to integrate CORBA and EJB, a broad topic, fraught with peril, imo. I'llnote in passing that, to my knowledge, none of the other vendors attempt
    this topic either, a point which is telling if all the less happy to hear.
    For the record then, what is missing from our distribution wrt RMI-IIOPare a RMI-IIOP example, an EJB-IIOP example, an EJB-C++. In this you are
    correct; better examples are forth coming.
    Still, I would not call our RMI-IIOP implementation fragile. I would saythat customers have an understandably hard time accepting that the IDL
    programming model is busted; busted in the sense that there are no C++
    libraries to support the EJB model, and busted in the sense that there is
    simply no
    support in Java for an IDL interface to an EJB. Weblogic has nothing to doit being busted, although we are trying to help our customers deal with it
    in productive ways.
    For the moment, what there is is a RMI (over IIOP) programming model, aninherently Java to Java programming model, and true to that, we accept and
    dispatch IIOP request into RMI server objects. The way I look at it is this:
    it's just a protocol, like HTTP, or JRMP; it's not IDL and it has
    practically nothing to do with CORBA.
    ST wrote:
    Eduardo,
    Can you give us more details about the comment below:
    I fear that as soon as the call to narrow succeeds, the remainingapplication will fail to work correctly because it is too difficult ot
    use an idl client in java to work.It seems to me that Weblogic's RMI-IIOP is a very fragile
    implementation. We
    don't need a "HelloWorld" example, we need a concrete serious example(fully
    tested and seriously documented) that works so that we can get a betteridea
    on how to integrate CORBA and EJB.
    Thanks,
    Said
    "Eduardo Ceballos" <[email protected]> wrote in message
    news:[email protected]...
    Please post request to the news group...
    As I said, you must separate the idl related classes (class files and
    java
    files) from the rmi classes... in the rmic step, you must set a newtarget
    (as you did), emit the java files into that directory (it's not clearyou
    did this), then remove all the rmi class files from the class path... ifyou
    need to compile more classes at that point, copy the java files to theidl
    directly is you must, but you can not share the types in any way.
    I fear that as soon as the call to narrow succeeds, the remainingapplication will fail to work correctly because it is too difficult otuse
    an idl client in java to work.
    Harindra Rajapakshe wrote:
    Hi Eduardo,
    Thanks for the help. That is the way I compiled my CORBA client, by
    separating the IDL-generated stubs from the RMI ones, but still I
    get a
    CORBA.BAD_PARAM upon narrowing the client proxy to the interfacetype.
    Here's what I did;
    + Define the RMI interfaces, in this case a StockTrader interface.
    + Implement RMI interface by extendingjavax.rmi.PortableRemoteObject
    making
    it IIOP compliant
    + Implemnnt an RMI server, and compile using JDK1.2.2
    + use the RMI implementation to generate CORBA idl, using RMI-IIOPplugin
    utility rmic;
    rmic -idl -noValueMethods -always -d idl stock.StockTraderImpl
    + generate Java mappings to the IDL generated above, using RMI-IIOPplugin
    util,
    idlj -v -fclient -emitAll -tf src stocks\StockTrader.idl
    This creates source for the package stock and also
    org.omg.CORBA.*
    package, presumably IIOP type marshalling
    + compile all classes generated above using JDK1.2.2
    + Implement client (CORBA) using the classes generated above, NOTthe
    RMI
    proxies.
    + start RMI server, with stockTrader server obj
    + start tnameserv
    + start CORBA client
    Then the client errors when trying to narrow the obj ref from the
    naming
    service, into the CORBA IDL defined interface using,
    org.omg.CORBA.Object obj =naming.resolve(nn);
    StockTrader trader =StockTraderHelper.narrow(obj); // THIS
    ERRORS..!!!
    throwing a CORBA.BAD_PARAM exception.
    any ideas..?
    Thanks in advance,
    -hari
    ----- Original Message -----
    From: Eduardo Ceballos <[email protected]>
    Newsgroups: weblogic.developer.interest.rmi-iiop
    To: Hari Rajapakshe <[email protected]>
    Sent: Wednesday, July 26, 2000 4:38 AM
    Subject: Re: problem using CORBA clients with RMI/EJBservers..!!!???
    Please see the post on june 26, re Errors compiling... somewherein
    there,
    I suspect, you are referring to the rmi class file when you are
    obliged
    to
    completely segregate these from the idl class files.
    Hari Rajapakshe wrote:
    Hi,
    I have a question on using EJB / or RMI servers with CORBA
    clients
    using
    RMI-IIOP transport, which in theory should work, but in practice
    has
    few
    glitches.
    Basically, I have implemented a very simple server,
    StockTreader,
    which
    looks up for a symbol and returns a 'Stock' object. In the firstexample, I
    simplified the 'Stock' object to be a mere java.lang.String, so
    that
    lookup
    would simply return the 'synbol'.
    Then I have implemented the above, as an RMI-IIOP server (case
    1)
    and a
    CORBA server (case 2) with respective clients, and the pair of
    client-servers work fine as long as they are CORBA-to-CORBA andRMI-to-RMI.
    But the problem arises when I tried using the RMI server (via
    IIOP)
    with
    the
    CORBA client, when the client tries to narrow the object ref
    obtained
    from
    the naming service into the CORBA idl defined type (StockTrader)
    it
    ends
    up
    with a class cast exception.
    This is what I did to achieve the above results:
    [1] Define an RMI interface StockTrader.java (extending
    java.rmi.Remote)
    with the method,
    public String lookup( String symbol) throws RMIException;
    [2] Implement the StorckTrader interface (on a
    PortableRemoteObject
    derived
    class, to make it IIOP compliant), and then the server to
    register
    the
    stock
    trader with COS Naming service as follows:
    String homeName =....
    StockTraderImpl trader =new StockTraderImpl();
    System.out.println("binding obj <" homeName ">...");
    java.util.Hashtable ht =new java.util.Hashtable();
    ht.put("java.naming.factory.initial", args[2]);
    ht.put("java.naming.provider.url", args[3]);
    Context ctx =new InitialContext(ht);
    ctx.rebind(homeName, trader);
    [3] Generate the RMI-IIOP skeletons for the Implementation
    class,
    rmic -iiop stock.StockTraderImpl
    [4] generate the IDL for the RMI interface,
    rmic -idl stock.StockTraderImpl
    [5] Generate IDL stubs for the CORBA client,
    idlj -v -fclient -emitAll StockTraderImpl.idl
    [6] Write the client to use the IDL-defined stock trader,
    String serverName =args[0];
    String symList =args[1];
    StockClient client =new StockClient();
    System.out.println("init orb...");
    ORB orb =ORB.init(args, null);
    System.out.println("resolve init name service...");
    org.omg.CORBA.Object objRef
    =orb.resolve_initial_references("NameService");
    NamingContext naming=NamingContextHelper.narrow(objRef);
    ... define a naming component etc...
    org.omg.CORBA.Object obj =naming.resolve(...);
    System.out.println("narrow objRef: " obj.getClass() ":"
    +obj);
    StockTrader trader =StockTraderHelper.narrow(obj);
    [7] Compile all the classes using Java 1.2.2
    [8] start tnameserv (naming service), then the server to
    register
    the
    RMI
    server obj
    [9] Run the CORBA client, passing it the COSNaming service ref
    name
    (with
    which the server obj is registered)
    The CORBA client successfully finds the server obj ref in the
    naming
    service, the operation StockTraderHelper.narrow() fails in thesegment
    below, with a class cast exception:
    org.omg.CORBA.Object obj =naming.resolve(...);
    StockTrader trader =StockTraderHelper.narrow(obj);
    The <obj> returned by naming service turns out to be of the
    type;
    class com.sun.rmi.iiop.CDRInputStream$1
    This is of the same type when stock trader object is registeredin a
    CORBA
    server (as opposed to an RMI server), but works correctly with
    no
    casting
    excpetions..
    Any ideas / hints very welcome.
    thanks in advance,
    -hari

  • Need a simple network accessibility for RMI class files.

    I am trying to get an RMI server working and need a way to make the class files network accessible. The link: http://java.sun.com/javase/technologies/core/basic/rmi/class-server.zip does seem to have the server anymore. Anyone know where to get a copy of it?
    Is there a way to do this with Jini?
    Can oc4j be used?

    I am trying to get an RMI server working and need a way to make the class files network accessible. The link: http://java.sun.com/javase/technologies/core/basic/rmi/class-server.zip does seem to have the server anymore. Anyone know where to get a copy of it?
    Not much point really. That class file server only served .class files, not even JARs.
    Is there a way to do this with Jini?No.
    Can oc4j be used?Not by itself.
    Anything that will serve HTTP requests will do. Such as an HTTP server. Such as the one built into the JDK for example.

  • Any example of dynamic proxy with RMI?

    Hi, are there any good example of dynamic proxy with RMI, using the new RemoteObjectInvocationHandler class?
    I am currently implementing a Registry, and want to use dynamic proxy to wrap around the registry stub, to pass extra information to the client.
    I've tried it, but the program will hang and get this exception:
    Exception in thread "RMI TCP Connection(1616)-192.168.1.23" java.lang.OutOfMemoryError: Java heap space
    My implementation looks like this:
    public RegistryImpl extends RemoteServer Implements Registry {
        public RegistryImpl(int port, Properties... properties) throws RemoteException, ChannelException {
             // Create a reference for the registry.
         LiveRef liveref = new LiveRef(id, port);
            ref = new UnicastServerRef(liveref);
             Registry proxy = (Registry)RegistryProxy.newProxyInstance(
                  this.getClass().getClassLoader(),
                  this.getClass().getInterfaces(),
                  new RemoteObjectInvocationHandler(this.getRef()));
             /* Using dynamic proxy */
             usref.exportObject(proxy, null, true);
    public class RegistryProxy extends Proxy implements Registry {
         private InvocationHandler handler;
         public RegistryProxy(InvocationHandler handler) {
              super(handler);
              this.handler = handler;
         public Remote lookup(String name) throws RemoteException, NotBoundException, AccessException {
              Remote result;
              try {
                   Method m = Registry.class.getMethod("lookup", new Class[]{String.class});
                   result = (Remote)handler.invoke(this, m, new Object[]{name});
              } catch (SecurityException e) {
                   throw new UndeclaredThrowableException(e);
              } catch (NoSuchMethodException e) {
                   throw new UndeclaredThrowableException(e);
              } catch (Throwable e) {
                   throw new UndeclaredThrowableException(e);
              return result;
         public void bind(String name, Remote remoteObj) throws RemoteException, AlreadyBoundException, AccessException {
         public void unbind(String name) throws RemoteException, NotBoundException, AccessException {
         public void rebind(String name, Remote remoteObj) throws RemoteException, AccessException {
         public String[] list() throws RemoteException, AccessException {
    }I am new to Java programming, any help is appriciated.
    Regards
    Eddie

    Hi Eddie,
    Perhaps you might like this one:
    http://wiki.java.net/bin/view/Communications/TransparentProxy
    it uses dynamic proxies to achieve complete RMI transparency.
    Something to consider, good luck.
    John

  • IllegalAccessError passing object with RMI

    Hi,
    I am playing with RMI at the moment.
    I have a Remote class that implements a Remote interface
    The interface has one method which the class implements and this is to get a TestSerial object.
    If I run without using a Securitymanager then there are no problems.
    When I do use the SecurityManager then there is an error.
    This error remains even if set the permissions in the policy file to java.security.AllPermissions
    Does anyone know why this is?
    thanks in advance,
    J
    //Start the server....
    java -Djava.security.policy=policy HelloServer
    In main....
    HelloImpl bound in registry....
    //Run the client
    java -Djava.security.policy=policy HelloClient
    Exception in thread "main" java.lang.IllegalAccessError: tried to access TestSerial from class $Proxy0
    at $Proxy.getTestSerial(Unknown Source)
         at HelloClient.main(HelloClient.jav:23)
    * Remote interface
    public interface Hello extends java.rmi.Remote {
        TestSerial getTestSerial() throws java.rmi.RemoteException;
    * Remote class
    public class HelloImpl implements Hello {
      public HelloImpl() {
      public TestSerial getTestSerial(){
        return new TestSerial();
    * Server class
    import java.io.*;
    import java.rmi.*;
    import java.rmi.server.*;
    import java.rmi.registry.*;
    public class HelloServer {
      public HelloServer() {
      public static void main(String args[]) {
        System.out.println("In main....");
        if (System.getSecurityManager() == null) {
          System.setSecurityManager(new SecurityManager());
        try {
          HelloImpl obj = new HelloImpl();
          Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);
          Registry registry = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
          registry.bind("Hello", stub);
          System.out.println("HelloImpl bound in registry...."); 
        catch (Exception e) {
          System.out.println("HelloImpl exception: " + e.getMessage());
          e.printStackTrace();
    * Client class
    import java.rmi.*;
    import java.rmi.registry.*;
    import java.io.*;
    public class HelloClient {
    public static void main(String args[]) {
       if (System.getSecurityManager() == null) {
         System.setSecurityManager(new SecurityManager());
       try {
          Registry registry = LocateRegistry.getRegistry();
          Hello obj = (Hello) registry.lookup("Hello");
          TestSerial x = obj.getTestSerial();
          System.out.println(x.getName());
        catch (Exception e) {
          System.out.println("HelloClient exception: " + e.printStackTrace();
    * TestSerial class
    class TestSerial implements java.io.Serializable {
      public TestSerial(){
      public String getName(){
        return "TestSerial";
    * Policy file
    grant codeBase "file:." {
      permission java.net.SocketPermission "*:1024-", "accept,connect";
    };

    class TestSerial implements java.io.Serializable {
    public class TestSerial implements java.io.Serializable {

  • Simple RMI/IIOP app : "no security manager: RMI class loader disabled"

    Hello colleagues!
    I do not understand the problem at all, and asking for your kind help.
    This is my first code for RMI/IIOP. We are using JBoss as application server.
    What I've done :
    1) created test.Command interface , extending Remote
    2) created test.CommandImpl , implementing above mentioned interface and java.io.Serializable, and extending javax.rmi.PortableRemoteObject.
    BTW, Serializable is not implemented in some tutorials, but absence of Serializable causes NotSerializableException when trying to rebind (next step).
    3) in server code, created initial context and called
    context.rebind("test/Command",new CommandImpl());
    4) Ran rmic -iiop test.CommandImpl . A result was two new cass files, CommandImplTie.class and CommandStub.class , both are also in package "test".
    5) Created remote client and put CommandStub.class to client
    classpath (under package "test", too).
    6) In client code, initialized the context and called
    context.lookup("test/Command").
    On this line (lookup), the following exception is being raised :
    javax.naming.CommunicationException. Root exception is java.lang.ClassNotFoundException: test.CommandImpl (no security manager: RMI class loader disabled)
         at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:368)
         at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:161)
         at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:631)
         at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:257)
         at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:200)
         at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1513)
         at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1435)
         at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1626)
         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
         at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
         at java.rmi.MarshalledObject.get(MarshalledObject.java:135)
         at org.jnp.interfaces.MarshalledValuePair.get(MarshalledValuePair.java:30)
         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:514)
         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:471)
         at javax.naming.InitialContext.lookup(InitialContext.java:347)
    Is _Stub class all that client needs from server classes, to obtain
    the reference ? I tried to put _Tie also to client, but with the same result.
    All Jndi paths to JBoss server are correct, as I've used them successfully in other applications.
    Many thanks in advance,
    Daniel

    Next few words to the topic.
    I made tests with canonical RMI/IIOP tutorial from Sun.
    When I use Sun's ORB (orbd.exe) , everything work fine. I started
    orbd on the same PC as JBoss, and client and server are running
    remotely.
    But with JBoss ORB, I have the same exception as described above.
    Server starts and registers in JNDI successfully, but client can not
    obtain a remote reference. Exception is being thrown on
    context.lookup().
    So the difference is definitely in security managers for two ORBs.
    I also tried to create new RMISecurityMananger and set it, but with
    no effect.
    Any ideas ?
    TIA,
    Daniel.

  • Can I do this with RMI?

    I have a class of methods that access an Oracle database. The Class will be sitting on a server which is connected to the database.
    What I want to do is access these methods from another web server over the internet.
    Is this something that I can do with RMI ?????
    Please Help!!
    Cheers

    yes this can be done. make your class rmi-able, and you should be pretty good. Note, that any parameters that you send this class, or return values must be either remote or serializable. That way RMI can copy them over the network. I'm doing something very similiar currently.

  • Send file with RMI

    Hi,
    I tried to send a file from client to server with RMI as follow:
    upload(String filename, InputStream in);
    however the InputStream is not a Serializable.
    1. Is it a correct method to send the file in RMI ? if not, what should be used?
    2. How to "Serialize" the InputStream, I have tried to pass the "SerailInputStream" extends from InupStream object implements Serializable as a byte array by the ObjectOutputStream and retrieve it in server successfully, but the inputstream seems cannot be used.
    Many thanks
    George

    PipedIn/OutStreams used to commnicate inter-thread transfer. I guess bschauwe are guiding the way how to smoothly handle the file transfer inside the server. The communication to server seems not through the java streams classes.
    if what you want to do is to copy a file in whole. You may send a byte array in a serializable wrapper class. You can create a byte array of a file by using ByteArrayOutputStream and call toByteArray(). Finally in the server side, with the raw byte array, you can create a new ByteArrayInputStream(byte[]). You know the rest of story.
    Or you can create a serializable class that extends InputStream and similary behaves like ByteArrayIn/OutStream. In this case, you have to know how to make a sub-class of non-serializable super class serializable. There is tutorial in the SUN site covering this subject. If you also look at the source codes of both InputStream and ByteArrayInputStream, there is no rocket-science there.
    Frankly, I have not tried myself yet. I am also looking forward to hearing the better suggestion.
    Hope it helped.

  • Jms clustering with spring

    Hi
    i have created the jms clustering configuration in weblogic 10.3.3 that i am facing issues in the connection queue like this
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'queueConnectionFactory' defined in ServletContext resource [WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Unable to resolve 'QueueConnectionFactory'. Resolved ''; remaining name 'QueueConnectionFactory'
         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1401)
         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
    and i have configured servers below
    clustered the managed servers MS-1 and MS-2
    Servers Targets
    JMS Server Admin server
    JMS Module cluster
    connection queue cluster
    queue JMSServer
    i have tried with the 2 different JMS servers for managed servers
    Servers Targets
    JMS Server - 1 MS-1
    JMS Server - 2 MS-2
    JMS Module cluster
    connection queue cluster
    queue JMSServer - 1 and JMSServer - 2
    so, please help us to configure the JMS clustering with spring.
    Note : please find the spring - applicationContext.xml below thats is used to configure the connection factory and jms queue.
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
         <bean id="invoiceListener" class="com.spring.jms.InvoiceMDB" />
         <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
              <property name="environment">
                   <props>
                        <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
                        <prop key="java.naming.provider.url">t3://localhost:6001,localhost:6003,localhost:6005</prop>
                   </props>
              </property>
         </bean>
         <bean id="queueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
              <property name="jndiTemplate"><ref bean="jndiTemplate" /></property>
              <property name="jndiName"><value>QueueConnectionFact</value></property>
         </bean>
         <bean id="invoiceQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
              <property name="connectionFactory"><ref bean="queueConnectionFactory" /></property>
              <property name="destinationResolver"><ref bean="jmsDestinationResolver" /></property>
         </bean>
         <bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.JndiDestinationResolver">
              <property name="jndiTemplate"><ref bean="jndiTemplate" /></property>
              <property name="cache"><value>true</value></property>
         </bean>
         <bean id="jmsInvoiceSender" class="com.spring.jms.InvoiceQueueSender">
              <property name="jmsTemplate"><ref bean="invoiceQueueTemplate" /></property>
         </bean>
         <bean id="invoiceQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
              <property name="jndiTemplate"><ref bean="jndiTemplate"/></property>
              <property name="jndiName"><value>MyQueue</value></property>
         </bean>
         <bean id="Invoicelistener" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
         <property name="concurrentConsumers" value="5" />
         <property name="connectionFactory" ref="queueConnectionFactory" />
         <property name="destination" ref="invoiceQueue" />
         <property name="messageListener" ref="invoiceListener" />
         <property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE" />
    <property name="sessionTransacted" value="true" />
         </bean>
    </beans>

    Are you sure you have defined the correct JNDI-name in the Spring config file?
    An example set-up of a domain can be found here - http://middlewaremagic.com/weblogic/?p=7795 (the script presented in the create domain section)
    This is basically the same set-up you have, except that a distributed queue is being used that is targeted to JMS Servers through a subdeployment.
    The Spring configuration looks as follows:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
            <property name="environment">
                <props>
                    <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
                    <prop key="java.naming.provider.url">t3://192.168.1.50:9001,192.168.1.50:9002</prop>
                </props>
            </property>
        </bean>
        <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiTemplate" ref="jndiTemplate"/>
            <property name="jndiName" value="jms/ConnectionFactory"/>
        </bean>
        <bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiTemplate" ref="jndiTemplate"/>
            <property name="jndiName" value="jms/CompanyQueue"/>
        </bean>
        <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
            <property name="connectionFactory" ref="connectionFactory"/>
            <property name="defaultDestination" ref="destination"/>
        </bean>
        <bean id="taskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
            <property name="workManagerName" value="java:comp/env/default"/>
            <property name="resourceRef" value="true"/>
        </bean>
        <bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
            <property name="connectionFactory" ref="connectionFactory"/>
            <property name="destination" ref="destination"/>
            <property name="messageListener" ref="receiver"/>
            <property name="taskExecutor" ref="taskExecutor"/>
        </bean>
        <bean id="sender" class="model.logic.JMSSender">
            <property name="jmsTemplate" ref="jmsTemplate"/>
        </bean>
        <bean id="receiver" class="model.logic.JMSReceiver"/>
    </beans>To test create a servlet, for example,
    public class TestServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            JMSSender jmsSender = SpringUtilities.getJMSSender();
            jmsSender.sendMessage();
            System.out.println("message send by the testservlet");
    }and web.xml as
    <web-app ...>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-config.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <!-- default weblogic work manager -->
        <resource-ref>
            <res-ref-name>default</res-ref-name>
            <res-type>commonj.work.WorkManager</res-type>
            <res-auth>Container</res-auth>
            <res-sharing-scope>Shareable</res-sharing-scope>
        </resource-ref>
        <!-- default weblogic timer manager -->
        <resource-ref>
            <res-ref-name>tm/default</res-ref-name>
            <res-type>commonj.timers.TimerManager</res-type>
            <res-auth>Container</res-auth>
            <res-sharing-scope>Shareable</res-sharing-scope>
        </resource-ref>
        <servlet>
            <servlet-name>TestServlet</servlet-name>
            <servlet-class>test.TestServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>TestServlet</servlet-name>
            <url-pattern>/testservlet</url-pattern>
        </servlet-mapping>
    </web-app>with this set-up the JMS clustered and Spring is able to use it on both servers.

  • Help with RMI tutorial (and Eclipse)

    Hi!
    I need a little help with RMI tutorial. I have all source files from tutorial downloaded, but I never did anything like this and don't know, how to run it. I somehow did Building a JAR File of Interface Classes from [http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/rmi/compiling.html], but got stuck on simple HTTP server, I didn't understand, what to do.
    Bonus question: is it possible to do those commands from Eclipse? How?
    Thanks a lot!

    It seems that the example provided (in the link) requires a web serverNo it doesn't. It requires an HTTP server.
    tomcat will be a better option which you can useThe Apache HTTP server might be more to the point.
    But If you are new to RMI and need to understand the exact flow of RMI I think this will not be a better exercise to start withI agree. I would get it running without the codebase feature. This isn't as widely used as you might think, and anyway it is a deployment option not something you need to engage with much when developing.
    @OP: ignore the HTTP stuff and the codebase feature and build 3 JAR files:
    (a) the common stuff (remote interface, stubs if any, and any classes referecned by the remote interface)
    (b) the server (the remote object itself and anything server-side it uses)
    (c) the client.
    The common JAR file should be deployed to both the server and the client, and both the other JARs should name it in their Class-Path entry in the manifest.

  • How do i open a web page with VeriSign Class 3 Extended Validation SSL SGC SS CA certfificate i can't open web pages with this, how do i open a web page with VeriSign Class 3 Extended Validation SSL SGC CA certfificate i can't open web pages with this

    how do i open a web page with VeriSign Class 3 Extended Validation SSL SGC SS CA ?

    Hi
    I am not suprised no one answered your questions, there are simply to many of them. Can I suggest you read the faq on 'how to get help quickly at - http://forums.adobe.com/thread/470404.
    Especially the section Don't which says -
    DON'T
    Don't post a series of questions in  a single post. Splitting them into separate threads increases your  chances of a quick answer.
    PZ
    www.pziecina.com

Maybe you are looking for