Java RMI questions and MyEclipse

Discussion in 'Java' started by Clayton Cramer, Oct 2, 2012.

  1. I hope that I am asking this in the right group.

    1. I am looking at the possibility of replacing our browser-based JSP/Struts client talking to Java server classes with a thick client written in Java.. (Yes, for most enterprise systems, this would not be a great idea, but for us it does make sense: we have a few hundred PCs talking to our servers;there are never one time users connecting to our servers unless it's a security breach.)

    2. I I started with the Oracle demo where the client makes a request for the value of pi to an arbitrary number of places, and the server computes it and passes it back to the client.

    I was able to get this working using javac and jar from the command line (which involves bundling the class files into a JAR, copying it over to the tomcat webapps directory). My guess is that there is some way to set this upin MyEclipse so that it compiles and redeploys--but it is not exactly obvious how to set this up.

    I am using MyEclipse 9.1, Tomcat 5.0.28 (please don't laugh; we're working on moving into modern times, and getting rid of our papyrus and clay tablets).

    To simplify figuring out what is broken, I have taken the Oracle tutorial code and put in a single project, divided into three packages: client, compute, and engine. I can start the server (engine) with the following DOS batch file:

    java -cp "c:\Documents and Settings\ccramer\Workspaces\MyEclipse 9\rmi\src";c:\tomcat5\webapps\rmi\compute.jar -Djava.rmi.server.codebase=file:/c:\tomcat5\webapps\rmi\compute.jar -Djava.security.policy=server.policy engine.ComputeEngine

    I can run the client side from the command line with the following DOS batch file:

    view plaincopy to clipboardprint?
    java -cp "c:\Documents and Settings\ccramer\Workspaces\MyEclipse 9\rmi\src";c:\tomcat5\webapps\rmi\compute.jar -Djava.rmi.server.codebase=file:/c:\tomcat5\webapps\rmi\computer.jar -Djava.security.policy=client.policy client.ComputePi localhost %1%


    where %1% is the parameter passed to the batch file specifying the number of digits of pi to have the server side calculate and return.

    Then I tried to get MyEclipse to start the server in pretty much the equivalent way using the Run Configurations...:

    Main.class: engine.ComputeEngine
    Classpath: default classpath and c:\tomcat5\webapps\rmi\compute.jar
    Environment: java.rmi.server.codebase=file:/c:\tomcat5\webapps\rmi\compute.jar
    java.security.policy=server.policy

    Code:
    ComputeEngine exception:
    java.rmi.ServerException: RemoteException occurred in server thread; nestedexception is:
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    java.lang.ClassNotFoundException: compute.Compute
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
    at sun.rmi.transport.Transport$1.run(Transport.java:153)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
    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:595)
    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:343)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at engine.ComputeEngine.main(ComputeEngine.java:29)
    Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    java.lang.ClassNotFoundException: compute.Compute
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
    at sun.rmi.transport.Transport$1.run(Transport.java:153)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
    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:595)
    Caused by: java.lang.ClassNotFoundException: compute.Compute
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:242)
    at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:707)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:651)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:588)
    at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
    at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
    at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
    at java.io_ObjectInputStream.readProxyDesc(ObjectInputStream.java:1494)
    at java.io_ObjectInputStream.readClassDesc(ObjectInputStream.java:1457)
    at java.io_ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
    at java.io_ObjectInputStream.readObject0(ObjectInputStream.java:1299)
    at java.io_ObjectInputStream.readObject(ObjectInputStream.java:339)
    ... 9 more


    As you can see, there is a ClassNotFoundException: compute.Compute

    I'm hard pressed to see why. If I do a jar -tf c:\tomcat5\webapps\rmi\compute.jar I get:

    Code:
    META-INF/
    META-INF/MANIFEST.MF
    compute/Compute.class
    compute/Task.class


    Any suggestions?
    Clayton Cramer, Oct 2, 2012
    #1
    1. Advertising

  2. Clayton Cramer

    Arne Vajhøj Guest

    On 10/2/2012 12:16 PM, Clayton Cramer wrote:
    > I hope that I am asking this in the right group.
    >
    > 1. I am looking at the possibility of replacing our browser-based
    > JSP/Struts client talking to Java server classes with a thick client
    > written in Java. (Yes, for most enterprise systems, this would not
    > be a great idea, but for us it does make sense: we have a few hundred
    > PCs talking to our servers; there are never one time users connecting
    > to our servers unless it's a security breach.)
    >
    > 2. I I started with the Oracle demo where the client makes a request
    > for the value of pi to an arbitrary number of places, and the server
    > computes it and passes it back to the client.
    >
    > I was able to get this working using javac and jar from the command
    > line (which involves bundling the class files into a JAR, copying it
    > over to the tomcat webapps directory). My guess is that there is some
    > way to set this up in MyEclipse so that it compiles and
    > redeploys--but it is not exactly obvious how to set this up.
    >
    > I am using MyEclipse 9.1, Tomcat 5.0.28 (please don't laugh; we're
    > working on moving into modern times, and getting rid of our papyrus
    > and clay tablets).


    I would recommend against using RMI here. A web container is not a
    good RMI server.

    Expose the functionality as web services and let your fat client
    call those.

    > To simplify figuring out what is broken, I have taken the Oracle
    > tutorial code and put in a single project, divided into three
    > packages: client, compute, and engine. I can start the server
    > (engine) with the following DOS batch file:
    >
    > java -cp "c:\Documents and Settings\ccramer\Workspaces\MyEclipse
    > 9\rmi\src";c:\tomcat5\webapps\rmi\compute.jar
    > -Djava.rmi.server.codebase=file:/c:\tomcat5\webapps\rmi\compute.jar
    > -Djava.security.policy=server.policy engine.ComputeEngine
    >
    > I can run the client side from the command line with the following
    > DOS batch file:
    >
    > view plaincopy to clipboardprint? java -cp "c:\Documents and
    > Settings\ccramer\Workspaces\MyEclipse
    > 9\rmi\src";c:\tomcat5\webapps\rmi\compute.jar
    > -Djava.rmi.server.codebase=file:/c:\tomcat5\webapps\rmi\computer.jar
    > -Djava.security.policy=client.policy client.ComputePi localhost %1%
    >
    > where %1% is the parameter passed to the batch file specifying the
    > number of digits of pi to have the server side calculate and return.
    >
    > Then I tried to get MyEclipse to start the server in pretty much the
    > equivalent way using the Run Configurations...:
    >
    > Main.class: engine.ComputeEngine Classpath: default classpath and
    > c:\tomcat5\webapps\rmi\compute.jar Environment:
    > java.rmi.server.codebase=file:/c:\tomcat5\webapps\rmi\compute.jar
    > java.security.policy=server.policy
    >
    > Code: ComputeEngine exception: java.rmi.ServerException:
    > RemoteException occurred in server thread; nested exception is:
    > java.rmi.UnmarshalException: error unmarshalling arguments; nested
    > exception is: java.lang.ClassNotFoundException: compute.Compute at
    > sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385)


    > As you can see, there is a ClassNotFoundException: compute.Compute
    >
    > I'm hard pressed to see why. If I do a jar -tf
    > c:\tomcat5\webapps\rmi\compute.jar I get:
    >
    > Code: META-INF/ META-INF/MANIFEST.MF compute/Compute.class
    > compute/Task.class


    Can you check the actual java command used when running inside
    Eclipse?

    Arne
    Arne Vajhøj, Oct 2, 2012
    #2
    1. Advertising

  3. Clayton Cramer

    Roedy Green Guest

    On Tue, 2 Oct 2012 09:16:22 -0700 (PDT), Clayton Cramer
    <> wrote, quoted or indirectly quoted someone
    who said :

    >1. I am looking at the possibility of replacing our browser-based JSP/Strut=
    >s client talking to Java server classes with a thick client written in Java=
    >. (Yes, for most enterprise systems, this would not be a great idea, but f=
    >or us it does make sense: we have a few hundred PCs talking to our servers;=
    > there are never one time users connecting to our servers unless it's a sec=
    >urity breach.)


    I reject of thin clients on many grounds:
    1. inefficiency.
    2. bugs introduced by the browser
    3. you don't keystroke by keystroke validation
    4. there is no logic to help you fill out a form when not all the
    fields are mandatory.

    The problem with RMI is you expose everything to the outside world,
    hopefully just an internal LAN.

    I did two projects of this sort. The server had a socket open to each
    terminal. The protocol was a continuous stream of large binary
    packets (most commonly image files). It had quite spectacular
    throughput.
    --
    Roedy Green Canadian Mind Products http://mindprod.com
    The iPhone 5 is a low end Rolex.
    Roedy Green, Oct 2, 2012
    #3
  4. Clayton Cramer

    Arne Vajhøj Guest

    On 10/2/2012 3:58 PM, Roedy Green wrote:
    > On Tue, 2 Oct 2012 09:16:22 -0700 (PDT), Clayton Cramer
    > <> wrote, quoted or indirectly quoted someone
    > who said :
    >> 1. I am looking at the possibility of replacing our browser-based JSP/Strut=
    >> s client talking to Java server classes with a thick client written in Java=
    >> . (Yes, for most enterprise systems, this would not be a great idea, but f=
    >> or us it does make sense: we have a few hundred PCs talking to our servers;=
    >> there are never one time users connecting to our servers unless it's a sec=
    >> urity breach.)

    >
    > I reject of thin clients on many grounds:
    > 1. inefficiency.


    And you are sure that it a problem because?

    > 2. bugs introduced by the browser


    Does browsers have more bugs than other environments?

    Swing may be relative stable, but JavaFX probably have a few oopses.

    > 3. you don't keystroke by keystroke validation


    Ever heard about AJAX?

    > 4. there is no logic to help you fill out a form when not all the
    > fields are mandatory.


    See above.

    Arne
    Arne Vajhøj, Oct 2, 2012
    #4
  5. Clayton Cramer

    Joerg Meier Guest

    On Tue, 02 Oct 2012 12:58:02 -0700, Roedy Green wrote:

    > I reject of thin clients on many grounds:
    > 1. inefficiency.


    In what sense ?

    > 2. bugs introduced by the browser


    As others said, that seems to be not much more of an issue than bugs
    introduced by Swing or whatever.

    > 3. you don't keystroke by keystroke validation
    > 4. there is no logic to help you fill out a form when not all the
    > fields are mandatory.


    This kind of sounds like you are stuck in ca. 2000 web technology. Are
    there even still websites today for which the above is true, let alone
    future websites ?

    Liebe Gruesse,
    Joerg

    --
    Ich lese meine Emails nicht, replies to Email bleiben also leider
    ungelesen.
    Joerg Meier, Oct 3, 2012
    #5
  6. On Tuesday, October 2, 2012 10:50:41 AM UTC-6, Arne Vajhøj wrote:

    > Can you check the actual java command used when running inside
    >
    > Eclipse?
    >
    >
    >
    > Arne


    I am not sure how to see what MyEclipse actually produces. I suspect that there is some magic menu choice that shows this, but I am not sure what it is.
    Clayton Cramer, Oct 15, 2012
    #6
  7. Clayton Cramer

    Lew Guest

    Lew, Oct 15, 2012
    #7
  8. Clayton Cramer

    Jeff Higgins Guest

    On 10/15/2012 06:03 PM, Clayton Cramer wrote:
    > On Tuesday, October 2, 2012 10:50:41 AM UTC-6, Arne Vajhøj wrote:
    >
    >> Can you check the actual java command used when running inside
    >>
    >> Eclipse?
    >>
    >>
    >>
    >> Arne

    >
    > I am not sure how to see what MyEclipse actually produces. I suspect that there is some magic menu choice that shows this, but I am not sure what it is.

    Is this posting in any related to this two year old post at the
    MyEclipse Forums?
    <http://www.myeclipseide.com/PNphpBB2-viewtopic-t-29372.html>
    Just curious, my grasp of this technology isn't great enough for me to
    determine it.
    Jeff Higgins, Oct 16, 2012
    #8
  9. Clayton Cramer

    Jeff Higgins Guest

    On 10/16/2012 03:20 AM, Jeff Higgins wrote:

    > Is this posting in any related to this two year old post at the
    > MyEclipse Forums?


    Oops.I should have slept a little longer.
    Make that several days rather than two years.

    > <http://www.myeclipseide.com/PNphpBB2-viewtopic-t-29372.html>
    > Just curious, my grasp of this technology isn't great enough for me to
    > determine it.
    >
    Jeff Higgins, Oct 16, 2012
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. MyEclipse J2EE Solutions
    Replies:
    0
    Views:
    397
    MyEclipse J2EE Solutions
    Oct 27, 2003
  2. Buu Nguyen

    RMI, JINI or RMI/IIOP

    Buu Nguyen, Aug 25, 2004, in forum: Java
    Replies:
    1
    Views:
    553
    Sudsy
    Aug 25, 2004
  3. Jan Schulze
    Replies:
    1
    Views:
    562
    Esmond Pitt
    Mar 26, 2005
  4. tenxian
    Replies:
    0
    Views:
    593
    tenxian
    Apr 11, 2008
  5. Pif
    Replies:
    0
    Views:
    1,243
Loading...

Share This Page