【问题标题】:Glassfish embedded + maven cobertura pluginGlassfish 嵌入式 + maven cobertura 插件
【发布时间】:2012-02-28 15:10:16
【问题描述】:

我通过以下方式使用嵌入式 glassfish:

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 (可能是因为 cobertura 正在处理“target/generated-classes/cobertura ” 而 glassfish 正在处理“目标/类”)。

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

【问题讨论】:

    标签: cobertura glassfish-embedded


    【解决方案1】:

    我对 cobertura 和 glassfish-embedded 进行了同样的实验。这是我解决它的设置。

    我只是将 glassfish-embedded-allcobertura 包含在没有特定选项的 maven 依赖项中。我不使用 EJBContainer 属性 EJBContainer.MODULES,glassfish-embedded 在正常或 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());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 2011-09-08
      • 2012-03-13
      • 2011-10-08
      • 2013-07-29
      • 2016-03-21
      • 1970-01-01
      相关资源
      最近更新 更多