在 Java 中的多个应用程序之间传递数据

Pass Data between Multiple Applications in Java

我有一个项目是由比我更有才华的人启动和策划的,我遇到了一个我不知道如何桥接的问题。

这是一个 Java/JavaFX/Spring 引导项目,而不是 Swing 项目。我看到很多关于 Swing 的回答。 两个应用程序也在Gradle中设置,所以两个应用程序都有自己单独的./gradlew bootRun命令并且是运行 在 CentOS 7 中。这两个应用程序都有自己的、独立的 main() methods。我相信最初的设计是有意的,完全从 GUI 中删除对数据的任何访问,这就是分离的原因。我只是很难找到一种方法来回传递 必要的 数据。

有一些单独的应用程序可以协同工作。 **Kiosk** 包含 GUI 元素和与 GUI 相关的控制器 **Governor** 其中包含一个 API 和一个 APP 应用程序。 API,截至目前,正在帮助源和文件接口。该 APP 包含一个 H2 数据库(全部存储在 JSON 文件中,但内容与此特定问题无关),一个用户包(其中包含提供给 H2 数据库的用户数据)和一个源包(其中执行所有文件方法)

我想做的是:

我没有任何代码可以复制和粘贴,所以我希望上面的描述足以为我指明正确的方向。我已经尝试在谷歌上搜索“在单独的java应用程序之间传递数据”,“单独的图形用户界面和逻辑java应用程序",以及你能想到的一切,但我碰壁了。

我很乐意提供您可能需要的任何其他信息,并且我不是在寻找任何人为我编写代码,但是如果您有任何您见过的示例,或者我可能没有的概念熟悉它会帮助我来回传递这些数据,我将永远感激不已!

*** 编辑 *** 尽我所能尝试添加 MVP。希望可以从下面收集到回答上述问题所需的一切。

Kiosk/LoginController

@Component
public class LoginController extends Controller {
    @FXML
    TextField username;

    @FXML
    TextField password;

    @FXML
    Button loginButton;

    @FXML
    public void tryLogin() {
        UserServices userServices = new UserServices();
        String usernameEntered = username.textProperty().getValue();
        String passwordEntered = password.textProperty().getValue();
        userServices.validateUser(usernameEntered, passwordEntered);
        // ... other non-related methods re: tryLogin()
    }
}

Kiosk/UserServices

public class UserServices {
    public boolean validateUser(String username, String password) {
        // **** How do I pass the args (username and password) to Governor?
        if (!userFound) {
            return false; // user not found, deny entry
        }
        return true; // allow entry
        }
    }
}

Governor/API/FileEntry

注意:此文件只是与 KIOSK 交互的 API 模块的示例——我不完全理解这一点——再一次,我尽力而为可以用我有限的资源;我 相信 我需要创建自己的 API 用户模块,但不确定如何进行)

@JsonDeserialize(as = DefaultFileEntry.class)
public interface FileEntry {
    Path getPath();
    boolean isDirectory();

    @JsonIgnore
    default Optional<String> getName() {
        if (getPath().getFileName() == null) {
            return Optional.empty();
        } else {
            return Optional.of(getPath().getFileName().toString());
        }
    }
}

Governor/APP/UserRepository

public interface UserRepository extends JpaRespository<User, String> {
    User findByUsername(String username);
}

Governor/APP/UserService

@Service
public class UserService {
    private UserRepository userRepository;
    
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // SQL methods to create database, if necessary, search, create, update, and delete users
}

应用程序之间可以通过多种方式共享数据:

  1. JMS、AMQ 或其他消息系统。
  2. 应用程序轮询更改的共享数据库。
  3. 打开一个 REST 端点,每个应用程序都可以调用该端点来相互更新。请务必使用证书确保安全,以免外人使用它们。