• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

RMI client failure

 
Greenhorn
Posts: 7
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hallo everybody

I'm doing the B&S assignment. I'm busy with the last part, setting up a network connection between the server and the client. I choose RMi.
I'm now able to start the server , and the RMI registry programatically.
When doing: netstat -na |grep 1099 I see that this port is listening.

Then I launch the Gui client , give as host : local host and as port 1099.
The client finds the registry for it doesn't fail doing:
DataRemoteFactory remoteFactory = (DataRemoteFactory) Naming.lookup(url);

But when asking to the server an instance of the object the client should use to talk to a failure takes place :

DataRemote remote = remoteFactory.getClient();


The url is correct. But this is the trace I receive: (HOpe is not too long)

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.server.ExportException: remote object implements illegal remote interface; nested exception is:
java.lang.IllegalArgumentException: illegal remote method encountered: public abstract java.util.Collection suncertify.db.MyInterface.readAllRecords()
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:325)
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:466)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
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:126)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:179)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
at $Proxy0.getClient(Unknown Source)
at suncertify.remote.RmiClient.getRemote(RmiClient.java:42)
at suncertify.gui.controller.GuiController.<init>(GuiController.java:60)
at suncertify.gui.wiew.ClientWindow.<init>(ClientWindow.java:100)
at suncertify.gui.ApplicationRunner.<init>(ApplicationRunner.java:56)
at suncertify.gui.ApplicationRunner.main(ApplicationRunner.java:35)
Caused by: java.rmi.server.ExportException: remote object implements illegal remote interface; nested exception is:
java.lang.IllegalArgumentException: illegal remote method encountered: public abstract java.util.Collection suncertify.db.MyInterface.readAllRecords()
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:171)
at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:293)
at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:235)
at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:133)
at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:119)
at suncertify.remote.DataRemoteImpl.<init>(DataRemoteImpl.java:24)
at suncertify.remote.DataRemoteFactoryImpl.getClient(DataRemoteFactoryImpl.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
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:466)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.IllegalArgumentException: illegal remote method encountered: public abstract java.util.Collection suncertify.db.MyInterface.readAllRecords()
at sun.rmi.server.Util.checkMethod(Util.java:244)
at sun.rmi.server.Util.getRemoteInterfaces(Util.java:223)
at sun.rmi.server.Util.getRemoteInterfaces(Util.java:193)
at sun.rmi.server.Util.createProxy(Util.java:126)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:169)
... 17 more
Exception in thread "main" java.lang.NullPointerException
at suncertify.gui.controller.GuiController.getAllContractors(GuiController.java:96)
at suncertify.gui.wiew.ClientWindow.createAndShow(ClientWindow.java:128)
at suncertify.gui.wiew.ClientWindow.<init>(ClientWindow.java:104)
at suncertify.gui.ApplicationRunner.<init>(ApplicationRunner.java:56)
at suncertify.gui.ApplicationRunner.main(ApplicationRunner.java:35)


I've no idea what's going on... and that is just to little to go on.

Thank you in advance.

Amy
 
Greenhorn
Posts: 13
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Exception in thread "main" java.lang.NullPointerException
at suncertify.gui.controller.GuiController.getAllContractors(GuiController.java:96)



First thing first.
Starting with this null pointer exception to be gone.
And then would you post again?
I would like to help you.
 
Amy Young
Greenhorn
Posts: 7
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Paul

I realize that I wasn't clear in describing the problem. I guess I've been looking at this for too long.
Let's start saying that when running the application in mode "alone" everything goes well.
The real problem is caused by calling:
DataRemote dr = new DataRemoteImpl(location);javascript: x()

DataRemoteImpl is defined as :

public class DataRemoteImpl extends UnicastRemoteObject implements DataRemote

In its constructor DataRemoteImpl instantiates the Data.java class which is the mandatory implementation of the DBAccess interface given by SUN in the assignement.And the constructor throws RemoteException.
The DataRemoteImpl calls all methods that can be found in the Data.java (as CreateRecord , deleteRecord etc).
This is the trace (I used a proef.java class to isolate the problem)

java.rmi.server.ExportException: remote object implements illegal remote interfa
ce; nested exception is:
java.lang.IllegalArgumentException: illegal remote method encountered: public a
bstract java.util.Collection suncertify.db.MyInterface.readAllRecords()
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:171)
at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:29
3)
at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:23
5)
at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:133)
at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:119)
at suncertify.remote.DataRemoteImpl.<init>(DataRemoteImpl.java:24)
at suncertify.remote.proef.<init>(proef.java:18)
at suncertify.remote.proef.main(proef.java:12)

It has something to do with the RMI implemetation, but I don't see what it is.
I hope this time I managed to be clear. I certanly don't want let people work on obvious issues.

Thanks

Amy
 
Greenhorn
Posts: 17
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
One easy thing to make sure of that you have used 'serialver' to calculate a serialVersionUID value. If you do not, this values gets calculated by the JVM, and could potentially be a different value in different JVM's, or even the same JVM.

You probably already know this, but I thought it was worth mentioning.

Good luck, if anything else comes to mind, I will post again.
 
Ranch Hand
Posts: 443
3
Eclipse IDE C++ Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Does running rmic on your impl class help, even if not necessary for running in your case its useful for finding bugs particularly ones where a RemoteException declaration is missing or the like.
 
Ranch Hand
Posts: 42
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi,

make sure you throw RemoteException in all methods that you expose.
(methods of the class that extends the UnicastRemoteObject and implements the MyInterface)

99.9% that is your problem...

hope to help.
cheers.
 
They worship nothing. They say it's because nothing lasts forever. Like this tiny ad:
a bit of art, as a gift, that will fit in a stocking
https://gardener-gift.com
reply
    Bookmark Topic Watch Topic
  • New Topic