4

私はJavaエンタープライズとGlassfishを使用してアプリケーションを構築しています。クライアントとサーバー間の情報は通常少量のデータですが、クライアントはより大きなリソースを取得する必要がある場合があります(1〜20 MBが一般的です)。私はまだシステムのアーキテクチャを計画しており、サーバー上のリソースを複数のクライアントに公開する方法についてアドバイスが必要です。

もともと私は、javawsとglassfishによって提供されるACCでデスクトップクライアントアプリを実行するだけでした。リモートインターフェイスを別のjarに配置し、それらのインターフェイスを介して公開されたEJBメソッドを呼び出すことにより、すべてのクライアントサーバーインターフェイスを実行することを計画しました。これはすべて問題なく、Javaデスクトップクライアントにとっては問題ありません。Androidクライアントにとってはかなり簡単なはずです。しかし、iOSにとってはそれほど簡単ではないと思います。

iPhoneまたはiPadで実行されているObjective-cからEJBを呼び出す方法はありますか?きっとそう願っています。

ソリューションがRESTfulWebサービスであることを期待しています。私が理解していることから、これは、一般的なXMLまたはJSON形式でデータを渡すことにより、クライアントアプリケーションとサーバーアプリケーションを緩く結合する方法です。

非常に明白なものが欠けている場合は申し訳ありませんが、ここから2つのルートがあるようです。

  1. 私のEJBビジネスインターフェースを維持し、汎用クライアント(iOSおよび後で登場する可能性のあるもの)用に重複したRESTfulインターフェースを実装します。

  2. すべてのクライアントに対して1つのRESTfulインターフェイスを作成します。

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);
    }
}

サーブレットやその他のデリゲートは必要ありません。一部のJavaクライアントがEJB(RMI)を使用し、他のJavaクライアントがRESTを使用するように、1つのロジックにさまざまなアクセス方法を設定することはまったく問題ありません。将来的には、非同期メッセージングなどを介して、必要に応じてXMLWebサービスなどの新しいものを追加することもできます。

于 2011-12-27T08:43:25.927 に答える
0

オプション2に1つの変更を加えることをお勧めします。わざわざWebサービスを作成する必要はありません。AndroidとiOSで使用されるJSONを返すプレーンサーブレットを使用する

于 2011-12-27T05:55:37.580 に答える