私はGlassfish 3、JPA、Java EE 6で作業していました。Webコンテナでは、EJBにEntity Managerを挿入して、ロールバックなど。私はデスクトップアプリケーションで何をしますか?明らかにそれは動作しません。私はORMのためにJPAを使い続けることを知っています。しかし、EntityMangerFactoryを作成し、それからEntityManagerを作成しますか?手動でトランザクションを処理する必要がありますか?私はいくつかのサンプルアプリケーションを見ることができれば素晴らしいだろう。ありがとう!Javaデスクトップアプリケーションでのデータベースアクセスを行う最良の方法
答えて
EntityManagerFactory entityManagerFactory =
Persistence.createEntityManagerFactory("DS");
em = entityManagerFactory.createEntityManager();
あなたは春・フレームワークや何か他のものを使用しない場合は、em.getTransaction.begin()
とem.getTransaction.commit()
を呼び出すことにより、トランザクションを処理する必要があります。
私はSpring + JPAを試してみることをお勧めします。そこにはコンテナは必要ありません。単にアプリケーションコンテキストであり、トランザクションを設定することができます。 あなたはトランザクションの世話をしません。@Transactionalにしたいメソッドに注釈を付けるだけです。
あなたはSpringを使うことができます。これは、JEE6からデスクトップアプリケーションまで知っているものです。 (もちろん、それは100%同じではありません!)
別のオプションは、Embeddable EJB Containerと呼ばれることもあります。それはあなたが慣れ親しんだかもしれない注射、CMTなどと同じサービスを提供することができます。
私はHibernateとSwingを使って2層のJava Swingクライアントを構築しましたが、私は再びそれをやりません。もし私が今日それを再構築しなければならなかったら、生のJDBCクエリ、あるいはiBatisのような非常に細いORMマッピングフレームワークを使用します。
デスクトップ環境でHibernate(と私の経験がHibernateのみであるにもかかわらず、他のJPA実装を想定していると仮定します)が非常に異なる理由は、オブジェクトがデスクトップ上で長持ちする傾向があり、2)オブジェクトがいつアクセスされるのかを知ることは非常に難しいので、遅延読み込みの正しいトランザクション処理には問題があります。
ウェブのリクエスト/レスポンスのパラダイムは基本的にトランザクションであるため、そこでのトランザクションの境界設定は非常に簡単です。デスクトップ上では、たとえMouseMovedEventだけであっても、すべてのキー押下で潜在的にデータベースクエリや遅延ロードが発生する可能性があるため、いつトランザクションを開始してコミットするのかを知ることはずっと難しくなります。
エラー処理とオブジェクトのリフレッシュは大きな問題です。オブジェクトの寿命が長くなる傾向があります(多くの場合、アプリケーションの起動中です)。 Hibernateでは、例外は回復不可能です。つまり、データベースからすべてをリロードすることになっています。これはウェブ上で問題ありませんが、GUI全体でさまざまなモデルに数千のオブジェクトが埋め込まれている場合は間違いありません。
- 1. Javaデスクトップアプリケーションでファットクライアントを利用する最良の方法
- 2. データベースアクセスのWebアプリケーションとデスクトップアプリケーションの違い
- 3. レスキューブロックを行う最良の方法
- 4. デスクトップアプリケーションでデータセットを再利用するための最良の方法
- 5. Java EEアプリケーションで同時httpurlconnection呼び出しを行う最良の方法
- 6. Javaをエクスポートする最良の方法
- 7. JavaからAppleScriptを実行する最良の方法
- 8. OS XでのPHP開発を行う最良の方法
- 9. java:最良の「検索方法」
- 10. dplyrでネストされたフィルタリングを行う最良の方法
- 11. httpリクエストを行う最良の方法は何ですか
- 12. Cシャープで永続化を行う最良の方法は?
- 13. Android:MyLocationOverlayで逆ジオコーディングを行う最良の方法は?
- 14. Python Webアプリケーションで電子メールスケジューリングを行う最良の方法は?
- 15. Sparkで集計を行う最良の方法
- 16. Slimテンプレートでプリフォーマットされたコードスニペットを行う最良の方法
- 17. Javaデスクトップアプリケーションからホスト上でPHPスクリプトを実行する方法
- 18. テキストファイルで最後の行を読み込む最良の方法
- 19. JavaでJavaScriptを実行する最良の方法は何ですか?
- 20. これはjavaで行列をモデル化する最良の方法ですか?
- 21. UnityのサーバーにGETリクエストを行う最良の方法
- 22. この種のドロップシャドウを行う最も良い方法は?
- 23. Java JDBCデータベースアクセス層
- 24. FileSystemsを扱う最良の方法は?
- 25. retainプロパティを扱う最良の方法
- 26. QSignalMapperを使う最良の方法
- 27. ビューを扱う最良の方法
- 28. TDDとCSLAを行う最良の方法
- 29. エラー処理を行う最良の方法
- 30. Laravel/Eloquent関連検索を行う最良の方法
+1:私より44秒速い – Ralph