2016-05-16 2 views
2

Glassfishサーバー内でBBプロキシを実装できませんでした。私は、生成されたクラスを使用しようとするとそれがスローされます。ここではGlassfishの証拠にByte-Buddyプロキシを実装する際のエラー

Grave: java.lang.IllegalStateException: Error invoking java.lang.ClassLoader#findClass 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection$Dispatcher$Resolved.loadClass(ClassInjector.java:401) 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection.inject(ClassInjector.java:210) 
at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default$InjectionDispatcher.load(ClassLoadingStrategy.java:204) 
at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default.load(ClassLoadingStrategy.java:119) 
at net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:4350) 
at ar.gov.santafe.mpa.odbogm.proxy.ObjectProxyFactory.create(ObjectProxyFactory.java:77) 

は、プロキシオブジェクトを生成するメソッドのクラスです:

public static <T> T create(T o, OrientElement oe, SessionManager sm) { 
    T po = null; 
    try { 
     ObjectProxy bbi = new ObjectProxy(o,oe,sm); 
     po = (T) new ByteBuddy() 
       .subclass(o.getClass()) 
       .implement(IObjectProxy.class) 
//     .method(isDeclaredBy(IObjectProxy.class)) 
        .method(any()) 
        .intercept(MethodDelegation.to(bbi)) 
       .make() 
       .load(o.getClass().getClassLoader(), ClassLoadingStrategy.Default.INJECTION) 
       .getLoaded().newInstance(); 
     bbi.___setProxyObject(po); 

    } catch (InstantiationException ex) { 
     Logger.getLogger(ObjectProxyFactory.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     Logger.getLogger(ObjectProxyFactory.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return po; 
} 

Hereは、完全なスタックトレースです。

注:コードは正常に動作し、スタンドアロンのjvmですべてのテストに合格します。


Glassfishのクラスローダーです!クラスをWEB-INF/libから読み込むことができませんでした。あなたGlassfishの設定では可能ではないと思われるもの

Class.forName(IObjectProxy.class.getName(), 
       false, 
       o.getClass().getClassLoader()); 

+0

例外はexecitionが失敗した理由のために付属の原因を持っている必要があります。原因は何を示していますか? –

+0

IObjectProxyクラスが見つかりませんが、そのクラスは参照するパッケージに含まれています。 パッケージに問題がありますか? OGMパッケージは、アプリケーションパッケージとは異なります。 –

+0

Githubにプロジェクトをアップロードして、それを調べたり使用したりしたいと思っている人のために用意しました。 URLはhttps://github.com/mdre/odbogm –

答えて

0

o.getClass()のクラスローダは、あなたが呼び出しに似て発生したエラーをIObjectProxyを見ることができません。あなたは、さまざまなソリューションを持っている:

  1. IObjectProxyがそのようにプロジェクトを構成することによってo.getClass().getClassLoader()に表示されていることを確認してください。
  2. IObjectProxy.class.getClassLoader()o.getClass().getClassLoader()の子である場合は、代わりにこのクラスローダーを使用してください。
  3. 計装クラスをロードする両方のクラスローダの子であるMultipleParentClassLoader(Byte Buddyの一部)を定義します。あなたは呼び出すことでそうすることができます。

    new MultipleParentClassLoader.Builder() 
        .append(IObjectProxy.class, o.getClass()) 
        .build(); 
    
関連する問題