Hi,
I'm working on my very first jini application and I want to develop a
"fat" service (where the work is done on the server and the client
uses a proxy).
Hence, I want to setup a nonactivatable jini service (the
implementation must be Remote and must be able to create a proxy) as
described in Jan Newmarch's book in chapter 21 using the
ServiceDescription interface.
These are the steps that I followed:
1) Start Jini HttpServer:
D:\jini\apache-river-2.2.0\lib>java -jar tools.jar -port 8080 -dir
D:\jini\apache-river-2.2.0\lib-dl
and I have obtained the following message:
Jan 16, 2012 10:11:28 PM com.sun.jini.tool.ClassServer run
INFO: ClassServer started [[D:\jini\apache-river-2.2.0\lib-dl\],
port 8080]
2) Start Reggie service using the following instruction (I'm using
reggie because I want to register my service with the reggie lookup
service):
D:\>java -Djava.security.policy=D:\policy.all -jar
D:\jini\apache-river-2.2.0\lib\start.jar
D:\start-transient-reggie.config
and I have obtained the following message:
Jan 16, 2012 10:23:12 PM com.sun.jini.reggie.RegistrarImpl init
INFO: started Reggie: c704a7fa-0540-46a4-93b1-a321bc8c50a8, [],
ConstrainableLookupLocator[[jini://pc-nume/], [null]]
(2.1)Where the start-transient-reggie.config looks as follows:
import com.sun.jini.start.ServiceDescriptor;
import com.sun.jini.start.NonActivatableServiceDescriptor;
import com.sun.jini.config.ConfigUtil;
com.sun.jini.start {
private static codebase = ConfigUtil.concat(new Object[] {
"http://",
"localhost",
":8080/reggie-dl.jar"+"
http://","localhost",":8080/jsk-dl.jar"
}
);
private static policy = "D:\\policy.all";
private static classpath =
"D:\\jini\\apache-river-2.2.0\\lib\\reggie.jar";
private static config = "D:\\transient-reggie.config";
static serviceDescriptors = new ServiceDescriptor[] {new
NonActivatableServiceDescriptor(
codebase, policy, classpath,
"com.sun.jini.reggie.TransientRegistrarImpl",new String[] { config })
};
}
(2.2)transient-reggie.config
com.sun.jini.reggie {
initialMemberGroups = new String[] {} }
3) Afterwards I have developed the service and I have created the jar
"ServiceDescription-dl.jar", which I have put at
D:\jini\apache-river-2.2.0\lib-dl\classes where the http server is
started and which contains the classes needed by the client.
The thing is that if reggie is started then I get the following
error message:
java.net.BindException: Address already in use: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at
net.jini.discovery.LookupDiscovery$AnnouncementListener.<init>(LookupDiscovery.java:1030)
at
net.jini.discovery.LookupDiscovery$7.run(LookupDiscovery.java:3091)
at java.security.AccessController.doPrivileged(Native Method)
at net.jini.security.Security$5.run(Security.java:543)
at java.security.AccessController.doPrivileged(Native Method)
at net.jini.security.Security.doPrivileged(Security.java:540)
at
net.jini.discovery.LookupDiscovery.beginDiscovery(LookupDiscovery.java:3089)
at
net.jini.discovery.LookupDiscovery.<init>(LookupDiscovery.java:1946)
at
net.jini.discovery.LookupDiscoveryManager.beginDiscovery(LookupDiscoveryManager.java:1549)
at
net.jini.discovery.LookupDiscoveryManager.<init>(LookupDiscoveryManager.java:902)
at
starter.ServiceDescription.advertiseService(ServiceDescription.java:160)
at starter.ServiceDescription.<init>(ServiceDescription.java:76)
at starter.ServiceDescription.main(ServiceDescription.java:36)
If reggie is not started, then I get no error and the service
works.
Otherwise, if I try to start reggie after my service is started I
get a similar error.
Jan 18, 2012 6:48:13 PM com.sun.jini.reggie.RegistrarImpl <init>
SEVERE: Reggie initialization failed
java.net.BindException: Address already in use: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at
net.jini.discovery.LookupDiscovery$AnnouncementListener.<init>(Lookup
Discovery.java:1030)
at
net.jini.discovery.LookupDiscovery$7.run(LookupDiscovery.java:3091)
at java.security.AccessController.doPrivileged(Native Method)
at net.jini.security.Security$5.run(Security.java:543)
at java.security.AccessController.doPrivileged(Native Method)
at net.jini.security.Security.doPrivileged(Security.java:540)
at
net.jini.discovery.LookupDiscovery.beginDiscovery(LookupDiscovery.jav
a:3089)
at
net.jini.discovery.LookupDiscovery.<init>(LookupDiscovery.java:1946)
at
net.jini.discovery.LookupDiscoveryManager.beginDiscovery(LookupDiscov
eryManager.java:1549)
at
net.jini.discovery.LookupDiscoveryManager.<init>(LookupDiscoveryManag
er.java:966)
at
com.sun.jini.reggie.RegistrarImpl.init(RegistrarImpl.java:4557)
at
com.sun.jini.reggie.RegistrarImpl.access$000(RegistrarImpl.java:143)
at
com.sun.jini.reggie.RegistrarImpl$1.run(RegistrarImpl.java:448)
at
com.sun.jini.reggie.RegistrarImpl.loginAndRun(RegistrarImpl.java:461)
at
com.sun.jini.reggie.RegistrarImpl.<init>(RegistrarImpl.java:396)
at
com.sun.jini.reggie.TransientRegistrarImpl.<init>(TransientRegistrarI
mpl.java:39)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou
rce)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at
com.sun.jini.start.NonActivatableServiceDescriptor.create(NonActivata
bleServiceDescriptor.java:674)
at
com.sun.jini.start.ServiceStarter.create(ServiceStarter.java:287)
at
com.sun.jini.start.ServiceStarter.processServiceDescriptors(ServiceSt
arter.java:445)
at
com.sun.jini.start.ServiceStarter.main(ServiceStarter.java:476)
Jan 18, 2012 6:48:13 PM com.sun.jini.start.ServiceStarter
checkResultFailures
WARNING: Exception creating service.
java.lang.reflect.InvocationTargetException
at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou
rce)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at
com.sun.jini.start.NonActivatableServiceDescriptor.create(NonActivata
bleServiceDescriptor.java:674)
at
com.sun.jini.start.ServiceStarter.create(ServiceStarter.java:287)
at
com.sun.jini.start.ServiceStarter.processServiceDescriptors(ServiceSt
arter.java:445)
at
com.sun.jini.start.ServiceStarter.main(ServiceStarter.java:476)
Caused by: java.net.BindException: Address already in use: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at
net.jini.discovery.LookupDiscovery$AnnouncementListener.<init>(Lookup
Discovery.java:1030)
at
net.jini.discovery.LookupDiscovery$7.run(LookupDiscovery.java:3091)
at java.security.AccessController.doPrivileged(Native Method)
at net.jini.security.Security$5.run(Security.java:543)
at java.security.AccessController.doPrivileged(Native Method)
at net.jini.security.Security.doPrivileged(Security.java:540)
at
net.jini.discovery.LookupDiscovery.beginDiscovery(LookupDiscovery.jav
a:3089)
at
net.jini.discovery.LookupDiscovery.<init>(LookupDiscovery.java:1946)
at
net.jini.discovery.LookupDiscoveryManager.beginDiscovery(LookupDiscov
eryManager.java:1549)
at
net.jini.discovery.LookupDiscoveryManager.<init>(LookupDiscoveryManag
er.java:966)
at
com.sun.jini.reggie.RegistrarImpl.init(RegistrarImpl.java:4557)
at
com.sun.jini.reggie.RegistrarImpl.access$000(RegistrarImpl.java:143)
at
com.sun.jini.reggie.RegistrarImpl$1.run(RegistrarImpl.java:448)
at
com.sun.jini.reggie.RegistrarImpl.loginAndRun(RegistrarImpl.java:461)
at
com.sun.jini.reggie.RegistrarImpl.<init>(RegistrarImpl.java:396)
at
com.sun.jini.reggie.TransientRegistrarImpl.<init>(TransientRegistrarI
mpl.java:39)
... 8 more
Jan 18, 2012 6:48:13 PM com.sun.jini.start.ServiceStarter
checkResultFailures
WARNING: Associated service descriptor [0]:
[http://localhost:8080/reggie-dl.jar
http://localhost:8080/jsk-dl.jar, D:\policy.all,
D:\jini\apache-river-2.2.0\lib
\reggie.jar, com.sun.jini.reggie.TransientRegistrarImpl,
[D:\transient-reggie.co
nfig], com.sun.jini.start.NonActivatableServiceDescriptor$1@a470b8,
BasicProxyPr
eparer[]]
Shouldn't both services be able to run on the same server?
What have I done wrong?? I really dont't have any clue, I think I
got the concept wrong somewhere!
Best regards!
Alina