4

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

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

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

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

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

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

  2. 为所有客户端创建一个宁静的界面。

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

4

2 回答 2

7

在 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 或任何其他委托。对一种逻辑有多种访问方法是绝对好的,这样一些 java 客户端使用 EJB (RMI),而另一些则使用 REST。将来,如果需要,您甚至可以添加一些新的,例如 XML Web 服务,通过异步消息传递等。

于 2011-12-27T08:43:25.927 回答
0

我建议选项 2 进行一次修改,甚至不必费心创建 Web 服务。使用一个普通的 servlet,它返回 JSON 以供 Android 和 iOS 使用

于 2011-12-27T05:55:37.580 回答