在 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 数据库的用户数据)和一个源包(其中执行所有文件方法)
我想做的是:
- 获取用户在
**Kiosk**
级别提供的 username
和 password
,并以某种方式将其传递到 **Governor**
.
- 一旦我可以传递数据,我就知道如何做剩下的事情,检查数据库并验证用户是否具有有效凭据等。
- 一旦我有了一个布尔值(让我们调用 id
validUser
),我想将该信息从 **Governor**
传递回 **Kiosk**
,然后我可以继续那里。
我没有任何代码可以复制和粘贴,所以我希望上面的描述足以为我指明正确的方向。我已经尝试在谷歌上搜索“在单独的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
}
应用程序之间可以通过多种方式共享数据:
- JMS、AMQ 或其他消息系统。
- 应用程序轮询更改的共享数据库。
- 打开一个 REST 端点,每个应用程序都可以调用该端点来相互更新。请务必使用证书确保安全,以免外人使用它们。
我有一个项目是由比我更有才华的人启动和策划的,我遇到了一个我不知道如何桥接的问题。
这是一个 Java/JavaFX/Spring 引导项目,而不是 Swing 项目。我看到很多关于 Swing 的回答。 两个应用程序也在Gradle中设置,所以两个应用程序都有自己单独的./gradlew bootRun
命令并且是运行 在 CentOS 7 中。这两个应用程序都有自己的、独立的 main() methods
。我相信最初的设计是有意的,完全从 GUI 中删除对数据的任何访问,这就是分离的原因。我只是很难找到一种方法来回传递 必要的 数据。
有一些单独的应用程序可以协同工作。
**Kiosk**
包含 GUI 元素和与 GUI 相关的控制器
**Governor**
其中包含一个 API 和一个 APP 应用程序。 API,截至目前,正在帮助源和文件接口。该 APP 包含一个 H2 数据库(全部存储在 JSON 文件中,但内容与此特定问题无关),一个用户包(其中包含提供给 H2 数据库的用户数据)和一个源包(其中执行所有文件方法)
我想做的是:
- 获取用户在
**Kiosk**
级别提供的username
和password
,并以某种方式将其传递到**Governor**
. - 一旦我可以传递数据,我就知道如何做剩下的事情,检查数据库并验证用户是否具有有效凭据等。
- 一旦我有了一个布尔值(让我们调用 id
validUser
),我想将该信息从**Governor**
传递回**Kiosk**
,然后我可以继续那里。
我没有任何代码可以复制和粘贴,所以我希望上面的描述足以为我指明正确的方向。我已经尝试在谷歌上搜索“在单独的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
}
应用程序之间可以通过多种方式共享数据:
- JMS、AMQ 或其他消息系统。
- 应用程序轮询更改的共享数据库。
- 打开一个 REST 端点,每个应用程序都可以调用该端点来相互更新。请务必使用证书确保安全,以免外人使用它们。