Я пытаюсь перейти с EJB2.x на EJB3.x, и я использую Wildfly 9.0.0.Старый EJB2.x работает в JBoss 4.2.2, и он выглядит следующим образом:
public interface WUFFacadeRemote extends EJBObject {
public ClientData getItems(ClientData data);
public ClientData save(ClientData data);
}
public interface WUFFacadeHome extends EJBHome {
public WUFFacadeRemote create();
}
public class WUFFacade {
public ClientData getItems(ClientData data) {
//code here
}
public ClientData save(ClientData data) {
//code here
}
}
public class WUFAction extends HttpServlet implements IAction {
public void doPost(HttpServletRequest request, HttpServletResponse response) {
...
Object objRef = ic.lookup("java:comp/env/wUF");
com.wuf.WUFFacadeHome home = (com.wuf.WUFFacadeHome) PortableRemoteObject.narrow(objRef, com.wuf.WUFFacadeHome.class);
engine = home.create();
//engine gets the reference, and I can use it normally.
...
}
}
У меня также есть ejb-jar.xml, и он работает.Итак, решение, которое я думал для EJB3.x и Wildfly 9.0.0, выглядит следующим образом:
@WebServlet(urlPatterns = "windows/wUF.do", loadOnStartup = 1)
public class WUFAction extends HttpServlet implements IAction {
@EJB
private WUFFacadeRemote engine;
public void doPost(HttpServletRequest request, HttpServletResponse response) {
//Here I should be able to use my engine.
//Wildfly starts and I call the page, engine is not null at this moment,
//but after I call the page again, it becomes null and remains null.
}
}
@Stateless
@Remote(WUFFacadeRemote.class)
public class WUFFacade extends RootFacade implements WUFFacadeRemote, Serializable {
public WUFFacade() { }
@EJB
FUFHome home;
public ClientData getItems(ClientData data) {
//code here
}
public ClientData save(ClientData data) {
//code here
}
private Col load(ClientData data,InitialContext ic) {
//here i'm calling home.
// but home is always null. It was supposed to have the @EJB reference initialized.
//But instead I get a null pointer...
home.findByFilter(loader);
}
}
@Remote(FUFHome.class)
public interface FUFHome {
FUF create(FUFValue fUFValue);
FUF findByPrimaryKey(FUFPK pk);
Collection findByFilter(FacadeLoader loader);
}
public interface WUFFacadeRemote{
public ClientData getItems(ClientData data);
public ClientData save(ClientData data);
}
У меня больше нет ejb-jar.xml, развертывание успешно выполнено, а Wildfly начинается сошибок нет.Затем, когда я в первый раз вызываю страницу, о которой идет речь, кажется, что @EJB работает (Debug - это «Прокси для удаленного EJB StatelessEJBLocator для« bus-фасад / WUFFacade », представление - это интерфейс com.wuf.WUFFacadeRemote, affinity is None»), значение не равно нулю, но для всех последующих вызовов моя переменная равна нулю, и я получил исключение NullPointerException.
Я действительно не знаю, что делаю неправильно (возможно, я полностью потерян),но для меня @EJB должен работать правильно, как это.Что мне не хватает?Спасибо.
Поскольку я использую EJB3.x, я просто сейчас использую аннотации (кажется, это нормально).
JNDI:
Привязки JNDI для сессионного компонента с именем FUF в развертывании
java:global/fumo/bus-entities-fumo/FUF!apyon.components.fumo.fuf.FUF
java:app/bus-entities-fumo/FUF!apyon.components.fumo.fuf.FUF
java:module/FUF!apyon.components.fumo.fuf.FUF
java:global/fumo/bus-entities-fumo/FUF
java:app/bus-entities-fumo/FUF
java:module/FUF
Привязки JNDI для сессионного компонента с именем WUFFacade
java:global/fumo/bus-facade-fumo/WUFFacade!apyon.fumo.wuf.WUFFacadeRemote
java:app/bus-facade-fumo/WUFFacade!apyon.fumo.wuf.WUFFacadeRemote
java:module/WUFFacade!apyon.fumo.wuf.WUFFacadeRemote
java:jboss/exported/fumo/bus-facade-fumo/WUFFacade!apyon.fumo.wuf.WUFFacadeRemote
java:global/fumo/bus-facade-fumo/WUFFacade
java:app/bus-facade-fumo/WUFFacade
java:module/WUFFacade