У меня возникла странная проблема, которая внезапно возникла, когда я пытался создать новый EJB и внедрить его в другой EJB, чтобы я мог вызывать его ресурсы.Я использую Glassfish 3.1 и Java EE 6.
Я делал это пару раз без проблем в одном и том же проекте, но по какой-то причине этот EJB вызывает ошибки развертывания.Как только я добавлю аннотацию
@ EJB EJBname ejbname;
К бобу, в котором я хочу сослаться на него и сохранить, я получаю ошибку сервера развертывания.
Журналы сервера показывают:
Причина: javax.naming.NameNotFoundException: com.bob.thrift.ThriftClient # com.bob.thrift.ThriftClient не найден
javax.naming.NamingException: исключение, разрешающее Ejb для 'Remote ejb-ref name = com.bob.logic.RSSbean / tclient, интерфейс Remote 3.x = com.bob.thrift.ThriftClient, ejb-link = null, lookup =, mappedName =, jndi-name = com.bob.thrift.ThriftClient, refType = Session '.Фактическое (возможно внутреннее) имя удаленного JNDI, используемое для поиска: 'com.bob.thrift.ThriftClient # com.bob.thrift.ThriftClient' [Исключением корня является javax.naming.NamingException: поиск не выполнен для ...
Я не знаю, что означает этот хэш-символ # или могу ли я подтвердить, что это правильный синтаксис.Похоже, что это правильный пакет, где мой класс существует, однако.
Я делаю то же самое, что и для других EJB, все они - простые сессионные компоненты @stateless.Это похоже на файл библиотеки, на который есть ссылка, которого нет в пути сборки.Как будто у него есть имя, но он не может найти фактическое местоположение.Я не уверен, как решить эту проблему в случае инъекции EJB.
Редактировать: EJB с необходимым мне материалом: package com.bob.thrift;
import com.bob.thrift.sendEventMessage2;
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;
//**Make Socket**
TSocket socket = new TSocket("137.222.23.23",1111);
//**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);
EJB с внедрением, которое вызывает ошибки развертывания: package com.bob.logic;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.jws.WebService;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.bob.eao.XRSSeao;
import com.bob.thrift.ThriftClient;
@Stateless
@LocalBean
//@WebService
public class RSSbean {
private String inputString;
private List Statuses;
@EJB private ThriftClient tclient;
Как только я добавлю вышеупомянутую строку "@EJB ThriftClient tclient", она не будет развернута, и я получу NameException, поиск JNDI, сопоставление исключений нулевого типа.Это отказывается быть найденным таким образом.