Я использую Glassfish 3.1 и JEE6 с EJB3.1.Я просто пытаюсь внедрить один Stateless LocalBean с представлением без интерфейса в другой EJB, чтобы я мог получить доступ к одному из его методов.Но я сразу получаю ошибку развертывания на сайте инъекции.
Если я внедряю его интерфейс @EJB Interface interface;
Невозможно разрешить ссылку Локальное имя ejb-ref = com.sallie.logic.RSSbean / tclient, Локальный интерфейс 3.x =com.eb .thriftEJBinterfaces.thriftEJBinterf * ace, ejb-link = null, lookup =, mappedName =, jndi-name =, r * efType = Session
Если я ввожучерез представление без интерфейса, как в @EJB myBean bean;
- javax.naming.NamingException: не удалось выполнить поиск для 'java: comp / env / com
- javax.naming.NamingException: Исключение, разрешающее Ejb для 'Remote ejb-ref
- javax.naming.NameNotFoundException: c
- javax.naming.NamingException: не удалось выполнить поиск для' java: comp / env / c
Независимо от того, как я делаю инъекцию, она не работает.У меня есть другие EJB-компоненты, делающие то же самое в этом проекте, которые работают нормально.Мой объект доступа к базе данных использует инъекцию, и он все еще работает.По какой-то причине этот EJB не будет вводить.
Редактировать: объявление класса с аннотацией: (в основном этот класс создает сокет-соединение с внешним сервером не в моем веб-приложении, но доступном по этому адресу с использованием IDL, называемого thrift.Он был протестирован и работает как 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, я могу использовать представление без интерфейса, и это не решило проблему.
Мне интересно, смогу ли я использоватьнекоторые параметры аннотации для явного задания соответствия и имени, чтобы можно было лучше найти ссылку.