Glassfish嵌入式+maven cobertura插件



我以以下方式使用嵌入式玻璃鱼:

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);
    }
}

问题是嵌入式glassfish使用"target/classes"中的类,而maven-cobertura使用"target/generated-classes/cobertura"。然后,第一次运行测试是可以的,但在第二次运行cobertura时,我收到一个java.lang.RuntimeException:javax.naming.NamingException(可能是因为cobertur正在处理"target/generated-classes/cobertura",而glassfish在处理"target/classes")。

有什么解决这个问题的办法吗???

我在嵌入cobertura和glassfish时也遇到了同样的问题。这是我解决它的设置。

我只是将glassfish嵌入了所有cobertura中的maven依赖项,没有特定的选项。我不使用EJBContainer属性EJBContaner.MODULES,glassfishembedded在正常或cobertura阶段自行查找ejb类。

然而,JNDI可移植名称在普通和cobertura大小写之间发生变化。所以我调整了你的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());
    }
}

最新更新