Glassfish 嵌入式 + maven cobertura 插件

Posted

技术标签:

【中文标题】Glassfish 嵌入式 + maven cobertura 插件【英文标题】:Glassfish embedded + maven cobertura plugin 【发布时间】: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 正在处理“目标/类”)。

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

【问题讨论】:

【参考方案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());
    

【讨论】:

以上是关于Glassfish 嵌入式 + maven cobertura 插件的主要内容,如果未能解决你的问题,请参考以下文章

Maven + Glassfish 实现hello

《安富莱嵌入式周报》第282期:CMSIS-DSP手册引入计算图,树莓派单片机RP2040超频到1GHz,COBS字节编码算法,纯手工为PS1打造全新亚克力外壳

《安富莱嵌入式周报》第282期:CMSIS-DSP手册引入计算图,树莓派单片机RP2040超频到1GHz,COBS字节编码算法,纯手工为PS1打造全新亚克力外壳

带货物和安装 Glassfish 的 Maven

Maven,gradle的搭建工具

Bamboo Maven Glassfish 部署