JPAを使用してJavaアプリをmongodbに接続するために、datanucleus mongodb mavenプラグインと「アクセスプラットフォーム」を使用しています。
ubuntu VM でhttp://docs.mongodb.org/manual/tutorial/deploy-replica-set/の指示に従い、 両方のホスト ファイルに db1.mongo、db2.mongo、および db3.mongo を追加しました。ゲスト vm とホスト (Mac OS X)。
サーバーに接続する単純な Java アプリを取得しました ( http://www.datanucleus.org/products/accessplatform_3_0/mongodb/support.htmlで説明されているように)。
アプリをプライマリ (接続 url: mongodb:db1.mongo:27017/ops?replicaSet=rs0
) に接続すると、すべて正常に動作しますが、他の 2 つの mongodb を接続 URL に追加するとmongodb:db1.mongo:27017/ops?replicaSet=rs0,db2.mongo:27018,db3.mongo:27019
、例外が発生します。
com.mongodb.MongoException: can't find a master
at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:503)
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:236)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216)
...
このエラーを検索しましたが、見つかったのは localhost/127.0.0.1 の使用に関するものでした。別の VM で mongodb を実行して非ローカル IP を実行し、ホスト ファイルに名前を追加することで、これを軽減しようとしました。
mongodb を試す主な目的は、可用性を実現することです。そのため、レプリケーションとフェイルオーバーが可能であることが非常に重要です。障害が発生した場合のノード間のトランザクションと一貫性は問題ではありません。また、たまに 1 つまたは 2 つの更新が失われることも心配していないので、mongodb は JPA を使用する良い代替手段のように見えます (私は mysql に完全にうんざりしています :-)
よろしくお願いします。