Hi guys, I have completed the assignment but I have a doubt. In my present implementation the output area for the server is the command window from where it is started. Additionally there is no provision of safe server shutdown (i.e. you have to press ctrl + c to stop server) and no way to save servers log into a file. I really doubt if this a very good implementation, so I am thinking about using a gui for logging the information and providing some mechanism for safe server shutdown and saving log. Any suggetions ?? Vishal Sinha

Post by:Sai Prasad
, Ranch Hand

May 02, 2002 09:39:00

I wrote the code below to shut down gracefully. When the user types EXIT and presses Enter, I call Naming.unbound() to remove the bound remote object. I am interested to hear from others the need to have a GUI on the server side. It is not mentioned as the requirement as far as I can tell.

[ May 02, 2002: Message edited by: Sai Prasad ]

Post by:Adam Roberts
, Ranch Hand

May 02, 2002 13:41:00

I made a *really* simple GUI for the server( probably on the borderline of sloppy ) but it worked. Two buttons and a text box that simply displayed what was going on. One button locked all the records(or unlocked it if all were locked) the other started a timer for 60 seconds(the timeout to each thread) ,locked all records then exited.

Post by:Abhinav Anand
, Ranch Hand

May 03, 2002 06:19:00

Hi Sai, I have doubt about your implementation. If you are jamming the output of your server console into one readline statement then I guess that you are not displaying any server log. Am I right. Thanks, Abhinav

Post by:Abhinav Anand
, Ranch Hand

May 03, 2002 06:25:00

Hi adam, I am also thinking about using the same sort of gui implementation on the server side. I have designed a menu system containing the options server and log. The server menu contains one option, shutdown. The log menu contains two options, clear log, save log to file. The menu system is supported by a tool bar containnig shortcut buttons to the above said options. The main display area is dominated by a jtextarea in which all the activities of the server is logged. This gui is displayed only when the server is started for networked mode otherwise I don't display any gui. Any suggetions are welcome. Thanks, Abhinav.

Post by:HanMing Low
, Ranch Hand

May 03, 2002 10:02:00

Hi, I'm using a JFrame with 2 button and a JTextField. 2 Button for - Start, Stop server TextField for - message e.g. server bind to port number xxx or server failed to start due to xxxx. What you need to do to start the server is simply LocateRegistry.createRegistry(portNumber);String url = new String("rmi://localhost:" + portNumber + "/" + SERVICE_NAME); Naming.rebind(url, this); To stop, Lock the whole database, Naming.unbind(url); Unlock the whole database.

However, I'm not sure what do you mean by the gui is displayed only when the server is started up for network mode. My interpretation is that once you start your server, you'll want to connect it through the network. Hope this helps. Cheers.

Han Ming

Post by:Abhinav Anand
, Ranch Hand

May 04, 2002 06:50:00

Hi, I start my server when I have to use networked mode access i.e. the server is running on one computer and the client connects to it from a different computer. In this case the server is running as a standalone program with a proper gui and is started by a command from the console. However when no networking is to be performed the server is not at all started instead an instance of it is created by the client. In this case the server is not running as a standalone program so no gui is displayed. Any suggetions are always welcome. Thanks.

Post by:John Smith
, Ranch Hand

May 08, 2002 15:01:00

Sai Prasad posted:

I would guess that code would waste a LOT of cpu cycles. Having said that, I can't think of a better way to shut down the server. Eugene Kononov.

Post by:Sai Prasad
, Ranch Hand

May 08, 2002 17:41:00

I moved away from the console design to a server side GUI with one Stop button, couple of JTextArea(s) in a JSplitPane and couple of menu items. When the user stops the server, I lock the entire database and terminate the server VM process. I think this is a better way to do it than a console window waiting for the user to type "EXIT".

Post by:Ramesh kumaar
, Ranch Hand

May 08, 2002 22:31:00

Hello All,

Guys i have gone through the above postings. Here i have a doubt, As per most of ur design if u have GUI to start the server and stop a server. How to start the server in a console(Non GUI) mode.

I just like to know wheather we have to provide both(console,GUI) the ways to start, stop the server. So that the user can start the server in eaither mode he is intrested in. comments are welcome.

thanks & regards, -rameshkumar

Post by:Sai Prasad
, Ranch Hand

May 08, 2002 22:53:00

I have only gui version for the admin to start the server. I don't see any reason to have two ways to stop the server.

Post by:Rasika Chitnis
, Ranch Hand

May 09, 2002 10:02:00

just wondering what is the difference between lookup, bind, rebind methods in Naming class and the methods with same name in the Registry class ?

Post by:Sai Prasad
, Ranch Hand

May 09, 2002 13:23:00

If you want to use those methods in the Registry class, you need to get an instance of the Registry object. Methods in those classes serve the same purpose.

Post by:Rasika Chitnis
, Ranch Hand

May 09, 2002 14:15:00

I guess you can not use the methods in Registry directly because it is an Interface not a class. Surprisingly I don't find any class that implements Registry Interface. Even though Naming has exactly same methods as Registry, it does not implement Registry Interface.

Post by:Rasika Chitnis
, Ranch Hand

May 10, 2002 10:09:00

When I started thinking about having GUI for server, the first thing that came to my mind was do I write a separate class (probably extends JFrame) that creates GUI and instantiate the DBServer (the class that extends UnicastRemoteObject and implements DBRemoteInterface) or add methods in DBServer to create GUI and add actionListeners for 'start server' and 'stop server' buttons ? I personally prefer creating a separate class. What do you guys think ?? thanks in advance for your response.

Post by:Sai Prasad
, Ranch Hand

May 10, 2002 12:19:00

I have a seperate class to handle the GUI on the server which then instantiates the Remote object. [ May 10, 2002: Message edited by: Sai Prasad ]

Post by:Rasika Chitnis
, Ranch Hand

May 10, 2002 16:43:00

I have implemented server GUI now, with two buttons to start and stop the server and a label. But the problem I am facing now is if I start the server once and then stop the server, and then try to start the server second time, I get ExportException. Any idea why this is happening ? thanks

Post by:Sai Prasad
, Ranch Hand

May 10, 2002 19:09:00

Yes. You don't need a "Start" button. Bind the remote connection object to the RMI Registry when you start the server and when Stop is pressed, lock the entire database and terminate the entire server VM process. If you don't kill the server process and if a client has a reference to the remote object, the client can still invoke methods on it. [ May 10, 2002: Message edited by: Sai Prasad ]

Post by:Abhinav Anand
, Ranch Hand

May 11, 2002 07:41:00

I have completely encapsulated the server gui from the actual implementation of the server. The server gui is contained in a different class and it is concerned with only one type of tasks that is to display messages, save messages to file and clear excessive messages. If the user tries to close the gui then the gui confirms whether the user wants to shutdown the server. If the user confirms that he wants to shutdown the server then the gui class simply notifies all the classes that had requested to be notified of the server shutdown. Any class that wants to receive notification of server shutdown has to request so by activating the notifyOfServerShutdown method of the gui class. The server gui simply activates the shutdown methods of these classes when the user confirms of server shutdown. Now it depends upon the notified classes as to what to do. In my present implementation the DataServer class simply locks the whole database, unbinds the data instance from the rmiregistry and exits the program. Please comment !! Any suggetions are always welcome.

Post by:Rasika Chitnis
, Ranch Hand

May 12, 2002 08:33:00

How do you guys handle any exception thrown by Naming.unbind while stopping the server ?

Post by:Sai Prasad
, Ranch Hand

May 12, 2002 09:27:00

System.exit(0); There is nothing the user can do to handle this exception. Right?

Post by:Abhinav Anand
, Ranch Hand

May 13, 2002 06:47:00

Hi, When the unbind method throws an error I simply log an error message in the console and exit the program by executing... System.exit(1); Any suggetions are welcome