• 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
  • Tim Cooke
  • paul wheaton
  • Jeanne Boyarsky
  • Ron McLeod
Sheriffs:
  • Paul Clapham
  • Liutauras Vilda
  • Devaka Cooray
Saloon Keepers:
  • Tim Holloway
  • Roland Mueller
Bartenders:

NX: stand-alone mode using RMI

 
Greenhorn
Posts: 4
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I have a question about how to implement the stand-alone mode. I am using RMI an want to use the same class for both remote and local connections. For remote connections simply do a lookup and for stand-alone create a new object. I have demonstrated a simple example below.
Does this meet the requirements of non-networked mode; no serialization or networking?

[Andrew: Put code inside [code] blocks so formatting can be preserved.
[ September 05, 2003: Message edited by: Andrew Monkhouse ]
 
Chris Hegarty
Greenhorn
Posts: 4
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I can refine this example some what by only extending RemoteObject and using java.rmi.server.UnicastRemoteObject.exportObject(<remoteObject> to export the object if in server mode.
 
Ranch Hand
Posts: 451
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Chris,
I not sure if this would cause automatic failure, but I wouldn't want to take that chance. Even ignoring that issue, I really don't know why you would want to do it this way.
In my project, I define a Services interface and a ServicesImpl class that does all the heavy lifting, locking/unlocking, accessing the Data class, etc. As far as the gui client code is concerned, all it ever sees is an implementation of Services whether running in standalone or network mode.
When running in standalone mode, my launch code provides the gui with an instance of ServicesImpl but all the gui client knows about it is that it is an implementation of Services.
I also define a RemoteServices interface and a RemoteServicesImpl class extending UnicastRemoteObject. RemoteServicesImpl is ultra-simple, it gets an instance of ServicesImpl and delegates all of its work to it.
When running in network mode, my launch code provides the gui with an instance of the generated stub for RemoteServicesImpl but again all the gui client knows about it is that it is an implementation of Services.
NOTE: I use the nice little trick shown in Max's book of defining all methods in my Services interface to throw IOException. This allows RemoteServices to simply extend Remote and Services without having to specify anything else at all. This works because RemoteException extends IOException. The gui has to deal with IOExceptions and any business logic Exceptions that might occur but it doesn't have to supply anything extra for RemoteExceptions.
Hope this helps,
kktec
SCJP1.4 & SCWCD
 
author and jackaroo
Posts: 12200
280
Mac IntelliJ IDE Firefox Browser Oracle C++ Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Chris,
Welcome to JavaRanch.
As you may notice, I have put your code inside a [code] block which ensures that indentation is kept. This makes your code more readable, which may help you to get more comments - there are some people who will not read code that is not formatted. If you edit your post above, you should be able to see the start and end code block statements. Also you can look at the UBB code description page.
I think that this does meet the "no networking" requirements.
However I strongly suggest you look at the concept explained by Ken above. I think this is much cleaner, and I have no doubt that this does meet the requirements, so it is a little safer.
Regards, Andrew
 
Chris Hegarty
Greenhorn
Posts: 4
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks guys, I think I will go with the suggestion from Ken.
Better safe than sorry!
 
Greenhorn
Posts: 15
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi,Chris Hegarty, this is my solution:
Code:
----------------------------------------------------------------

You can see that in fact almost all the operation is in Data.class.
When you start the application, the ConnectFactory can return a same database interface to you, yet it was created by defferent ways according to the mode.
I also hope to get suggestions about my code from Andrew Monkhouse and Ken Krebs
Thank you
[Andrew: removed major sections of code]
[ September 08, 2003: Message edited by: Andrew Monkhouse ]
 
Andrew Monkhouse
author and jackaroo
Posts: 12200
280
Mac IntelliJ IDE Firefox Browser Oracle C++ Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Jhao,
As you will notice, I have removed some major sections of your code, putting comments in their place to indicate what the classes / interfaces do. While we do allow some small methods to be posted here, I feel that you provided a major part of the solution to the entire server and local / remote mode connectivity issue. I do appreciate that you did try and remove some sections of your code before posting. However I felt that there was too much detail, and lowered the detail level. I believe that we can still answer your request for comments with what I have left. Chris' post, while also containing quite a lot of detail, was not specific to the assignment, so it is more in keeping with our requirements.
Your solution is, in my opinion, identical to Chris'. In both cases you are defining the one interface, with one class that extends that interface, for both local and remote use. Your only real difference is using a connection factory to get your instance of Database, whereas Chris' example used the object directly. I believe that this difference only occured because you were providing your assignment solution - Chris was just providing a proof of concept, so a factory was not required. Given this, the comments that Ken and I provided to Chris also apply to your code.
Regards, Andrew
 
A teeny tiny vulgar attempt to get you to buy our stuff
Smokeless wood heat with a rocket mass heater
https://woodheat.net
reply
    Bookmark Topic Watch Topic
  • New Topic