我正在编写一个项目,我正在尝试应用多层架构。现在我有 2 个 EJB、业务和持久性以及一个共享 jar。由于功能要求,持久性必须是可替换的。我制作了一个名为 IPersistence 的接口。然后我在持久性 EJB 中创建了一个名为“持久性”的远程会话 bean,并将远程接口放入共享库中。现在,我需要使用来自业务的注入来调用 IPersitence。我怎样才能做到这一点?也许整个想法是错误的。我需要一些建议。
谢谢!
我正在编写一个项目,我正在尝试应用多层架构。现在我有 2 个 EJB、业务和持久性以及一个共享 jar。由于功能要求,持久性必须是可替换的。我制作了一个名为 IPersistence 的接口。然后我在持久性 EJB 中创建了一个名为“持久性”的远程会话 bean,并将远程接口放入共享库中。现在,我需要使用来自业务的注入来调用 IPersitence。我怎样才能做到这一点?也许整个想法是错误的。我需要一些建议。
谢谢!
这是一个简单的示例,其中您有一个汽车存储库/DAO,它通过不公开它是否存储在数据库、文件、XML 等中来从业务逻辑中抽象出持久性。然后业务类注入一个实例以便能够 - in这种情况 - 保存到数据库。但是,您可以创建实现 CarRepository 的其他类,并提供其他方法来在应用程序中保存数据,而无需触及代码的其他部分。
持久层
存储库/DAO 的接口
@Local
public interface CarRepository {
List<Car> findAllCars();
// Many other methods
}
存储库(域驱动设计)或数据访问对象
@Stateless
public class CarSqlRepository implements CarRepository {
@PersistenceContext(unitName = "MyUnit")
private EntityManager entityManager;
public List<Car> findAllCars() {
}
// Many other methods
}
服务/业务层
@Stateless
public class CarService {
@Inject
private CarRepository carRepository;
public List<Car> findAllCars() {
return carRepository.findAllCars();
}
// Many other methods
}