NetBeans 7.0, JUnit и Glassfish Embedded 3.1: не работает - PullRequest
7 голосов
/ 26 июня 2011

Я пытаюсь JUnit протестировать веб-приложение J2EE с NB 7.0, JUnit и встроенным сервером Glassfish на машине Win7Professional.

Я разбил его, чтобы просто протестировать простое простое веб-приложение Hello-World содин Session Bean.

У меня есть glasfish-embedded-static-shell.jar в моем classpath, и я также пытался использовать glassfish-embedded-all-3.1, но он также не работал.

Теперь вот код, который я использую для тестирования компонента:

import javax.ejb.embeddable.EJBContainer;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

public class SimpleBeanTest {

private static EJBContainer container;

public SimpleBeanTest() {
}

@BeforeClass
public static void setUpClass() throws Exception {
    container = javax.ejb.embeddable.EJBContainer.createEJBContainer();
}

@AfterClass
public static void tearDownClass() throws Exception {
    container.close();
}

@Test
public void testCountToThree() throws Exception {
   System.out.println("countToThree");
   SimpleBean instance = (SimpleBean) container.getContext().lookup("java:global/classes/SimpleBean");
   int expResult = 0;
   int result = instance.countToThree();
   assertEquals(expResult, result);

}
}

И вот что из этого получается:

19.06.2011 09:31:56 com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.
19.06.2011 09:31:56 org.glassfish.flashlight.impl.provider.FlashlightProbeProviderFactory processXMLProbeProviders
SCHWERWIEGEND: MNTG0301:Cannot process XML ProbeProvider, xml = META-INF/gfprobe-provider.xml
java.lang.IllegalStateException: Provider already mapped glassfish:javamail:smtp-transport

(StackTrace here)

19.06.2011 09:31:57 org.glassfish.flashlight.impl.provider.FlashlightProbeProviderFactory processXMLProbeProviders
SCHWERWIEGEND: MNTG0301:Cannot process XML ProbeProvider, xml = META-INF/mojarra-jsf-api-probe-provider.xml
java.lang.IllegalStateException: Provider already mapped glassfish:jsf:faces-servlet

(StackTrace here)

19.06.2011 09:31:57 org.glassfish.flashlight.impl.provider.FlashlightProbeProviderFactory processXMLProbeProviders
SCHWERWIEGEND: MNTG0301:Cannot process XML ProbeProvider, xml = jersey-gf-server-probe-provider.xml
java.lang.IllegalStateException: Provider already mapped glassfish:jersey:server-hidden

(StackTrace here)

19.06.2011 09:31:57 org.glassfish.flashlight.impl.provider.FlashlightProbeProviderFactory processXMLProbeProviders
SCHWERWIEGEND: MNTG0301:Cannot process XML ProbeProvider, xml = jersey-gf-statsprovider-probe-provider.xml
java.lang.IllegalStateException: Provider already mapped glassfish:jersey:server

(StackTrace here)

19.06.2011 09:31:57 org.glassfish.ha.store.spi.BackingStoreFactoryRegistry register
INFO: Registered org.glassfish.ha.store.adapter.cache.ShoalBackingStoreProxy for persistence-type = replicated in BackingStoreFactoryRegistry
19.06.2011 09:31:57 org.glassfish.ha.store.spi.BackingStoreFactoryRegistry register
INFO: Registered org.glassfish.ha.store.adapter.cache.ShoalBackingStoreProxy for persistence-type = replicated in BackingStoreFactoryRegistry
19.06.2011 09:31:57 com.sun.enterprise.v3.server.AppServerStartup run
SCHWERWIEGEND: Startdienst konnte nicht gestartet werden: com.sun.enterprise.naming.GlassFishNamingBuilder
19.06.2011 09:31:57 com.sun.enterprise.v3.server.AppServerStartup run
INFO: GlassFish Server Open Source Edition 3.1 (43) Startzeit: Embedded (597ms), Startdienste(929ms), gesamt(1.526ms)
19.06.2011 09:31:57 org.glassfish.admin.mbeanserver.JMXStartupService$JMXConnectorsStarterThread run
INFO: JMXStartupService: JMXConnector system is disabled, skipping.

ОБНОВЛЕНИЕ: Иэто исключение, которое может возникнуть при любом тесте:

No EJBContainer provider available
Provider named org.glassfish.ejb.embedded.EJBContainerProviderImpl threw unexpected exception at create EJBContainer: 
java.lang.RuntimeException
java.lang.RuntimeException: java.lang.IllegalStateException: AMX Booter MBean is already registered: amx-support:type=boot-amx
    at org.glassfish.internal.embedded.Server.<init>(Server.java:290)
    at org.glassfish.internal.embedded.Server.<init>(Server.java:66)
    at org.glassfish.internal.embedded.Server$Builder.build(Server.java:176)

(Stack Trace here)

Caused by: java.lang.IllegalStateException: AMX Booter MBean is already registered: amx-support:type=boot-amx

Я дважды переустанавливал NetBeans, и он тоже не работает.

Ответы [ 2 ]

3 голосов
/ 31 июля 2011

У меня была такая же проблема, и я сделал следующее:

1) Я установил Glassfish 3.1.1 и связал его с моим проектом.Сначала я добавил сервер с помощью Tools - Servers - Add Server ... Затем я щелкнул правой кнопкой мыши по моему проекту EJB и выбрал Properties - Run - Glassfish 3.1.12) В моем EJB pom.xml я использую эту зависимость (убедитесь, что переменная systemPath указывает на правильный файл):

<dependency>
    <groupId>org.glassfish.extras</groupId>
    <artifactId>glassfish-embedded-static-shell</artifactId>
    <version>3.1.1</version>
    <scope>system</scope>
    <systemPath>${glassfish.embedded-static-shell.jar}</systemPath>
</dependency>

3) В моем EJB pom.xml я удален зависимость, которую другие люди сказали, что я должен добавить это, если я получаю ошибки "Поставщик уже сопоставлен ..."

<dependency>
    <groupId>org.glassfish.extras</groupId>
    <artifactId>glassfish-embedded-all</artifactId>
    <version>3.1.1</version>
    <scope>test</scope>
</dependency>

Вот и все!Теперь мои тесты EJB JUnit с JPA 2 работают как шарм!Надеюсь, это поможет!

1 голос
/ 26 июня 2011

Кажется, что сервер запускается нормально (некоторые из этих исключений ожидаются, но я не могу подтвердить, все ли они).

  • Запускаете ли вы тестовые случаи с помощью команды «Выполнить> Тестовый проект»?
  • Отображается ли графический интерфейс JUnit?
  • Установлен ли JUnit? Netbeans 7.0 теперь спрашивает, хотите ли вы загрузить JUnit из-за проблем с лицензированием ...
  • Можете ли вы запустить модульные тесты, которые не нуждаются во встроенном контейнере?

Попробуйте выполнить следующие шаги: http://javadude.wordpress.com/2010/02/22/tutorial-most-simple-test-application-for-embedded-glassfish-netbeans-hudson/ (забудьте о части Гудзона). IDE должна позаботиться о включении зависимостей для вас.

Да, еще одна вещь, поскольку вы используете Windows, вам не помешает попытаться запустить Netbeans от имени администратора (опция правой кнопки мыши) и посмотреть, что произойдет.

Приветствия

Обновление

Может быть, вы попали эта ошибка:

Посмотрите, работает ли запуск контейнера следующим образом:

@BeforeClass
public static void setUpClass() throws Exception {
    Map<String, Object> p = new HashMap<String, Object>();       
    p.put(EJBContainer.APP_NAME, "foo");
    container = EJBContainer.createEJBContainer(p);
}
...