2012-02-08 7 views
0

私は、ejbモジュールを含む.earファイルとしてアプリケーションをパックしました。リモートインタフェースを実装するステートレスセッションBeanがあります。このような何か:クライアント-ejb jarを使用したリモートejbのルックアップ

package my.package.ext.impl; 
[...] 
@Stateless(name = "MyPropertiesHandler", mappedName = "ejb/MyPropertiesHandler") 
public class PropertiesHandler implements PropertiesHandlerRemote { 
    [...] 
} 

と、この:生成されたクライアントのEJB JARもあります

package my.package.ext; 
[...]  
@Remote 
public interface PropertiesHandlerRemote { 
    [...] 
} 

は、ビジネス、リモート・インタフェースおよび内部のいくつかの他のものがあります。
このclient-ejb jarは、他のアプリケーションにMaven依存として接続されています。
私は、ルックアップするためにPropertiesHandlerサービスをこのアプリケーションから試してください:あなたは上記を参照できるように私は、Weblogicの10.xの上でそれを実行

java.lang.NoClassDefFoundError: my/package/ext/PropertiesHandlerRemote 
at [...] 
at sun.reflect.GeneratedMethodAccessor633.invoke(Unknown Source) 
Truncated. see log file for complete stacktrace 
Caused By: java.lang.ClassNotFoundException: my.package.ext.PropertiesHandlerRemote 
at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297) 
at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179) 
Truncated. see log file for complete stacktrace 

:私はエラーを次取得

PropertiesHandlerRemote propertiesHandler = InitialContext.doLookup(
    "ejb/MyPropertiesHandler#my.package.ext.PropertiesHandlerRemote"); 

この瞬間。
アイデアは間違っていますか?

+0

私はそれがコンパイルされると信じています。この依存関係のためにどの範囲を設定しますか?このクラスはWLによって実行時に検出されません。 – Kris

+0

@Kris返信ありがとうございます。スコープが指定されていないので、デフォルトではコンパイルされていると思います。とにかくそれはそれに含まれている.earとclient-ejb jarファイルとしてパッケージ化されています。返信ありがとうございます。 – kardanov

答えて

2

client-ejb jarがearファイルのルートにパッケージされていて、他の依存関係を持つ/ libフォルダにパッケージされていないという問題がありました。
解決策は、client-ejb jarファイルを使用するプロジェクトのpomに<type>ejb-client</type>の代わりに<classifier>client</classifier>タグを使用することです。
http://jira.codehaus.org/browse/MEAR-85
これまで私がこのような問題に遭遇したことは奇妙で、以前は<type>ejb-client</type>タグが完璧に機能しました。

0

NoClassDefFoundErrorがあるので、あなたのPropertiesHandlerRemoteクラスが見つからないというわけではありませんが、あなたの実装で使用されている何か - クライアントのクラスパスにない依存関係がありますか?

+0

オリジナルのearファイルを同じコンテナにデプロイしているので、必要なものはすべてクラスパス上にあるはずです。とにかく、ejb-client generation configからすべての "除外"アノテーションを削除しようとしました。すべてがこのjarファイルに含まれていました。それは助けになりませんでした:( – kardanov

+0

あなたはコンテナ内からあなたのejbを使用する場合、なぜJNDIによって参照を取得し、 '@ EJB'によってそれを注入させないのですか?リモートで最初の1つでejbにアクセスする? –

+0

秒が正しい;)私はちょうど不正確だった。また、このBeanは管理されたコンテキスト(ejbではなく)にある単純なJavaクラスからルックアップされるため、 '@ ejb'注入は機能しません。 – kardanov

関連する問題