我在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