android - 带有桌面、android 和 ios 客户端的 java-ee 应用程序

标签 android ios jakarta-ee ejb restful-architecture

我正在使用 java enterprise 和 glassfish 构建一个应用程序。客户端和服务器之间的信息通常是少量数据,但有时客户端需要获取更大的资源(通常为 1-20 MB)。我还在规划系统的架构,我需要一些关于如何将服务器上的资源暴露给多个客户端的建议。

最初我只打算在 javaws 和 glassfish 提供的 ACC 中运行一个桌面客户端应用程序。我将远程接口(interface)放在一个单独的 jar 中,并计划通过调用通过这些接口(interface)公开的 EJB 方法来完成所有客户端服务器接口(interface)。对于 Java 桌面客户端来说,这一切都很好。对于 Android 客户端来说,它甚至应该非常容易。但我不认为它对 ios 来说会那么容易。

有什么方法可以从在 iphone 或 ipad 中运行的 objective-c 调用我的 EJB?我当然希望如此。

我预计解决方案是 RESTful Web 服务。据我了解,这是一种通过以通用 XML 或 JSON 格式传递数据来松耦合客户端和服务器应用程序的方法。

很抱歉,如果我遗漏了一些非常明显的东西,但似乎有两条路线可以从这里开始:

  1. 保留我的 EJB 业务接口(interface)并为通用客户端(iOS 和以后可能出现的任何其他内容)实现一个重复的 RESTful 接口(interface)。

  2. 为所有客户端创建一个 restful 接口(interface)。

数字 2 似乎是一个更简洁的设计,但这意味着我必须放弃已经完成的工作并学习休息。有更多经验的人可以提供一些建议吗?我将不胜感激。

最佳答案

在 EJB 3.1 中,您可以通过一种非常简单的方式将业务逻辑作为 RESTful 服务公开,例如:

@Path("name")
@Stateless
public class NameService {
    @EJB
    private NameBean nameBean;

    @GET
    @Produces("text/html")
    public String getHtml() {
        return "<h2>Hello "+nameBean.getName()+"</h2>";
    }

    @PUT
    @Consumes("text/plain")
    public void put(String content) {
        nameBean.setName(content);
    }
}

不需要 servlet 或任何其他委托(delegate)。对一种逻辑使用多种访问方法绝对没问题,这样一些 Java 客户端使用 EJB (RMI) 而其他客户端使用 REST。将来您甚至可以根据需要添加一些新的,例如XML 网络服务,通过异步消息等。

关于android - 带有桌面、android 和 ios 客户端的 java-ee 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8641497/

相关文章:

android - android屏幕旋转时执行新任务

java - 使用 application.properties 在 Spring Boot 中外部化 logback.xml 的位置

java - JEE7 : best way to create another thread that never exits

ios - 以编程方式创建 UIButton 比使用 Storyboard 模糊

ios - 为什么 Xcode 4 没有运行我的最新版本?

iphone - iOS 中的 SQLite 安全性

java - 可自行部署的 Java EE 应用程序

android - 如何以编程方式终止三星设备上的后台进程

机器人 Kotlin : locale des not change after back press

Android: (setOnItemClickListener) position 和 id 的区别