У меня есть пакет EAR, который содержит веб-модуль и EJB. В настоящее время EJB предоставляет доступ к своему локальному клиентскому приложению через Remote
интерфейс
@Stateless
public class CoreEJB implements CoreEJBRemote {
@PersistenceContext(unitName = "CoreWeb-ejbPU")
private EntityManager em;
@Override
public void packageProcess(String configFileName) throws Exception {
//Process logics
}
@Override
public <T> T create(T t) {
em.persist(t);
return t;
}
@Override
public <T> T find(Class<T> type, Object id) {
return em.find(type, id);
}
...
}
Интерфейс Remote
отсутствует в EAR и выглядит следующим образом
@Remote
public interface CoreEJBRemote {
public void packageProcess(java.lang.String configFileName) throws java.lang.Exception;
public <T extends java.lang.Object> T create(T t);
public <T extends java.lang.Object> T find(java.lang.Class<T> type, java.lang.Object id);
}
Main
клиента приложения ниже
public class Main {
@EJB
private static CoreEJBRemote coreEJB;
public static void main(String[] args) {
coreEJB.packageProcess("path/to/a/file");
}
}
Теперь я хочу создать интерфейс Local
для EJB, чтобы в Managed Bean
моего веб-модуля я мог получить доступ к EJB через локальный вызов.
Могу ли я просто изменить CoreEJB
с public class CoreEJB implements CoreEJBRemote
на public class CoreEJB implements CoreEJBRemote, CoreEJBLocal
и создать @Local
интерфейсный вызов CoreEJBLocal
внутри EJB package
? Или будет что-то лишнее? Я хочу, чтобы код моего управляемого компонента был таким
@ManagedBean
@RequestScoped
public void testView{
@EJB
private CoreEJBLocal coreEJB;
public void add(Something something){
coreEJB.add(something); //Local invocation
}
}