File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Distributed Java and the fly likes jini Server Getting closed Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Distributed Java
Bookmark "jini Server Getting closed " Watch "jini Server Getting closed " New topic
Author

jini Server Getting closed

chetan raj
Ranch Hand

Joined: Jul 18, 2006
Posts: 34
I have an application say app1 which bind an object to the jini lookup service reggie.My many client interact with the my app1 using the object i have made available at look up service. After some time by app1 is terminating itself.i.e it is getting closed down.I am register my object using the code
ServiceRegistrar registrar.register(serviceItem, Lease.FOREVER);
can you please suggest where i am doing mistaks.
Edward Harned
Ranch Hand

Joined: Sep 19, 2005
Posts: 291

Is this a Jini issue or an application issue?

When your application dies, so dies the lease renewal.

Your application is really an RMI application.

Have you taken the steps necessary to ensure its survival? E.G. having a live reference to the _impl class; making sure the main() does not exit?

Is your application terminating due to an error? Are you catching exceptions/errors and cleaning up?

Writing a remote application is a lot of work.


Ed's latest article: A Java Parallel Calamity http://coopsoft.com/ar/Calamity2Article.html
chetan raj
Ranch Hand

Joined: Jul 18, 2006
Posts: 34
thansk Edward for you notable suggestions.
My problem is that i working on the sample example given at some website
with the necessary batch files to run the code.
My server is not responding after some time. And when i am running the client
program i am getting the fallowing exception
i.e Exception occured in MyClient.main() method:java.lang.NullPointerException
This is that example program
Inteface

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface MyServerInterface extends Remote {
public String sayHello () throws RemoteException;
}

MyServer Program
import net.jini.lookup.entry.Name;
import net.jini.lookup.ServiceIDListener;
import net.jini.core.lookup.ServiceID;
import net.jini.core.lookup.ServiceRegistrar;
import net.jini.core.lookup.ServiceItem;
import net.jini.core.discovery.LookupLocator;
import net.jini.core.entry.Entry;
import net.jini.core.lease.Lease;

import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;

public class MyService extends UnicastRemoteObject implements MyServerInterface {

public MyService () throws RemoteException {
super ();
}


public String sayHello () throws RemoteException { // MyServiceInterface
System.out.println ("server: The method sayHello() in MyService was " + "called");
return ("Hello World from MyService!");
}

public static void main (String[] args) {
MyServerInterface myServer;
LookupLocator lookup;
ServiceRegistrar registrar;
ServiceItem serviceItem;

try {
/* Set the security manager to allow the RMI class loader
to go to the codebase for classes that are not available
locally. */

System.setSecurityManager (new RMISecurityManager ());

/* Create the attributes (an array of entry objects) that describe this
server and use it to register this server with the lookup service.
JoinManager finds and registers with the lookup service */

Entry[] attr = new Entry[1];
attr[0] = new Name("HelloWorldServer");
myServer = new MyService ();
serviceItem = new ServiceItem(null, myServer, attr);

lookup = new LookupLocator ("jini://localhost");
registrar = lookup.getRegistrar();
registrar.register(serviceItem, Lease.FOREVER);

System.out.println("Serrvice Ready ...");

} catch (Exception e)
{
System.out.println("server: MyService.main(): Exception " + e);
}
}
}


MyClient program
import net.jini.core.entry.Entry;
import net.jini.core.discovery.LookupLocator;
import net.jini.core.lookup.ServiceRegistrar;
import net.jini.core.lookup.ServiceTemplate;
import net.jini.lookup.entry.Name;

import java.rmi.RMISecurityManager;

public class MyClient {
public static void main (String[] args) {
Entry[] aeAttributes;
LookupLocator lookup;
ServiceRegistrar registrar;
ServiceTemplate template;
MyServerInterface myServerInterface;

try {
/* Set the security manager to allow the RMI class loader to access
the codebase for classes that are not available locally */

System.setSecurityManager (new RMISecurityManager ());

/* Find the Jini lookup service (reggie) and print its location */

lookup = new LookupLocator ("jini://localhost");

/* Get the lookup service's ServiceRegistrar and perform a search to find
the service that has the name attribute name of "HelloWorldServer".
The lookup service returns an Proxy object to the service */

registrar = lookup.getRegistrar();
aeAttributes = new Entry[1];
aeAttributes[0] = new Name ("HelloWorldServer");
template = new ServiceTemplate (null, null, aeAttributes);
myServerInterface = (MyServerInterface) registrar.lookup (template);

System.out.println ("Calling sayHello()->" + myServerInterface.sayHello () + "<-");
} catch (Exception e) {
System.out.println ("client: MyClient.main() exception: " + e);
}
}
}


Please suggest me where i shall make changes in this code such that the
service object remain availabe for long time, unless some network failure etc.
Also suggest me few site where i am find some reference material and workable examples on jini technology.
Edward Harned
Ranch Hand

Joined: Sep 19, 2005
Posts: 291

This sample code leaves a lot to be desired. But, try putting the following code at the bottom of the main() so that it does not exit.

chetan raj
Ranch Hand

Joined: Jul 18, 2006
Posts: 34
Thanks Edward for you prompt reply.
can you please send me few workable examples which uses net.jini.lookup.JoinManager instead of ServiceItem, Registar etc.

I have the following examples but its join method construtor has some errors

interface
public interface MyServerInterface extends Remote
{
public String sayHello () throws RemoteException;
}

MyServer
import net.jini.core.entry.*;
import net.jini.core.lookup.*;
import net.jini.lookup.entry.*;
import com.sun.jini.lookup.entry.*;
import com.sun.jini.lease.*;
import java.rmi.*;
import net.jini.lookup.ServiceIDListener;
import net.jini.lookup.JoinManager;
import net.jini.lease.LeaseRenewalManager;

import java.rmi.server.*;

/***************************************************************************

MyServer -- The Jini Server Class

***************************************************************************/

public class MyServer extends UnicastRemoteObject
implements MyServerInterface, ServiceIDListener
{

public MyServer () throws RemoteException
{
super ();
}


public void serviceIDNotify (ServiceID sidIn) // ServiceIDListener
{
System.out.println ("server: received ServiceID " + sidIn);
System.out.println ("*-----------------------------------------"
+ "--------------------------------*");
}


public String sayHello () throws RemoteException // MyServiceInterface
{
System.out.println ("server: sayHello() called");
return ("Hello World from MyServer!");
}


public static void main (String[] args)
{
MyServer myServer;
Entry[] aeAttributes;
JoinManager joinmanager;

try
{
System.setSecurityManager (new RMISecurityManager ());
System.out.println ("*-----------------------------------------"
+ "--------------------------------*");

aeAttributes = new Entry[1];
aeAttributes[0] = new Name ("MyServerName");
myServer = new MyServer ();

System.out.println ("server: registering with lookup services...");
joinmanager = new JoinManager
(
myServer,
aeAttributes,
myServer,null,
new LeaseRenewalManager ()
);
System.out.println ("server: registered with lookups");
}

catch (Exception e)
{
System.out.println("main(): Exception " + e);
}
}
}


Client


import net.jini.core.entry.*;
import net.jini.core.lookup.*;
import net.jini.core.discovery.*;
import net.jini.lookup.entry.*;
import java.rmi.*;

/***************************************************************************

MyClient -- The Jini Client Class

***************************************************************************/

class MyClient
{
public static void main (String[] args)
{
Entry[] aeAttributes;
LookupLocator lookup;
ServiceRegistrar registrar;
ServiceTemplate template;
MyServerInterface myServerInterface;

try
{
System.setSecurityManager (new RMISecurityManager ());
System.out.println ("*-----------------------------------------"
+ "--------------------------------*");

lookup = new LookupLocator ("jini://localhost");
registrar = lookup.getRegistrar ();
System.out.println ("client: got proxy1 to Lookup ["
+ registrar.getClass().getName() + "]");

aeAttributes = new Entry[1];
aeAttributes[0] = new Name ("MyServerName");
template = new ServiceTemplate (null, null, aeAttributes);
myServerInterface = (MyServerInterface) registrar.lookup (template);
System.out.println ("client: got proxy2 to MyServer ["
+ myServerInterface.getClass().getName() + "]");

if (myServerInterface instanceof MyServerInterface)
{
System.out.println
(
"client: called proxy2.sayHello() ---->"
+ myServerInterface.sayHello () + "<----"
);
}
System.out.println ("*-----------------------------------------"
+ "--------------------------------*\n");
}

catch (Exception e)
{
System.out.println ("main(): " + e);
}
}
}
Edward Harned
Ranch Hand

Joined: Sep 19, 2005
Posts: 291

I can't send you files on this forum. What I can do is point you to an open source product that contains the code you want.

Tymeac is a general purpose back end server that has a wide range of servers including Jini.

Download the source and use it as you wish.

http://sourceforge.net/projects/tymeacse/
chetan raj
Ranch Hand

Joined: Jul 18, 2006
Posts: 34
Thanks Edward for you suggestions and for the link.
The link which you have send is not much helpful to me.
But can you send me few links where i can find few jini working examples.
and also site where i can get free jini e-books for downloads.
Edward Harned
Ranch Hand

Joined: Sep 19, 2005
Posts: 291

Since you deem the link to pre-written code unuseful, I can only assume you want someone to spoon feed you with code specifically written for your application.

Perhaps you should hire an independent consultant to write the code for you.
Nathan Pruett
Bartender

Joined: Oct 18, 2000
Posts: 4121

chetan,

Have you checked out jini.org or Jan Newmarch's Guide to Jini Technologies, yet?

Edward,

Be nice...


-Nate
Write once, run anywhere, because there's nowhere to hide! - /. A.C.
Edward Harned
Ranch Hand

Joined: Sep 19, 2005
Posts: 291

OK, I'll be nice.
chetan raj
Ranch Hand

Joined: Jul 18, 2006
Posts: 34
hai Nathan,
thanks for the link. I am just a beggining for the jini i was looking for
some very simple examples of jini to start with.
ok thanks to you and also to Edward.
 
 
subject: jini Server Getting closed