2012-02-28 6 views
1

私は次のように埋め込まれたGlassFishのを使用しました: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は、「ターゲット/クラス」のクラスを使用することで、MavenのCoberturaのは、「ターゲット/生成を使用しています-classes/cobertura "と入力します。最初にテストを実行するとOKですが、2回目に、coberturaが実行されると、java.lang.RuntimeExceptionが発生します:javax.naming.NamingException(おそらく、coberturaが "target/generated-classes/cobertura" "glassfishは" target/classes "に取り組んでいます)。

この問題を解決するためのアイデアはありますか?

答えて

0

私はcoberturaとglassfishが埋め込まれた同じ問題を実験しました。ここでそれを解決するための私のセットアップです。

私は特定のオプションなしでMavenの依存関係でのglassfish-組み込みすべてCoberturaのが含まれています。私はEJBContainerプロパティーを使用していません。EJBContainer.MODULES、glassfish-embeddedは、それ自体で通常またはcoberturaフェーズのejbクラスを検索します。

ただし、JNDIのポータブル名は、通常の場合とcoberturaの場合の間で変更されます。だからあなたのlookupByメソッドをこれらの2つのケースを管理するように調整しました。最後に、ここで

は私のコードです:

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()); 
    } 
} 
関連する問題