我在编写EJB应用程序时遇到了问题。我搜索一个解决方案,但我仍然遇到与glassfish相同的问题:
cannot Deploy EducationPortal
deploy is failing=Error occurred during deployment: Exception while deploying the app [EducationPortal] :
Warning : Unable to determine local business vs. remote business designation for EJB 3.0 ref Local ejb-ref
name=com.portal.education.servlet.ModuleController/moduleServiceLocal,Local 3.x
interface =com.portal.education.service.Module.ModuleServiceLocal,ejb-
link=ModuleServiceImpl,lookup=,mappedName=,jndi-name=,refType=Session.
Please see server.log for more details.
我必须在同一个servlet中引用几个EJB才能使用某些方法 我该怎么做才能得到正确的结果
@EJB (beanName = "ModuleServiceImpl")
private ModuleServiceLocal moduleServiceLocal;
@EJB(beanName = "TeacherServiceImpl")
private TeacherServiceLocal teacherServiceLocal;
@EJB(beanName = "LevelServiceImpl")
private LevelServiceLocal levelServiceLocal;
@EJB(beanName = "SubjectServiceImpl")
private SubjectServiceLocal subjectServiceLocal;
interface ModuleServiceLocal
import java.util.List;
import javax.ejb.Local;
import com.issatso.portal.education.domain.*;
import com.issatso.portal.education.domain.Module.Id;
@Local
public interface ModuleServiceLocal {
Module find(Id idModule);
List<Module> findAll();
void delete(Id idModule);
Module save(Module object);
}
类ModuleServiceImpl
import java.util.List;
import javax.ejb.Singleton;
import javax.inject.Inject;
import com.issatso.portal.education.dao.module.ModuleDao;
import com.issatso.portal.education.domain.Module.Id;
import com.issatso.portal.education.domain.Module;
@Singleton
public class ModuleServiceImpl implements ModuleServiceLocal {
@Inject
private ModuleDao dao;
public Module find(Id idModule) {
return (Module) this.dao.find(idModule);
}
public List<Module> findAll() {
return this.dao.findAll();
}
public void delete(Id idModule) {
this.dao.delete(idModule);
}
public Module save(Module object) {
String action = (object.getIdModule()!= null) ? "UPDATED" : "CREATED";
Module Module = (com.issatso.portal.education.domain.Module) this.dao.save(object);
return Module;
}
}
答案 0 :(得分:1)
您可以在servlet中使用@Inject
来注入bean。而且您不需要定义beanName。只是做:
@Inject
private ModuleServiceLocal moduleServiceLocal;
@Inject
private TeacherServiceLocal teacherServiceLocal;
[...]
您正在bean ModuleServiceLocal
中实现接口ModuleServiceImpl
,因此CDI能够找到该类。