Pax Exam 2.6.0 + Karaf 2.3.0 - Ошибка отладки в Eclipse - NotBoundException

Я использую Pax Exam 2.6.0 для запуска интеграционных тестов на Apache Karaf 2.3.0 через контейнер экзамена Karaf.

Все работает как положено, за исключением локальной (не удаленной) отладки интеграционного теста из Eclipse. Я нашел предлагаемое решение здесь: http://team.ops4j.org/wiki/display/paxexam/FAQ#FAQ-ПочемуJavadebuggernotstopatabreakpointIsetinmyPaxExamJUnittest%3F

При работе с контейнером Pax Runner вы имеете дело с двумя процессами Java VM, один из которых запускает тестовый драйвер, а другой — платформу OSGi. Поток выполнения вашего класса JUnit фактически разделен между двумя виртуальными машинами, а тела ваших тестовых методов выполняются на удаленной виртуальной машине.

Поэтому вам нужно включить удаленную отладку для созданной виртуальной машины с помощью vmOption() в вашем методе @Configuration, например.

vmOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"), systemTimeout(0)

К сожалению, это не работает, когда я пытаюсь запустить тест JUnit из Eclipse в режиме отладки, я продолжаю получать эти ошибки для каждого @Test - аннотированного метода, который работает:

java.rmi.NotBoundException: c59ea59a-f771-47fe-aac8-aa7f5c72b17d
    at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:136)
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:409)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at org.ops4j.pax.exam.rbc.client.intern.RemoteBundleContextClientImpl.getRemoteBundleContext(RemoteBundleContextClientImpl.java:263)
    at org.ops4j.pax.exam.rbc.client.intern.RemoteBundleContextClientImpl.waitForState(RemoteBundleContextClientImpl.java:234)
    at org.apache.karaf.tooling.exam.container.internal.KarafTestContainer.waitForState(KarafTestContainer.java:599)
    at org.apache.karaf.tooling.exam.container.internal.KarafTestContainer.start(KarafTestContainer.java:183)
    at org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactor.invoke(AllConfinedStagedReactor.java:67)
    at org.ops4j.pax.exam.junit.JUnit4TestRunner$2.evaluate(JUnit4TestRunner.java:285)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.ops4j.pax.exam.junit.JUnit4TestRunner.run(JUnit4TestRunner.java:94)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Единственное, что отображается в представлении консоли, — это следующая строка:

Прослушивание транспорта dt_socket по адресу: 5005

Детали моей системы следующие:

  • ОС: Windows 7 64-битная
  • Версия Java: Oracle Java 7, обновление 9, 64-разрядная версия
  • Версия экзамена Pax: 2.6.0
  • IDE: Затмение 4.2

Эта проблема возникает каждый раз.

В заключение: моя цель - иметь возможность запускать интеграционные тесты jUnit непосредственно из Eclipse IDE в режиме отладки. У кого-нибудь есть предложение?

Спасибо!


person Matei Dragu    schedule 30.01.2013    source источник


Ответы (1)


Добавьте это в ваш Option [] cfg.

KarafDistributionOption.debugConfiguration("8889", правда)

person Thomas    schedule 18.02.2013