2

I'm facing a strange problem. I have created an OSGi bundle for JmDNS 3.1.6 and have successfully used that in Equinox to publish a service for almost two years now. I have recently migrated to Apache Felix. Unfortunately, the same JmDNS bundle, even though it installed without a problem, doesn't seem to export any services anymore. Here's the code I use to publish the service

private void publishBonjourService() {
    try {

        if (this.jmdns != null) {
            logger.config("deregistering existing service, first");
            jmdns.unregisterService(this.serviceInfo);  
        } else {
            logger.config("publishing service: \"" 
                    + bonjourServiceName + "\"");
            jmdns = JmDNS.create(InetAddress.getLocalHost(), 
                    bonjourServiceName);                
        }

        HashMap<String, Object> props = new HashMap<String, Object>();
        props.put("path", "index.html");

        this.serviceInfo = ServiceInfo.create(
                "_http._tcp.local.", 
                bonjourServiceName, 
                HttpService.WEB_SERVICE_PORT, 
                0, 
                0, 
                props);         
        jmdns.registerService(this.serviceInfo);
        logger.config("service " + bonjourServiceName 
                + " published via JmDNS");
    } catch (Exception e) {
        logger.warning("Caught exception when trying to register "
                + "Bonjour service! (" + e.getMessage() + ")");
    }
}

Using Bonjour Browser on my Mac I can see that no service is published, even though the code above executes without any exception. Here's what Felix has to say about my installed bundles.

   ID|State      |Level|Name
    0|Active     |    0|System Bundle (3.2.2)
    1|Active     |    4|JmDNSTest (0.0.1)
    9|Active     |    2|Noelios Restlet Engine (1.1.0)
   10|Active     |    2|JSON (2.0.0)
   11|Active     |    2|Restlet API (1.1.0)
   12|Active     |    2|Restlet Extension - JSON (1.1.0)
   13|Active     |    2|org.rxtx (2.2.0)
   14|Active     |    2|JmDNS (3.2.2)
   15|Active     |    1|Apache Felix Bundle Repository (1.6.2)
   16|Active     |    1|Apache Felix Configuration Admin Service (1.2.8)
   17|Active     |    1|Apache Felix EventAdmin (1.2.12)
   18|Active     |    1|Apache Felix Declarative Services (1.6.0)
   19|Active     |    1|Apache Felix Gogo Command (0.8.0)
   20|Active     |    1|Apache Felix Gogo Runtime (0.8.0)
   21|Active     |    1|Apache Felix Gogo Shell (0.8.0)

I've searched for a tutorial about how to use JmDNS within OSGi in general and haven't found anything on the net. I'd appreciate it if anyone could give me a hint as to what the problem might be or point me in the direction of a helpful resource.

Thanks in advance for your help and cheers, Georg

Edit: I've now migrated to JmDNS 3.2.2 found in the maven repository and use that in Felix. I'm no longer using the classes in javax.jmdns.impl directly as shown in my previous post (i've updated the source code listing above). However, still no luck. JmDNS seems to work somehow. I've set the logging level for JmDNS to finest - here's an excerpt from what I get.

        04.08.2011 09:14:29 javax.jmdns.impl.JmDNSImpl <init>
    FEINER: JmDNS instance created
    04.08.2011 09:14:29 javax.jmdns.impl.JmDNSImpl registerServiceType
    FEIN: fusion.http.registering service type: _http._tcp.local. as: _http._tcp.local.
    04.08.2011 09:14:30 javax.jmdns.impl.tasks.state.DNSStateTask run
    FEINER: Prober(fusion.http).run() JmDNS probing fusion.http
    04.08.2011 09:14:30 javax.jmdns.impl.tasks.state.DNSStateTask run
    FEINER: Prober(fusion.http).run() JmDNS probing #probing 1
    04.08.2011 09:14:30 javax.jmdns.impl.JmDNSImpl send
    AM FEINSTEN: send(fusion.http) JmDNS out:dns[query,224.0.0.251:5353, length=48, id=0x0, questions=1, authorities=1
    questions:
        [AllRecords@685450225 type: TYPE_ANY index 255, class: CLASS_IN index 1, name: si-zmac8.local.]
    authorities:
        [IPv4Address@1259649067 type: TYPE_A index 1, class: CLASS_IN index 1, name: si-zmac8.local. ttl: '3599/3600' address: '192.168.178.75']]
        question:      [AllRecords@685450225 type: TYPE_ANY index 255, class: CLASS_IN index 1, name: si-zmac8.local.]
        authoritative: [IPv4Address@1259649067 type: TYPE_A index 1, class: CLASS_IN index 1, name: si-zmac8.local. ttl: '3599/3600' address: '192.168.178.75']
       0: 0000000000010000 000100000873692d 7a6d616338056c6f 63616c0000ff0001     ........ .....si- zmac8.lo cal.....
      20: c00c000100010000 0e100004c0a8b24b                                       ........ .......K

    04.08.2011 09:14:30 javax.jmdns.impl.SocketListener run
    AM FEINSTEN: SocketListener(fusion.http).run() JmDNS in:dns[query,192.168.178.75:5353, length=48, id=0x0, questions=1, authorities=1
    questions:
        [AllRecords@264587158 type: TYPE_ANY index 255, class: CLASS_IN index 1, name: si-zmac8.local.]
    authorities:
        [IPv4Address@1147629119 type: TYPE_A index 1, class: CLASS_IN index 1, name: si-zmac8.local. ttl: '3600/3600' address: '192.168.178.75']]
        question:      [AllRecords@264587158 type: TYPE_ANY index 255, class: CLASS_IN index 1, name: si-zmac8.local.]
        authoritative: [IPv4Address@1147629119 type: TYPE_A index 1, class: CLASS_IN index 1, name: si-zmac8.local. ttl: '3600/3600' address: '192.168.178.75']
       0: 0000000000010000 000100000873692d 7a6d616338056c6f 63616c0000ff0001     ........ .....si- zmac8.lo cal.....
      20: c00c000100010000 0e100004c0a8b24b                                       ........ .......K

    04.08.2011 09:14:30 javax.jmdns.impl.JmDNSImpl handleQuery
    FEIN: fusion.http.handle query: dns[query,192.168.178.75:5353, length=48, id=0x0, questions=1, authorities=1
    questions:
        [AllRecords@264587158 type: TYPE_ANY index 255, class: CLASS_IN index 1, name: si-zmac8.local.]
    authorities:
        [IPv4Address@1147629119 type: TYPE_A index 1, class: CLASS_IN index 1, name: si-zmac8.local. ttl: '3600/3600' address: '192.168.178.75']]
    04.08.2011 09:14:30 javax.jmdns.impl.tasks.Responder start
    AM FEINSTEN: Responder(fusion.http)start() question=[AllRecords@264587158 type: TYPE_ANY index 255, class: CLASS_IN index 1, name: si-zmac8.local.]
    04.08.2011 09:14:30 javax.jmdns.impl.tasks.Responder start
    AM FEINSTEN: Responder(fusion.http)start() Responder chosen delay=0
    04.08.2011 09:14:30 javax.jmdns.impl.DNSIncoming readAnswer
    FEINER: DNSIncoming() unknown type:TYPE_NSEC index 47
    04.08.2011 09:14:30 javax.jmdns.impl.SocketListener run
    AM FEINSTEN: SocketListener(fusion.http).run() JmDNS in:dns[response,192.168.178.75:5353, length=90, id=0x0, flags=0x8400:r:aa, answers=2
    answers:
        [IPv6Address@1779280140 type: TYPE_AAAA index 28, class: CLASS_IN index 1-unique, name: SI-ZMAC8.local. ttl: '120/120' address: 'fe80:0:0:0:e6ce:8fff:fe26:9ec6%0']
        [IPv4Address@651528505 type: TYPE_A index 1, class: CLASS_IN index 1-unique, name: SI-ZMAC8.local. ttl: '120/120' address: '192.168.178.75']]
        answer:        [IPv6Address@1779280140 type: TYPE_AAAA index 28, class: CLASS_IN index 1-unique, name: SI-ZMAC8.local. ttl: '120/120' address: 'fe80:0:0:0:e6ce:8fff:fe26:9ec6%0']
        answer:        [IPv4Address@651528505 type: TYPE_A index 1, class: CLASS_IN index 1-unique, name: SI-ZMAC8.local. ttl: '120/120' address: '192.168.178.75']
       0: 0000840000000002 000000010853492d 5a4d414338056c6f 63616c00001c8001     ........ .....SI- ZMAC8.lo cal.....
      20: 000000780010fe80 000000000000e6ce 8ffffe269ec6c00c 0001800100000078     ...x.... ........ ...&.... .......x
      40: 0004c0a8b24bc00c 002f800100000078 0008c00c00044000 0008                 .....K.. ./.....x ......@. ..

    04.08.2011 09:14:30 javax.jmdns.impl.JmDNSImpl handleRecord
    FEIN: fusion.http handle response: [IPv6Address@1779280140 type: TYPE_AAAA index 28, class: CLASS_IN index 1-unique, name: SI-ZMAC8.local. ttl: '119/120' address: 'fe80:0:0:0:e6ce:8fff:fe26:9ec6%0']
    04.08.2011 09:14:30 javax.jmdns.impl.JmDNSImpl handleRecord
    FEIN: fusion.http handle response cached record: null
    04.08.2011 09:14:30 javax.jmdns.impl.JmDNSImpl handleRecord
    FEIN: fusion.http handle response: [IPv4Address@651528505 type: TYPE_A index 1, class: CLASS_IN index 1-unique, name: SI-ZMAC8.local. ttl: '119/120' address: '192.168.178.75']
    04.08.2011 09:14:30 javax.jmdns.impl.JmDNSImpl handleRecord
    FEIN: fusion.http handle response cached record: null
    04.08.2011 09:14:31 javax.jmdns.impl.tasks.state.DNSStateTask run
    FEINER: Prober(fusion.http).run() JmDNS probing fusion.http
    04.08.2011 09:14:31 javax.jmdns.impl.tasks.state.DNSStateTask run
    FEINER: Prober(fusion.http).run() JmDNS probing #probing 2
    04.08.2011 09:14:31 javax.jmdns.impl.JmDNSImpl send
    AM FEINSTEN: send(fusion.http) JmDNS out:dns[query,224.0.0.251:5353, length=48, id=0x0, questions=1, authorities=1
    questions:
        [AllRecords@1653858092 type: TYPE_ANY index 255, class: CLASS_IN index 1, name: si-zmac8.local.]
    authorities:
        [IPv4Address@1512109123 type: TYPE_A index 1, class: CLASS_IN index 1, name: si-zmac8.local. ttl: '3600/3600' address: '192.168.178.75']]
        question:      [AllRecords@1653858092 type: TYPE_ANY index 255, class: CLASS_IN index 1, name: si-zmac8.local.]
        authoritative: [IPv4Address@1512109123 type: TYPE_A index 1, class: CLASS_IN index 1, name: si-zmac8.local. ttl: '3600/3600' address: '192.168.178.75']
       0: 0000000000010000 000100000873692d 7a6d616338056c6f 63616c0000ff0001     ........ .....si- zmac8.lo cal.....
      20: c00c000100010000 0e100004c0a8b24b                                       ........ .......K

    04.08.2011 09:14:31 javax.jmdns.impl.SocketListener run
    AM FEINSTEN: SocketListener(fusion.http).run() JmDNS in:dns[query,192.168.178.75:5353, length=48, id=0x0, questions=1, authorities=1
    questions:
        [AllRecords@696551663 type: TYPE_ANY index 255, class: CLASS_IN index 1, name: si-zmac8.local.]
    authorities:
        [IPv4Address@1010440244 type: TYPE_A index 1, class: CLASS_IN index 1, name: si-zmac8.local. ttl: '3600/3600' address: '192.168.178.75']]
        question:      [AllRecords@696551663 type: TYPE_ANY index 255, class: CLASS_IN index 1, name: si-zmac8.local.]
        authoritative: [IPv4Address@1010440244 type: TYPE_A index 1, class: CLASS_IN index 1, name: si-zmac8.local. ttl: '3600/3600' address: '192.168.178.75']
       0: 0000000000010000 000100000873692d 7a6d616338056c6f 63616c0000ff0001     ........ .....si- zmac8.lo cal.....
      20: c00c000100010000 0e100004c0a8b24b                                       ........ .......K

Edit: Here's an excerpt of the output of jstack for my Felix instance (I've excluded all threads which are listed as runnable or timed waiting):

Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.1-b02-383 mixed mode):

"Thread-40" daemon prio=5 tid=7fa7be0ac800 nid=0x10ad9a000 in Object.wait() [10ad99000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at EDU.oswego.cs.dl.util.concurrent.CyclicBarrier.doBarrier(Unknown Source)
    - locked <7f36e5728> (a org.apache.felix.eventadmin.impl.tasks.Rendezvous)
    at EDU.oswego.cs.dl.util.concurrent.CyclicBarrier.barrier(Unknown Source)
    at org.apache.felix.eventadmin.impl.tasks.Rendezvous.waitForRendezvous(Rendezvous.java:55)
    at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:272)
    at org.apache.felix.eventadmin.impl.EventAdminImpl.handleEvent(EventAdminImpl.java:165)
    at org.apache.felix.eventadmin.impl.EventAdminImpl.sendEvent(EventAdminImpl.java:108)
    at org.apache.felix.eventadmin.impl.security.EventAdminSecurityDecorator.sendEvent(EventAdminSecurityDecorator.java:94)
    at com.xxx.yyy.commons.OSGiEventHub.sendEvent(OSGiEventHub.java:200)
    at com.xxx.yyy.can.connections.impl.CANConnectionLog.receiveCANMessages(CANConnectionLog.java:288)
    at com.xxx.yyy.can.connections.impl.CANConnectionMessageAgent.run(CANConnectionMessageAgent.java:70)
    - locked <7f45fe3c8> (a com.bosch.fusion.can.connections.impl.CANConnectionMessageAgent)

"Thread-35" daemon prio=5 tid=7fa7bfa67000 nid=0x10a88b000 waiting on condition [10a88a000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f45ae1b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:680)

"Thread-34" daemon prio=5 tid=7fa7be012800 nid=0x10a788000 waiting on condition [10a787000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f45ae1b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:680)

"Thread-33" daemon prio=5 tid=7fa7c00dd800 nid=0x10a685000 waiting on condition [10a684000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f45ae1b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:680)

"Thread-32" daemon prio=5 tid=7fa7c3001800 nid=0x10a582000 waiting on condition [10a581000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f45ae1b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:680)

"Thread-31" daemon prio=5 tid=7fa7c1801800 nid=0x10a47f000 waiting on condition [10a47e000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f45ae1b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:680)

"Thread-30" daemon prio=5 tid=7fa7c3001000 nid=0x10a37c000 waiting on condition [10a37b000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f45ae1b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:680)

"Thread-29" daemon prio=5 tid=7fa7be016800 nid=0x10bcc7000 waiting on condition [10bcc6000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f45ae1b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:680)

"Thread-28" daemon prio=5 tid=7fa7bc82b000 nid=0x10bbc4000 waiting on condition [10bbc3000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f45ae1b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:680)

"Thread-27" daemon prio=5 tid=7fa7bfa2f000 nid=0x10bac1000 waiting on condition [10bac0000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f45ae1b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:680)

"Thread-26" daemon prio=5 tid=7fa7be016000 nid=0x108ff2000 waiting on condition [108ff1000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f45ae1b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:680)


"SCR Component Actor" daemon prio=5 tid=7fa7bc87f800 nid=0x109fa2000 in Object.wait() [109fa1000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f46fb9f0> (a java.util.LinkedList)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:76)
    - locked <7f46fb9f0> (a java.util.LinkedList)
    at java.lang.Thread.run(Thread.java:680)

"CM Event Dispatcher" daemon prio=5 tid=7fa7c0116800 nid=0x109e9e000 in Object.wait() [109e9d000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f44e1090> (a java.util.LinkedList)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:76)
    - locked <7f44e1090> (a java.util.LinkedList)
    at java.lang.Thread.run(Thread.java:680)

"CM Configuration Updater" daemon prio=5 tid=7fa7c0116000 nid=0x109d9b000 in Object.wait() [109d9a000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f44e53a0> (a java.util.LinkedList)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:76)
    - locked <7f44e53a0> (a java.util.LinkedList)
    at java.lang.Thread.run(Thread.java:680)

"FelixPackageAdmin" daemon prio=5 tid=7fa7bc876000 nid=0x109b07000 in Object.wait() [109b06000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f44e5c20> (a org.apache.felix.framework.PackageAdminImpl)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.felix.framework.PackageAdminImpl.run(PackageAdminImpl.java:350)
    - locked <7f44e5c20> (a org.apache.felix.framework.PackageAdminImpl)
    at java.lang.Thread.run(Thread.java:680)

"FelixStartLevel" daemon prio=5 tid=7fa7bc873000 nid=0x109a04000 in Object.wait() [109a03000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f44e22d8> (a java.util.ArrayList)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:244)
    - locked <7f44e22d8> (a java.util.ArrayList)
    at java.lang.Thread.run(Thread.java:680)

"FelixDispatchQueue" prio=5 tid=7fa7bfa27000 nid=0x1098e5000 in Object.wait() [1098e4000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f44e6538> (a java.util.ArrayList)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.felix.framework.util.EventDispatcher.run(EventDispatcher.java:924)
    - locked <7f44e6538> (a java.util.ArrayList)
    at org.apache.felix.framework.util.EventDispatcher.access$000(EventDispatcher.java:54)
    at org.apache.felix.framework.util.EventDispatcher$1.run(EventDispatcher.java:106)
    at java.lang.Thread.run(Thread.java:680)

"Finalizer" daemon prio=8 tid=7fa7c0000000 nid=0x108e34000 in Object.wait() [108e33000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f44e6520> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
    - locked <7f44e6520> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=7fa7bf93e000 nid=0x108d31000 in Object.wait() [108d30000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
    - locked <7f44e10a8> (a java.lang.ref.Reference$Lock)

"main" prio=5 tid=7fa7bf800800 nid=0x100fb6000 in Object.wait() [100fb5000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f45a6180> (a org.apache.felix.framework.util.ThreadGate)
    at org.apache.felix.framework.util.ThreadGate.await(ThreadGate.java:79)
    - locked <7f45a6180> (a org.apache.felix.framework.util.ThreadGate)
    at org.apache.felix.framework.Felix.waitForStop(Felix.java:922)
    at org.apache.felix.main.Main.main(Main.java:295)

"VM Thread" prio=9 tid=7fa7bf939800 nid=0x108c2e000 runnable 
BumbleGee
  • 2,031
  • 3
  • 18
  • 18

2 Answers2

1

How are you detecting whether the service is published or not? Are you checking from another bundle or are you checking from the Gogo shell? If the former, maybe you are seeing some class space incompatibility, which filters the service. If the latter, then I'm not sure. If you haven't done so, type "inspect s c 14" in Gogo to check the service capabilities of bundle 14 to see if it provides any services.

Perhaps I am misunderstanding, are you talking about DNS services or OSGi services? If DNS, then disregard my comments.

  • I'm using the BonjourBrowser app on my mac. That has proven reliable in the past. And I was in fact talking about mDNS services, not OSGi services but I appreciate your support anyway. – BumbleGee Aug 04 '11 at 16:33
  • Why does the system bundle show as STARTING and not ACTIVE? It is like framework launching did not complete properly... – BJ Hargrave Aug 04 '11 at 16:37
  • BJ is right. That likely means some bundle is causing the framework start to hang...or some other odd bug...although all bundles show ACTIVE. Try to do a jstack on the process and see if you can determine where it is stuck. – Richard S. Hall Aug 04 '11 at 17:14
  • I checked again, and the system bundle is now ACTIVE, too. Executed jstack nonetheless but couldn't determine if there was anything suspicious which I could relate to JmDNS. I'll append the output of jstack to the original post hoping that you might see something I don't. – BumbleGee Aug 04 '11 at 18:24
  • Looking at the thread dumps, it does look like all Felix-related threads are in their normal wait states, so if the system bundle says it's ACTIVE now, then that makes sense given that the thread dumps look normal. The only thread dump that looks somewhat suspicious to me is the first one, since it holds a lock and it waiting on another lock. – Richard S. Hall Aug 04 '11 at 19:16
  • I noticed that, too. It seems as if my synchronization on one of my event handlers is off. I'll see if I can find the root cause and fix this. Thanks for pointing that out, Richard. – BumbleGee Aug 04 '11 at 21:01
  • I checked the threads in my profiler. It turned out that there is no permanently blocked thread. I used synchronous event delivery via the EventAdmin in a rather high frequency and it occasionally blocked, but only for very short amounts of time. So I presume that's not the problem after all. Any other ideas? – BumbleGee Aug 10 '11 at 22:37
  • Not really. Maybe you're missing some other issue. Perhaps try to set the Felix framework log level to 4 in the conf/config.properties files to see if there are any issues being reported. If all else fails, you can zip a simple example up and email it to me and tell me what I need to do to get it going and what I should see in case of success. – Richard S. Hall Aug 11 '11 at 17:29
  • Hi Richard. Thanks for your offer - I'll send you the bundle I'm using today. I've spent more time on trying to isolate the problem. I've created a dedicated bundle which does nothing else than publishing the JmDNS server and use standard configurations of both Equinox and Felix. Again, the service is published on Equinox but not on Felix. I do get a lot of status messages from the JmDNS bundle in Felix, though. It appears to be working just fine just that not service is published. If you like, I can also send the complete Felix OSGi container so that you can reproduce the error. – BumbleGee Aug 24 '11 at 05:24
  • @Richard: Is there a safe way to exchange contact data via Stackoverflow? I haven't found any. – BumbleGee Aug 24 '11 at 05:30
  • If you just head over to one the Apache Felix mailing lists, I'm sure you can figure out my email address. :-) – Richard S. Hall Aug 30 '11 at 13:44
  • Thanks Richard - I found it. The bundle is on it's way. – BumbleGee Sep 01 '11 at 18:14
1

Are you sure of the setup? The most common reason for this type of issues are: Badly configured hostname and firewall.

  • The firewall is the easiest to diagnose, check that port 5353/udp is open.
  • The hostname issue is most common on Linux and means that you are listening on another subnet than the one you are publishing. You can either fix the hostname of specify an IP address when creating the JmDNS instance.
  • Hi Pierre. Thanks for answering. The problem occurs even when I'm running the server and the Bonjour client locally on one machine. So I guess the firewall is not the problem. Furthermore, JmDNS works fine on the same machine when I run it in Equinox. – BumbleGee Aug 04 '11 at 16:32