亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何連接 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 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號