Java EJB参考配置
我目前正在开发我的第一个JavaEE应用程序,并且面临一些注入问题 对于我的项目,我使用JPA、EJB和servlet。 到目前为止,我创建了我的实体、通用DAO、DAO实现、服务,然后是servlet和jsp页面 我想在我的DAO类中注入JPA实体管理器。 DAO类被注入服务,服务被注入servletJava EJB参考配置,java,servlets,jakarta-ee,ejb,Java,Servlets,Jakarta Ee,Ejb,我目前正在开发我的第一个JavaEE应用程序,并且面临一些注入问题 对于我的项目,我使用JPA、EJB和servlet。 到目前为止,我创建了我的实体、通用DAO、DAO实现、服务,然后是servlet和jsp页面 我想在我的DAO类中注入JPA实体管理器。 DAO类被注入服务,服务被注入servlet 通用DAO接口 @Local public interface DAO<T> { void insert(T item); void delete(T item);
@Local
public interface DAO<T> {
void insert(T item);
void delete(T item);
// and so on … }
@Stateless
@LocalBean
public class PositionServiceImpl implements PositionService {
@EJB
private DAO<Position> positionDao;
@Override
public void addPosition(Position position) {
positionDao.insert(position);
} // and so on…
@WebServlet(name = "RegisterServlet", urlPatterns = {"/register"})
public class RegisterServlet extends HttpServlet {
@EJB
PositionService positionService;
我将此配置放在web.xml中,但它不起作用
位置刀
一场
online.recruption.system.dao.dao
首先,在使用@EJB
注释进行注入时,不需要web.xml配置
其次,由于类型擦除,您无法使用EJB注入泛型类,您无法确定注入的EJB(DAO
)是否为预期类型,这将在运行时生成ClassCastException
)
最好是根据评论使用JB Nizet的建议:
您应该定义一个扩展DAO的PositionDao接口,并且
将您的PositionDao重命名为PositionDaoImpl。然后,注入
而不是刀。事实上,我会放弃接口和
直接注入混凝土类。他们没给我们带来多少好处
桌子
首先,在使用
@EJB
注释进行注入时,不需要web.xml配置
其次,由于类型擦除,您无法使用EJB注入泛型类,您无法确定注入的EJB(DAO
)是否为预期类型,这将在运行时生成ClassCastException
)
最好是根据评论使用JB Nizet的建议:
您应该定义一个扩展DAO的PositionDao接口,并且
将您的PositionDao重命名为PositionDaoImpl。然后,注入
而不是刀。事实上,我会放弃接口和
直接注入混凝土类。他们没给我们带来多少好处
桌子
顺便说一句,您试图用EJB做的事情是不可能的。您应该定义一个扩展DAO的PositionDao接口,并将您的PositionDao重命名为PositionDaoImpl。然后,注入位置DAO而不是DAO。事实上,我会抛弃接口,直接注入具体的类。它们不会带来太多的好处。哎呀,你想用EJB做的是不可能的。您应该定义一个扩展DAO的PositionDao接口,并将您的PositionDao重命名为PositionDaoImpl。然后,注入位置DAO而不是DAO。事实上,我会抛弃接口,直接注入具体的类。他们没有带来太多的东西。
@Stateless
@LocalBean
public class PositionDAO extends GenericDAO<Position> {
public PositionDAO() {
super(Position.class);
}
}
@Local
public interface PositionService {
void addPosition(Position position);
void updatePosition(Position position);
// and so on … }
@Stateless
@LocalBean
public class PositionServiceImpl implements PositionService {
@EJB
private DAO<Position> positionDao;
@Override
public void addPosition(Position position) {
positionDao.insert(position);
} // and so on…
@WebServlet(name = "RegisterServlet", urlPatterns = {"/register"})
public class RegisterServlet extends HttpServlet {
@EJB
PositionService positionService;
Cannot resolve reference Local ejb-ref name=online.recruitment.system.service.PositionServiceImpl/positionDao,Local 3.x interface =online.recruitment.system.dao.DAO,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session