无法注入本地EJB。 依赖注入失败
我在EJB3.1中使用glassfish 3.1和JEE6。 我只是试图用无界面视图注入一个无状态的LocalBean到另一个EJB中,以便我可以访问它的一个方法。 但是我立即在注射网站上发现部署错误。
如果我注入它的接口@EJB Interface接口;
无法解析引用Local ejb-ref name = com.sallie.logic.RSSbean / tclient,Local 3.x interface = com.eb .thriftEJBinterfaces.thriftEJBinterf * ace,ejb-link = null,lookup =,mappedName =,jndi-name =,R * efType =会话
如果我通过@EJB myBean bean通过无界面视图注入它;
无论我如何进行注射,它都不起作用。 我有其他的EJB在这个项目中执行完全相同的事情,工作正常。 我的数据库访问对象使用注入,它仍然在运行。 出于某种原因,这个EJB不会注入。
编辑:带注释的类声明:(基本上这个类创建一个到外部服务器的套接字连接,而不是在我的web应用程序中,但是在该地址使用名为thrift的IDL可用,这已经过测试,并且作为java SE程序运行(注意:服务器日志错误并不表示这是一个问题,日志文件会抛出参考和命名例外,因为它们无法找到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我可以使用无界面视图,它并没有解决问题。
我想知道是否可以使用一些注释参数来显式设置映射和名称,以便可以更好地找到引用。
我认为你已经证明,尽管日志说了什么,Thrift代码就是问题所在。 如果你移除它,注射就会起作用; 如果您将其放入,注射失败。 这在Thrift代码中非常强烈。
我怀疑这是一个类加载问题。 应用程序服务器找不到Thrift库,或找到错误的版本,因此该类无法加载或无法实例化。 该失败意味着EJB无法实例化,这意味着查找失败。
您会期望导致失败的基础异常被记录,但这可能是应用程序服务器中的错误或疏忽。 这种事情经常令人沮丧地发生。
我会尝试编写一个真正简单的测试版本的EJB:
try {
System.err.println(Class.forName("org.apache.thrift.transport.TSocket"));
}
catch (Exception e) {
System.err.println(e);
}
看看你调用方法时会得到什么。
链接地址: http://www.djcxy.com/p/58777.html