我在EJB3.1中使用glassfish 3.1和JEE6。我只是試圖用無界面視圖注入一個無狀態的LocalBean到另一個EJB中,以便我可以訪問它的一個方法。但是我立即在注射網站上發現部署錯誤。無法注入本地EJB。依賴注入失敗
如果我注入它的接口@EJB接口接口;
無法解析引用本地EJB-REF名= com.sallie.logic.RSSbean/tclient,本地3.X界面= com.eb .thriftEJBinterfaces.thriftEJBinterf * 王牌,EJB鏈接= NULL,查找=,mappedName =,JNDI名稱=,R * efType =會話
如果我通過無界面視圖中@EJB爲myBean豆注入它;
- javax.naming.NamingException中:查找失敗 '的java:comp/env的/ COM
- javax.naming.NamingException中的:異常解析ejb作爲' 遠程EJB-REF
- javax.naming.NameNotFoundException: ç
- javax.naming.NamingException中:查找失敗「的java:comp/env的/ C
無論我怎麼做這是行不通的注射。我有其他的EJB在這個項目中執行完全相同的事情,工作正常。我的數據庫訪問對象使用注入,它仍然在運行。出於某種原因,這個EJB不會注入。
編輯:類聲明與註釋:(基本上這個類創建一個套接字連接到外部服務器不在我的web應用程序,但可用在使用IDL叫做節儉該地址本進行了測試,適用於它。作爲一個Java SE程序(注:服務器日誌錯誤並不表明這是一個問題,日誌文件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 2011-12-29 21:44:02
@Perception添加了類聲明我不知道它會有所幫助。我一直在使用這種形式3或4其他的EJB,它工作正常。出於某種原因,它不喜歡這個EJB,我認爲這是因爲我想在EJB內部做什麼,並且錯誤只是誤導。因爲當我註釋掉EJB的主體時,Glassfish允許我毫無問題地注入它並部署它。 – Randnum 2011-12-29 21:50:30
「因爲當我註釋掉我的EJB的身體時,Glassfish允許我毫無問題地注入它並部署它。」如果是這種情況,那麼你應該張貼整個身體。 – 2011-12-29 21:53:59