3

GWT の RequestFactory と関連するプロキシで使用される POJO があります。POJO には、データベースへのアクセスを必要とする静的メソッド ( list()) とインスタンス メソッド ( )の両方があります。persist()私のデータベース接続プールは、Guice を介してシングルトンとして挿入されるように設定されています。私が確信していないのは、これらのタイプのメソッドの両方がアクセスできるように、どのように正確にインジェクションを実行できるかということです。

さらに、POJO のインスタンスは空のコンストラクターを使用して作成されるため、コンストラクター インジェクションを使用する機能が無効になります。

参考までに、サンプルの POJO を次に示します。

public class Person {
    private Integer id;
    private String name;

    public Integer getId() { return this.id; }
    public void setId(Integer id) { this.id = id; }
    public String getName() { return this.name; }
    public void setName(String name) { this.name = name; }

    public void persist() {
        //TODO: save state to DB
    }
    public static List<Person> list() {
        //TODO: get all people from DB
        return null;
    }
}
4

2 に答える 2

2

Locatorを使用して、RequestFactory サーバー コードが POJO のインスタンスを取得する方法Locator.find()をドメイン オブジェクトに適切に実装することで制御する場合、pojo はデフォルトでインスタンス化可能である必要はありません。getId() / getVersion()ロケーターを使用すると、プロトコルに準拠していないドメイン オブジェクトを使用することもできます。

@ProxyFor(value = Person.class, locator = PersonLocator.class)
interface PersonProxy extends EntityProxy { .... }

ほとんどのドメイン pojo の動作を変更する必要がある場合は、andをオーバーロードするServiceLayerDecoratorを挿入できます。createDomainObject()loadDomainObject()

于 2011-02-10T23:00:31.560 に答える
2

どういうわけか、GWT のスタイルは依存性注入の必要性をまだあまり認識していません。これは - ある程度 - クライアント側では許されますが、サーバー側ではそうではありません (正直に言うと、GWT と Guice チームが力を合わせてこの状況を改善することを心から望んでいます)。

現在、幸いなことに、Guice は静的フィールドを注入するための「レガシー」メカニズムを提供しています。 http://code.google.com/docreader/#p=google-guice&s=google-guice&t=Injectionsの「静的注入」を参照してください)。したがって、EntityManager/EntityManagerFactory (または永続化を実行するために使用しているもの) を静的フィールドに挿入できます。

直接行う必要はありませんが、プロバイダーを使用できます。次に、正しいスコープ (@RequestScoped など) を選択して、プロバイダーが正しいインスタンスを提供するようにします。

注:実際のプロジェクトで RequestFactory をまだ使用していないため、まだ試していません (そうする予定です)。この場合、従来のメカニズムが機能することを願っていますが、いくつかの障害にぶつかる可能性があります (?)

于 2011-02-10T21:36:49.850 に答える