具有桌面、Android和iOS客户端的Java EE应用程序

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. 为所有客户端创建一个RESTful接口。
第二个选项似乎是一个更清晰的设计,但这意味着我必须放弃已经完成的工作并学习REST。有经验的人能提供一些建议吗?我会非常感激。

请在下方链接中查看答案:https://stackoverflow.com/questions/10473098/android-client-app-with-java-ee-server/76344299#76344299 - Farhood Naqizade
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服务,通过异步消息等。


0
我建议采用第二个选项,但要做出一些修改,甚至不必创建 Web 服务。使用普通的 Servlet 返回 JSON,供 Android 和 iOS 使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接