私はplay2.1で最初の一歩を踏み出しているので、playframeworkWebサイトでJavaTodoListチュートリアルを行いました。すべてが期待どおりに機能しました。
次に、開発ボックスで実行されているpostgresqlデータベースを使用するようにtodolistを変更しました。私がしなければならなかったのは、application.conf`のいくつかの設定を変更することだけでした
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost:5432/todo"
db.default.user=todo
db.default.password=secretpassword
ページを更新し、データベースを進化させましたが、すべてが正常に機能しました。
ここで、hibernate-spatialを使用して、すべてのtodolistアイテム(実際には、他のロケーションベースのアイテムである可能性があります)のロケーション座標を格納するためにプレイしたいと思います。
アプリの/libディレクトリにいくつかのライブラリを追加しました。
- hibernate-commons-annotations-4.0.1.Final.jar
- hibernate-core-4.1.9.Final.jar
- hibernate-spatial-4.0-M1.jar
- jdbc-stdext-2.0.jar
- jts-1.12.jar
- postgis-jdbc-1.5.3.jar
- postgresql-8.4-701.jdbc4.jar
古典的なGlassfishJavaアプリで同じライブラリを使用して空間機能を保存したので、それらを組み合わせることができます。また、postgresqlデータベースはpostgisで空間的に有効になっています。これは、以前にクラシックJavaアプリでテストされました。
ToDoタスクのモデルクラスを次のように拡張しました。
package models;
import java.util.*;
import play.db.ebean.*;
import play.data.validation.Constraints.*;
import javax.persistence.*;
import com.vividsolutions.jts.geom.Point;
import org.hibernate.annotations.Type;
@Entity
public class Task extends Model {
@Id
public Long id;
@Required
public String label;
@Type(type="org.hibernate.spatial.GeometryType")
@Column(columnDefinition="Point")
public Point location;
public static Finder<Long,Task> find = new Finder(Long.class, Task.class);
public static List<Task> all() {
return find.all();
}
public static void create(Task task) {
task.save();
}
public static void delete(Long id) {
find.ref(id).delete();
}
}
また、confファイルにPostgisJPA方言を追加しました。
jpa.dialect=org.hibernate.spatial.dialect.postgis.PostgisDialect
Playはすべてを正常にコンパイルします。いくつかのエラーがあり、ライブラリがクラスパスにない場合ですが、エラーが表示されなくなるまで、上記のように1つずつ追加しました。それにもかかわらず、新しいロケーションフィールドのデータベースの進化はトリガーされませんでした。Playは、私のアプリのHibernate-Spatial固有の部分をすべて無視しているようです。以前の通常のtodolistアプリと同じように機能しています。
さまざまなHibernateバージョンと関係があると思います(hibernate3またはhibernate4を使用してプレイしていますか?4にアップグレードできますか?)。すでにこれを経験している人が、使用した各ライブラリのバージョンと、実行する必要のある構成設定を教えてもらえますか?
更新:クリストファーが述べたように、私はebeanとjpaを混同しました。そこで、jpa-sampleを取得して、単純なtodolistサンプルに転送しました。Playプロジェクトのファイルと依存関係を更新し、モデルとコントローラーをJPA EntityManagerに合うように再配線し、クラスパスからいくつかのライブラリを削除して、Play2.1に搭載されているHibernate3を使用するようにしました。また、jpaの例とほぼ同じように構成を行いました。hibernateにpostgres方言を使用していることを除けば、persistence.xmlとapplication.confはほぼ同じように見えます。プロジェクトをコンパイルすることはできますが、プロジェクトを開始すると、
PersistenceException:[PersistenceUnit:defaultPersistenceUnit]EntityManagerFactoryを構成できません
デバッグするようにplayの冗長性を構成したので、PropertyBinderがタスクエンティティのidプロパティをビルドした後にこの例外が発生することがわかりました。
私はさらに一歩進んだと思いますが、終わりは見えません...