Служба Bonjour публикуется с помощью JmDNS в Equinox, но не в Apache Felix.

Я столкнулся со странной проблемой. Я создал пакет OSGi для JmDNS 3.1.6 и уже почти два года успешно использую его в Equinox для публикации службы. Недавно я перешел на Apache Felix. К сожалению, тот же пакет JmDNS, несмотря на то, что он установился без проблем, похоже, больше не экспортирует никаких сервисов. Вот код, который я использую для публикации службы

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() + ")");
    }
}

Используя браузер Bonjour на моем Mac, я вижу, что ни одна служба не опубликована, хотя приведенный выше код выполняется без каких-либо исключений. Вот что Феликс говорит о моих установленных пакетах.

   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)

Я искал учебник о том, как использовать JmDNS в OSGi в целом, и ничего не нашел в сети. Я был бы признателен, если бы кто-нибудь мог дать мне подсказку относительно того, в чем может быть проблема, или указать мне направление полезного ресурса.

Заранее спасибо за вашу помощь и приветствия, Георг

Изменить: теперь я перешел на JmDNS 3.2.2, найденный в репозитории maven, и использую его в Felix. Я больше не использую классы в javax.jmdns.impl напрямую, как показано в моем предыдущем сообщении (я обновил список исходного кода выше). Однако все равно не повезло. JmDNS вроде как-то работает. Я установил самый высокий уровень ведения журнала для JmDNS — вот выдержка из того, что я получаю.

        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

Изменить: вот отрывок из вывода jstack для моего экземпляра Felix (я исключил все потоки, которые указаны как работающие или ожидающие по времени):

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 

person BumbleGee    schedule 03.08.2011    source источник


Ответы (2)


Вы уверены в установке? Наиболее распространенными причинами этого типа проблем являются: Неправильно настроенное имя хоста и брандмауэр.

  • Брандмауэр диагностировать проще всего, убедитесь, что порт 5353/udp открыт.
  • Проблема с именем хоста наиболее распространена в Linux и означает, что вы прослушиваете другую подсеть, а не ту, которую публикуете. Вы можете либо исправить имя хоста, либо указать IP-адрес при создании экземпляра JmDNS.
person Pierre Frisch    schedule 04.08.2011
comment
Привет Пьер. Спасибо за ответ. Проблема возникает, даже когда я запускаю сервер и клиент Bonjour локально на одном компьютере. Так что думаю проблема не в брандмауэре. Кроме того, JmDNS отлично работает на том же компьютере, когда я запускаю его в Equinox. - person BumbleGee; 04.08.2011

Как вы определяете, опубликована служба или нет? Вы проверяете из другого пакета или из оболочки Gogo? Если первое, возможно, вы видите некоторую несовместимость пространства классов, которая фильтрует службу. Если второе, то я не уверен. Если вы еще этого не сделали, введите «inspect s c 14» в Gogo, чтобы проверить сервисные возможности пакета 14 и узнать, предоставляет ли он какие-либо услуги.

Возможно, я неправильно понимаю, вы говорите о службах DNS или службах OSGi? Если DNS, то не обращайте внимания на мои комментарии.

person Richard S. Hall    schedule 04.08.2011
comment
Я использую приложение BonjourBrowser на своем Mac. Это доказало свою надежность в прошлом. На самом деле я говорил о службах mDNS, а не о службах OSGi, но я все равно ценю вашу поддержку. - person BumbleGee; 04.08.2011
comment
Почему пакет системы отображается как ЗАПУСК, а не как АКТИВНЫЙ? Это похоже на то, что запуск фреймворка не завершился должным образом... - person BJ Hargrave; 04.08.2011
comment
БЖ прав. Вероятно, это означает, что какой-то пакет вызывает зависание фреймворка... или какая-то другая странная ошибка... хотя все пакеты показывают АКТИВНО. Попробуйте выполнить jstack процесса и посмотрите, сможете ли вы определить, где он застрял. - person Richard S. Hall; 04.08.2011
comment
Я проверил еще раз, и системный пакет теперь тоже АКТИВЕН. Тем не менее выполнил jstack, но не смог определить, было ли что-то подозрительное, что я мог бы связать с JmDNS. Я добавлю вывод jstack к исходному сообщению, надеясь, что вы увидите что-то, чего не вижу я. - person BumbleGee; 04.08.2011
comment
Глядя на дампы потоков, кажется, что все потоки, связанные с Felix, находятся в нормальном состоянии ожидания, поэтому, если системный пакет говорит, что он сейчас АКТИВЕН, то это имеет смысл, учитывая, что дампы потоков выглядят нормально. Единственный дамп потока, который выглядит несколько подозрительным для меня, — это первый, так как он содержит блокировку и ожидает другой блокировки. - person Richard S. Hall; 04.08.2011
comment
Я тоже это заметил. Кажется, что моя синхронизация на одном из моих обработчиков событий отключена. Я посмотрю, смогу ли я найти основную причину и исправить это. Спасибо, что указали на это, Ричард. - person BumbleGee; 05.08.2011
comment
Я проверил темы в моем профилировщике. Выяснилось, что не существует постоянно заблокированного потока. Я довольно часто использовал синхронную доставку событий через EventAdmin, и она иногда блокировалась, но только на очень короткие промежутки времени. Так что я предполагаю, что это не проблема в конце концов. Любые другие идеи? - person BumbleGee; 11.08.2011
comment
Не совсем. Возможно, вы упускаете какую-то другую проблему. Возможно, попробуйте установить уровень журнала фреймворка Felix на 4 в файлах conf/config.properties, чтобы увидеть, есть ли сообщения о каких-либо проблемах. Если ничего не помогает, вы можете заархивировать простой пример и отправить его мне по электронной почте, сообщив мне, что мне нужно сделать, чтобы он заработал, и что я должен увидеть в случае успеха. - person Richard S. Hall; 11.08.2011
comment
Привет Ричард. Спасибо за ваше предложение - я отправлю вам пакет, который я использую сегодня. Я потратил больше времени, пытаясь изолировать проблему. Я создал специальный пакет, который не делает ничего, кроме публикации сервера JmDNS и использует стандартные конфигурации как Equinox, так и Felix. Опять же, сервис публикуется на Equinox, но не на Felix. Однако я получаю много сообщений о состоянии от пакета JmDNS в Felix. Похоже, он работает нормально, только сервис не публикуется. Если хотите, я также могу отправить полный контейнер Felix OSGi, чтобы вы могли воспроизвести ошибку. - person BumbleGee; 24.08.2011
comment
@Richard: Есть ли безопасный способ обмена контактными данными через Stackoverflow? Я не нашел ни одного. - person BumbleGee; 24.08.2011
comment
Если вы просто зайдете в один из списков рассылки Apache Felix, я уверен, что вы сможете выяснить мой адрес электронной почты. :-) - person Richard S. Hall; 30.08.2011
comment
Спасибо, Ричард, я нашел это. Посылка уже в пути. - person BumbleGee; 01.09.2011