Java JAX-RS:服务器端用户界面

Java JAX-RS:服务器端用户界面,java,user-interface,jakarta-ee,jax-rs,server-side,Java,User Interface,Jakarta Ee,Jax Rs,Server Side,我有一个JAX-RSREST服务,当调用REST端点时,它需要提供一些可视化的服务器端输出。稍后,我可能还想提供一个用户界面,管理员将使用该界面与web服务进行交互。显然,我可以为这种交互构建REST端点,并让管理员使用提供的带有UI的客户端应用程序调用这些端点(从不同的机器或相同的机器),但我希望避免将此功能公开给网络。为了便于部署,我还希望所有内容(即web服务及其管理员UI)都是同一应用程序的一部分 我发现,如果我尝试构建JFrame或任何其他顶级UI元素,我的JAX-RS应用程序将抛出H

我有一个JAX-RSREST服务,当调用REST端点时,它需要提供一些可视化的服务器端输出。稍后,我可能还想提供一个用户界面,管理员将使用该界面与web服务进行交互。显然,我可以为这种交互构建REST端点,并让管理员使用提供的带有UI的客户端应用程序调用这些端点(从不同的机器或相同的机器),但我希望避免将此功能公开给网络。为了便于部署,我还希望所有内容(即web服务及其管理员UI)都是同一应用程序的一部分

我发现,如果我尝试构建
JFrame
或任何其他顶级UI元素,我的JAX-RS应用程序将抛出
HeadlessException
。我还发现,通过设置系统属性
-Djava.awt.headless=false
,可以避免这种情况

我认为,通过如上所述设置headless system属性并定义一个将处理所有服务器端UI任务的单例启动EJB,我可能能够实现我所需要的:

@Singleton
@Startup
public class UiBean {

    private JFrame frame;

    @PostConstruct
    public void init() {
        SwingUtilities.invokeLater(() -> {
            frame = new JFrame();
            // ...setup UI...
        });        
    }

    // JAX-RS resources will inject the UiBean and invoke methods as this one when UI updates are needed.
    public void updateSomeUiComponent() {
         SwingUtilities.invokeLater(() -> { ... });
    }

}
我意识到这种设计并不理想。有没有其他方法可以达到我的要求?正在构建的软件是一个原型,时间至关重要,因此我希望避免学习完整的新技术(已经在学习JAX-RS和JPA方面投入了大量资金)。快速和肮脏是可以的,我想我只是在寻找最不肮脏的解决方案;)


提前谢谢

招摇过市不符合你的需要吗?它可以根据您可以执行它们的端点构建交互式HTML web应用程序文档。我不知道Swagger,但据我所知,它实际上不是在服务器上构建本地组件的工具,而是一个文档工具:“通过一个支持招摇过市的API,您可以获得交互式文档、客户端SDK生成和可发现性。”招摇过市()适合您的需要?它可以根据您可以执行它们的端点构建交互式HTML web应用程序-文档。我不知道Swagger,但据我所知,它实际上不是一个在服务器上构建本地组件的工具,而是一个文档工具:“使用支持Swagger的API,您可以获得交互式文档、客户端SDK生成和可发现性。”