Glassfish встроенный + плагин maven cobertura - PullRequest
1 голос
/ 28 февраля 2012

Я использовал встроенную стеклянную рыбку следующим образом:

public static void createContainer() throws IOException {        
    File target = new File("target/classes");       
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put(EJBContainer.MODULES, target);
    properties.put("org.glassfish.ejb.embedded.glassfish.installation.root",
            "/opt/glassfish3/glassfish");
    container = EJBContainer.createEJBContainer(properties);
    context = container.getContext();
}

@AfterSuite(alwaysRun = true)
public static void closeContainer() throws NamingException {
    // close container
}

// I use this method to lookup 
public static <T> T lookupBy(Class<T> type) {
    try {
        return (T) context.lookup("java:global/classes/" + type.getSimpleName());
    } catch (NamingException ex) {
        throw new RuntimeException(ex);
    }
}

Проблема в том, что встроенная стеклянная рыба использует классы в "target / classes", а maven cobertura использует "target / генерируемые классы / cobertura"».Затем, в первый раз, когда тесты запускаются, все в порядке, но во второй раз, когда запускается cobertura, я получаю исключение java.lang.RuntimeException: javax.naming.NamingException (вероятно, потому что cobertura работает над "target / генерируемой-классами / cobertura""пока Glassfish работает над" целью / классами ").

Есть идеи для решения этой проблемы ???

1 Ответ

0 голосов
/ 16 марта 2012

Я экспериментировал с той же проблемой с кобертурой и вкрапленной стеклянной рыбкой. Вот мои настройки, чтобы решить это.

Я только что включил Glassfish-Embedded-All и Cobertura в зависимости Maven без конкретных опций. Я не использую свойство EJBContainer EJBContainer.MODULES , встроенный в Glassfish сам находит классы ejb в нормальной или фазе кобертуры.

Однако переносимые имена JNDI меняются между обычным и кобертурным регистром. Поэтому я адаптировал ваш метод lookupBy для управления этими двумя случаями.

Наконец, вот мой код:

public static void createContainer() throws IOException {        
    container = EJBContainer.createEJBContainer();
    context = container.getContext();
    MyServiceLocal ejb = lookupBy(MyServiceLocal.class,MyServiceImpl.class);
}

public static <T> T lookupBy(Class<T> type, Class service) {
    try {
        return (T) context.lookup("java:global/classes/" + service.getSimpleName());
    } catch (NamingException ex) {
        // lookup with cobertura
        return (T) context.lookup("java:global/cobertura/" + service.getSimpleName() + "!" + type.getName());
    }
}
...