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.****NonActivatableServiceDescripto****r;
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
NonActivatableServiceDescripto****r(
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.****DelegatingConstructorAccessorI**
**mpl.newInstance(Unknown
Sou
rce)
at java.lang.reflect.Constructor.****newInstance(Unknown
Source)
at com.sun.jini.start.****NonActivatableServiceDescripto****
r.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.****DelegatingConstructorAccessorI**
**mpl.newInstance(Unknown
Sou
rce)
at java.lang.reflect.Constructor.****newInstance(Unknown
Source)
at com.sun.jini.start.****NonActivatableServiceDescripto****
r.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/reggie-**dl.jar<http://localhost:8080/reggie-dl.jar>
http://localhost:8080/jsk-dl.****jar<http://localhost:8080/jsk-dl.**jar><
http://localhost:8080/jsk-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.****NonActivatableServiceDescripto**
**r$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