3

私はvaadinを学ぼうとしています。サービスレイヤーオブジェクトへの参照がある場合、それらはセッションに保存され、本当にそれを望んでいないため、永続性を備えたあらゆる種類のアプリケーション開発を行う方法について本当に混乱しています。永続性はシリアライズできません。

私の場合は、Spring を使用するアプリケーションを既に作成しており、Vaadin を使用して新しい UI を作成しています。春のものを Vaadin アプリケーションに注入できますが、それはセッションに保存されます。任意のヒント?

ところで、Vaadin フォーラムにはどのように投稿しますか? 投稿ボタンや登録方法が見つかりません:)

4

5 に答える 5

1

このhttp://vaadin.com/directory#addon/enterprise-appを試しましたか。このアドオンは、春と休止状態を使用します。

于 2012-11-16T05:13:34.607 に答える
1

私の提案:

  • コンテナーをプレゼンテーションデータのみを含むものとして定義します。プレゼンテーション オブジェクトから永続オブジェクトへの直接参照を保持しないでください。
  • トランザクション内で永続データ オブジェクトをロードし、コンテナーをサポートする対応するプレゼンテーション オブジェクトに変換する "ロード" 操作を定義します。
  • すべてのコンテナーを読み取り専用にします (モデル-ビュー-コントローラー パターンに従います: コンテナーがモデルです)。
  • 基礎となる永続データが変更されたときにコンテナをリロードするために、必要に応じて通知/トリガーを設定します。
  • スケーラビリティのために、遅延読み込みなどの方法を知っているコンテナーを設計または使用して、コンテナー全体を一度に入力しないようにします (注: 難しいTreeTable- issue #9516を参照) 。
于 2012-09-14T16:16:50.963 に答える
0

Vaadinで休止状態を使用します。私のメインアプリケーションクラスには、セッションファクトリメソッドがあります。

    public Session getSession() {
    Session currentSession = HibernateUtil.getSessionFactory()
            .getCurrentSession();
    if(!currentSession.getTransaction().isActive()) {
        currentSession.beginTransaction();
    }
    return currentSession;
}

何かを永続化する必要があるすべてのクラスは、メインアプリへの参照を使用してから、セッションを取得します。

次に、HQLという名前のクエリを使用するサービスレイヤーがあり、そのデータをリストとして返します。

    public List<DataClass> getEntriesforDate(Date date, Integer key) {
    return mainApp.getSession().getNamedQuery(DataClass.NAMEDQUERY)
            .setParameter("key", key).list();
}

保存するには、ORMクラスをテーブルにマップするだけで、そのクラスのインスタンスにデータを入力し、mergeを使用してオブジェクトを永続化します。

getSession().merge(o);

VaadinWikiからの詳細な説明は次のとおりです。

VaadinでHibernate

于 2012-03-30T20:21:47.807 に答える
0

Vaadinの本がこの問題をカバーしているようです。彼らが推奨する解決策は、ThreadLocal を使用して Service オブジェクトを格納することです。ThreadLocal は、Application クラスの transactionStart および transactionEnd で初期化および破棄されます。

Vaadin ブックの詳細な手順: http://vaadin.com/book/-/page/advanced.global.html

于 2011-07-31T14:31:57.377 に答える
-2

Vaadin では永続化データはセッションに保存されないため、これについて心配する必要はありません。

于 2010-12-31T21:45:26.053 に答える