質問

Struts2を使用して、Google App Engineでプロジェクトを開発したい。データベースには、JPAとJDOの2つのオプションがあります。提案してくれませんか?両方とも私にとって新しいものであり、私はそれらを学ぶ必要があります。そのため、返信後の1つに焦点を当てます。

ありがとう。

役に立ちましたか?

解決

JPAはSunの永続性の標準であり、JDOは死んでいます(実際には死んでいますが、まだ動いています)。言い換えれば、JPAは長期的にはより良い投資のようです。だから、もし両方が私にとって新しいならJPAを選ぶと思います。

他のヒント

GAE / J googleグループには、このことに関するいくつかの投稿があります。私はそこで検索を行い、人々の意見を見ていきます。上記の意見とはまったく異なるメッセージが表示されます。 BigTableはRDBMSではないという事実にも注目してください。ジョブに適したツールを使用する

DataNucleus自身によるJPAとJDOのこの比較を見ただけです- http://www.datanucleus.org/products/accessplatform_2_1/jdo_jpa_faq.html 目を見張るようなもの。

私はJDOの幸せなユーザーです。頑張ってください。

JDOが死んだと主張する人々は、メリットがないわけではありません。 Pro EJB 3 Java Persistence APIの本で私が読んだものは次のとおりです。今後標準をサポートします。"。著者Mike Keithは、EJB3の共同仕様リーダーです。もちろん、彼はJPAの大きな支持者ですが、嘘をつくほど偏見があるとは思いません。

本が出版されたとき、JDOにはJPAよりも高度な技術的機能がありますが、ほとんどの主要ベンダーはJDOではなくJPAの背後に統合されていました。 IBM / OracleのようなEEの世界の大企業も大きなRDBMSベンダーであるため、驚くことではありません。 RDMBSを使用している顧客は、プロジェクトで非RDMBSよりも多くなっています。 GAEが大きく後押しするまでJDOは死にかけていました。 GAEデータストアはリレーショナルデータベースではないため、理にかなっています。集約クエリ、結合クエリ、所有されている多対多の関係など、一部のJPA機能はbigtableでは機能しません。ところで、GAEはJDO 2.3をサポートしていますが、JPA 1.0のみをサポートしています。 GAEがターゲットクラウドプラットフォームである場合、JDOをお勧めします。

記録では、Google App Engine(GAE)であるため、Oracle / SunルールではなくGoogleルールを使用します。

その下では、JPAはGAEに適しておらず、不安定であり、期待どおりに機能しません。 Googleはどちらもサポートしませんが、最低限必要です。

他の部分については、JDOはGAEで非常に安定しており、(ある程度)Googleによって文書化されています。

ただし、Googleはそれらを推奨していません。

http://code.google.com/appengine/docs/ java / datastore / overview.html

低レベルAPIは最高のパフォーマンスを提供し、GAEはすべてパフォーマンスに関するものです。

http://gaejava.appspot.com/

たとえば、10個のエンティティを追加します

  

Python:68ms

     

JDO:378ms

     

Javaネイティブ:30ms

JDOとJPAの競合では、datanucleusのポスターにのみ同意できます。

まず第一に、そして最も重要なこととして、datanucleusのポスターは彼らが何をしているかを知っています。彼らは結局、永続ライブラリを開発しており、リレーショナル以外のデータモデルに精通しています。大きなテーブル。 hibernateの開発者であるidがここにいると確信しています。彼は次のように言っていました。

第二に、JPAは間違いなく広く使用されており、公式のJava EEスタックの一部であることは少し助けになりますが、それが必ずしも良いことを意味するわけではありません。 実際、JDOを読んだ場合、JPAはJPAよりも高い抽象化レベルに対応しています。 JPAはRDBMSデータモデルと密接に結合されています。

プログラミングの観点から見ると、JDO APIを使用する方がはるかに優れたオプションです。なぜなら、概念的に妥協する必要性はずっと少ないからです。使用するプロバイダーが基礎となるデータベースをサポートしていれば、理論的には任意のデータモデルに切り替えることができます。 (実際には、GAEのオブジェクトにプライマリキーを設定し、特定のデータベースプロバイダー(googleなど)に結び付けることに気付くため、このような高レベルの透明度を達成することはめったにありません)。ただし、移行は簡単です。

第3に、Hibernate、Eclipse Link、さらにはGAEを使用できます。 Googleは、アプリケーションの構築に使用しているフレームワークを使用できるようにするために多大な努力を払ったようです。しかし、RDBMS上で実行されているかのようにGAEアプリケーションを構築するときに人々が気付くのは、遅いということです。 GAEの春は遅いです。このトピックのGoogle IOビデオをグーグルで検索して、それが正しいことを確認できます。

また、標準に従うことは賢明なことであり、原則として私は称賛します。一方、JPAはJava EEスタックの一部であるため、人々はオプションの概念を失うことがあります。 Java Server FacesもJava EEスタックの一部であることを理解してください。そして、それはWeb GUI開発のための信じられないほどきちんとしたソリューションです。しかし、結局、人々、私がそう言うかもしれない賢い人々がこの標準から逸脱し、代わりにGWTを使用するのはなぜですか?

このすべてにおいて、JPAには非常に重要なことが1つあります。それがGuiceとJPAの便利なサポートです。グーグルはこの時点ではいつものように賢くなく、コンテンツであるように思われます。今のところJDOをサポートしていません。私はまだ彼らがそれを買う余裕があると思います、そして最終的にはGuiceもJDOを飲み込みます...または多分そうではありません。

JDOに移動します。経験がなくても、習得するのは難しくありません。新しいスキルが身に付きます!

これを書いている時点で JDO を使用することで恐ろしいと思うのは、唯一の実装ベンダーは Datanucleus であり、その欠点は競争の欠如であるということです次のような多数の問題につながります:

  1. extensions
  2. などのいくつかの側面に関するあまり詳細ではないドキュメント
  3. 通常、次のような著者から皮肉な応答を受け取ります(ログを確認しましたか?それらを持っている理由があるかもしれません)そしてそのような迷惑な応答
  4. 有用な時間内に質問の回答が得られない場合があります。7日以内に回答が得られる場合は、ここ StackOverflow でも幸運を考える必要があります。

私は常に誰かが JDO 仕様の実装を開始することを望んでいます。そうすれば、彼らはコミュニティにもっと無料注意を向け、 Datanucleus の作成者は商用サポートのみに関心があると言っているのではなく、サポートに対する支払いを常に気にしているわけではありませんが、私はただ言っています。

個人的に Datanucleus の作成者は、 Datanucleus 自体にもコミュニティにも義務を負わないと考えています。彼らはいつでもプロジェクト全体を落とすことができ、誰も彼らのために彼らを判断することはできません、それは彼らの努力と彼ら自身の財産です。しかし、あなたは何に興味を持っているかを知っている必要があります。ご覧のように、開発者の1人が使用するフレームワークを探すとき、フレームワークの作成者を罰したり命令したりすることはできませんが、一方で、作業を完了する必要があります!そのフレームワークを書く時間があるなら、そもそもなぜフレームワークを探すのでしょうか?!

一方、 JDO 自体には、オブジェクトのライフサイクルや非常に直感的で一般的ではないものなど、いくつかの問題があります(私は思う)。

編集: JPA がオブジェクトライフサイクルメカニズムを実施することもわかっているため、標準のORM APIを使用する場合、永続化されたエンティティのライフサイクル状態を処理することは避けられないようです(つまり、< code> JPA または JDO

JDO で最も気に入っているのは、あらゆるデータベース管理システムをかなりの労力なしで使用できることです。

GAE / Jは、年末までにMYSQLを追加する予定です。

JPAは標準化されたAPIとしてプッシュされているように思われ、最近EJB3.0で勢いを増しているようです。JDOは蒸気を失ったようです。

どちらでもない!

Objectifyを使用します。これは、安価(使用リソースが少ない)で高速であるためです。 参考: http://paulonjava.blogspot.mx/2010/12/tuning -google-appengine.html

  

Objectifyは、JavaデータアクセスAPIです。   Google App Engineデータストア。 「中間」を占めます。簡単に   使用し、JDOまたはJPAよりも透過的ですが、かなり   低レベルAPIよりも便利です。 Objectifyは、   初心者はすぐに生産性を高めると同時に、   GAEデータストア。

Objectifyを使用すると、独自の型付きオブジェクトを永続化、取得、削除、およびクエリできます。

@Entity
class Car {
    @Id String vin; // Can be Long, long, or String
    String color;
}

ofy().save().entity(new Car("123123", "red")).now();
Car c = ofy().load().type(Car.class).id("123123").now();
ofy().delete().entity(c);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top