为了账号安全,请及时绑定邮箱和手机立即绑定

如何连接 OSGI 包(通过包发送实体)?

如何连接 OSGI 包(通过包发送实体)?

浮云间 2022-11-30 10:06:35
我有一个 REST 服务,它在一个模块(包)中包含三个类 User.java -> Entity UserService.java -> REST 服务 UserValidation.java -> 实体的特殊验证器。服务器将实体发送到此验证器并获得验证结果(真或假):User.java@XmlRootElement(name = "User")public class User {    private long id;    private String name;    private String surname;    private String patronymic;    /*Getters and Setters*/}UserService.javapublic class UserServiceImpl implements UserService {    private UserDAO userDbDao = new UserDatabaseDAO();    @POST    @Path("/users/")    public Response addUser(User user) {        UserValidator userValidator = new UserValidator(user);        if (userValidator.isValid()) {            User newUser = userDbDao.createUser(user);            return Response.ok().type("application/xml").entity(newUser).build();        } else {            return Response.status(Response.Status.BAD_REQUEST).entity(userValidator.getErrorMessage()).build();        }    }}UserValidator.javapublic class UserValidator {    private static final int MAX_SIZE_NAME = 50;    private static final int MIN_SIZE_NAME = 2;    private User user;    public UserValidator(User user) {        this.user = user;    }但是现在,我需要将其拆分成单独的包。因为,如您所见,它们使用彼此的功能。例如UserService.java 就使用了这个UserValidator userValidator = new UserValidator(user);我需要以某种方式连接这些包(OSGI 服务、ActiveMQ)。在我看来,它的工作原理是这样的:UserService 包从 REST 方法获取用户实体。将所有用户字段(姓名、姓氏、父名)放入 ActiveMQ 队列(因为 UserValidator 包不知道用户实体是什么)。UserValidator 包从队列中获取用户的字段并验证它们。UserValidator 包将验证结果(真/假)放入队列。UserService 包从队列中获取验证结果并将用户发送到 DAO。但这只是一个概念。我错了吗?通过捆绑包传递实体的最佳方式是什么?我应该怎么做?
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

您目前通过 new 简单地启动 UserValidator 的方法在技术上很好,即使它们存在于不同的包中。如果你的验证器只在这个地方需要并且很简单,我什至会把它放在同一个包中。

其他选项对于解耦您的捆绑包很有意义。使用消息传递可以避免同步调用。它还可以用于将数据发送到远程机器。JMS 消息传递是相当重量级的。您需要一个代理并依赖于 API。在您的情况下,您还直接需要验证结果。因此,您将使用 JMS 模拟同步调用。所以我宁愿避免这种情况。

使用 OSGi 服务允许您与服务的实现分离。在这种情况下,为 UserValidator 创建一个接口是有意义的。我还会将此接口放入一个单独的包中。然后,您需要在实现验证器的包中注册服务,并在使用验证器的包中绑定服务。OSGi 服务的重量非常轻,默认情况下是同步的。所以我认为它们很适合你的问题。对于注册和绑定服务,不要直接使用 OSGi API。而是使用带有注释的声明式服务。它们消除了处理 OSGi 服务的大部分复杂性。

顺便提一句。我不确定你是怎么做 REST 的。我建议看看 Aries JAX-RS Whiteboard。


查看完整回答
反对 回复 2022-11-30
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信