Glassfish v4 では、この非常に単純なアプリケーションでjavax.persistence.PersistenceException: No Persistence provider for EntityManager named local
、URL にアクセスすると次のエラーが発生します。localhost:8080/demo/main
Glassfish v4 には組み込みプロバイダーが付属していると思われます。
以下は、war ファイルのレイアウトです。
$ jar tvf /usr/local/glassfish4/glassfish/domains/domain1/autodeploy/demo.war
39 Sun Aug 04 17:12:40 HST 2013 META-INF/MANIFEST.MF
0 Mon Aug 05 16:32:16 HST 2013 META-INF/
217 Mon Aug 05 16:18:22 HST 2013 META-INF/persistence.xml
0 Sun Aug 04 17:12:36 HST 2013 WEB-INF/
0 Mon Aug 05 14:30:06 HST 2013 WEB-INF/classes/
0 Mon Aug 05 14:45:26 HST 2013 WEB-INF/classes/com/
0 Mon Aug 05 14:45:26 HST 2013 WEB-INF/classes/com/example/
0 Mon Aug 05 16:23:28 HST 2013 WEB-INF/classes/com/example/demo/
236 Mon Aug 05 16:24:26 HST 2013 WEB-INF/classes/com/example/demo/Foo.java
400 Mon Aug 05 16:25:34 HST 2013 WEB-INF/classes/com/example/demo/Main.java
168 Mon Aug 05 16:21:04 HST 2013 WEB-INF/classes/com/example/demo/RestApp.java
564 Mon Aug 05 16:28:10 HST 2013 WEB-INF/classes/com/example/demo/Foo.class
1006 Mon Aug 05 16:28:10 HST 2013 WEB-INF/classes/com/example/demo/Main.class
381 Mon Aug 05 16:28:10 HST 2013 WEB-INF/classes/com/example/demo/RestApp.class
217 Mon Aug 05 16:18:22 HST 2013 WEB-INF/classes/persistence.xml
284 Sun Aug 04 17:12:40 HST 2013 WEB-INF/glassfish-web.xml
0 Sun Aug 04 17:12:36 HST 2013 WEB-INF/lib/
更新:: persistence.xml
_
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="local">
<jta-data-source>jdbc/local</jta-data-source>
</persistence-unit>
</persistence>
Main.java
オブジェクトの作成と永続化を試みます:
package com.example.demo;
import javax.persistence.Persistence;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("main")
public class Main {
@GET
@Produces("application/json")
public String main () {
Foo foo = new Foo();
foo.setN(7);
Persistence.createEntityManagerFactory("local").createEntityManager().persist(foo);
return "main";
}
}
Foo.java
自明なエンティティです:
package com.example.demo;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Foo {
private int n;
@Id
public int getN () {
return n;
}
public void setN (int n) {
this.n = n;
}
}
RestApp.java
自明であり、JAX-RS を正常にトリガーします。
package com.example.demo;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/")
public class RestApp extends Application {
}
Glassfish コントロール パネルには、ローカルの MySQL 5.6.13 インストールに正常に ping を実行するlocal
というJDBC接続プールがあります。jdbc/local
で呼び出される JDBC リソースがありますPool Name: local
。
これを修正するにはどうすればよいですか?ありがとう!
編集:persistence.xml
上に追加