私はglassfish 3.1とJEE6をEJB3.1で使用しています。私は単に、一つのStateless LocalBeanをno-interfaceビューで別のEJBに挿入しようとしているので、そのメソッドの1つにアクセスできます。しかし、私は即座に注射部位に配置エラーを得る。ローカルEJBを挿入できません。依存性注入が失敗しました
インターフェイス@EJBインターフェイスインターフェイスを挿入すると、
は、ローカルのejb-refの名前= com.sallie.logic.RSSbean/tclient、ローカル3.xのインターフェース= com.eb .thriftEJBinterfaces.thriftEJBinterf * エース、のejb-link = nullで、検索を参照して解決できません。 =、にmappedName =、JNDI名=、R * EFTYPE =セッション
Iは@EJB MyBeanと豆のような無インターフェイスビューを介してそれを注入する場合、
- javax.naming.NamingExceptionの:ルックアップに失敗しました 'で、java:comp/env/COM
- javax.naming.NamingExceptionの:例外のためEJBを解決する' リモートれるejb-ref
- javax.naming.NameNotFoundExceptionが: C
- javax.naming.NamingExceptionの:検索は、「Javaのに失敗しました:コンプ/ ENV/C
どんなに私はそれが動作しない注入を行う方法。私は、このプロジェクトでまったく同じことをやっている他のEJBもうまく動作しています。私のデータベースアクセスオブジェクトは注入を使用しており、まだ実行中です。なんらかの理由で、このEJBは注入されません。
編集:注釈付きクラス宣言:(基本的に、このクラスはWebアプリケーション上にはない外部サーバーへのソケット接続を作成しますが、そのアドレスはthriftというIDLを使用して利用できます。 Java SEのプログラムとして上(注:サーバログエラーは、これが問題であることを示すものではありませんLOG FILES THROWリファレンスとネーミング例外を彼らはEJBを見つけることができないかのように。)
package com.eb.thrift;
import com.eb.thrift.sendEventMessage2;
import com.eb.thriftEJBinterfaces.thriftEJBinterface;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransportException;
import javax.annotation.ManagedBean;
import javax.ejb.Remote;
import javax.ejb.Local;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import javax.ejb.Stateless;
@Stateless
@LocalBean
public class ThriftClient{
public ThriftClient() { }
public String sendToServer(String say) {
System.out.println("Entering ThriftClient's main method starting server connection...");
String msg = null;
//**Make Socket**
TSocket socket = new TSocket("982.222.33.44", 30888);
//**Make Buffer**
//TSocket bufferedSocket = (socket); skipping this step because the jvm already handles
//the buffering on this end.
//**put in protocol**
TBinaryProtocol protocol = new TBinaryProtocol(socket);
//**create client to use protocol encoder**
sendEventMessage2.Client client = new sendEventMessage2.Client(protocol);
//**connect**
try {
socket.open();
} catch (TTransportException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
client.ping();
} catch (TException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
msg = client.sayMsg(say);
return msg;
} catch (TException e) {
msg = "response from server failed";
e.printStackTrace();
}
socket.close();
return msg;
}
}
私が試しました。私は3.1を使用しているので、インターフェイスの有無にかかわらず、問題は解決されませんでした。
私はいくつかの注釈パラメータを明示的にマッピングと名前を設定して参照がよりよく見つかるようにすることができるのだろうかと思います。
注入しようとしているBeanのクラス宣言(注釈付き)を含めることができますか? – Perception
@Perceptionがクラス宣言を追加しました。私は3つまたは4つの他のEJBのためにこのフォームを使用しています。何らかの理由で、このEJBが好きではありません。私はEJB内部でやろうとしていることが原因だと思います。エラーは誤解を招くだけです。私がEJBの本体をコメントアウトするとき、Glassfishは問題なく注入することができ、それが展開されるためです。 – Randnum
"私のEJBの本体をコメントアウトすると、Glassfishは問題なく注入することができ、配置されます。それが事実なら、全身を投稿するべきです。 –