2012-02-24 10 views
1

Eclipseのサーバータブで実行されているGlassfish v3で以下のエラーが表示されます。glassfish v3を使用したEntityManagerエラーの永続プロバイダがありません

javax.servlet.ServletException: javax.persistence.PersistenceException: No Persistence provider for EntityManager named chatroom 

このコードを@Stateless Beanと@Entityから実行しようとすると、 (私はそれが問題だとは思いませんが!)私は、参考のために非常に終わりBeanのコードを含めました

EntityManagerFactory factory = Persistence.createEntityManagerFactory("chatroom"); 

以下の私のpersistence.xmlです。できるだけ早くこれを設定しようとしましたが、私が何をしているのか分かりません。私はエンティティクラスのChatHistoryをデータベースに配線していますが、データベースへの接続をチェックする方法がわからず、正しく動作していることを確認しています。私はデータベースを実行して、データソースエクスプローラで見ることができます。ユーザー名とパスワードは正しいです。

http://oi44.tinypic.com/5nyq9.jpg

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> 
    <persistence-unit name="chatroom" transaction-type="JTA"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <class>org.janp.castlerock.ChatHistory</class> 
    <properties> 
     <property name="eclipselink.target-database" value="DERBY"/> 
     <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
     <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/MyDB;create=true"/> 
     <property name="javax.persistence.jdbc.user" value="username"/> 
     <property name="javax.persistence.jdbc.password" value="password"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

ChatHistory.java

package org.janp.castlerock; 

import java.util.List; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.validation.constraints.NotNull; 

@Entity 
public class ChatHistory { 

    private int id; 
    private List<String> messages; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    @NotNull 
    public List<String> getMessages() { 
     return messages; 
    } 

    public void setMessages(List<String> messages) { 
     this.messages = messages; 
    } 
} 

Chatroom.java

package org.janp.castlerock; 

import java.util.ArrayList; 
import java.util.List; 

import javax.ejb.EJB; 
import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 
import javax.persistence.Query; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 

@Path("/chatrooms") 
@Stateless 
public class Chatroom { 
    ChatHistory history; 
    @EJB 
    ConverterBean converterBean; 
    @GET 
    @Produces("text/plain") 
    public String getClichedMessage() { 
     EntityManagerFactory factory = Persistence.createEntityManagerFactory("chatroom"); 
     EntityManager em = factory.createEntityManager(); 
     Query q = em.createQuery("select t from Todo t"); 
     List<ChatHistory> messages = q.getResultList(); 
     for (ChatHistory element : messages) { 
      System.out.println(element); 
     } 
     System.out.println("Size: " + messages.size()); 

     ArrayList<String> temp = new ArrayList<String>(); 
     temp.add("HELLO WORLD"); 
     temp.add("I AM FINE"); 
     em.getTransaction().begin(); 

     ChatHistory messagehistory = new ChatHistory(); 
     messagehistory.setMessages(temp); 
     em.persist(messagehistory); 
     em.getTransaction().commit(); 
     em.close(); 

     messages = q.getResultList(); 
     for (ChatHistory element : messages) { 
      System.out.println(element); 
     } 
     System.out.println("Size: " + messages.size()); 

     return "SUCCESS!:" + messages; 
//  System.out.println("blahblha"); 
//  converterBean.dollarToYen(new BigDecimal(5.0)); 
//  return "Success!"; 
    } 
} 
+0

をご確認ください。 –

+0

Castlerock-> WebContent-> META-INF – Jazzepi

+0

castlerockについてはわかりませんが、あなたのjpaクラスがあればどこにでもかまいません。また、jpaコードのjar META-INFのどこにでも置いてください。 –

答えて

1

あなたはアノテーションでEntityManagerを注入する必要があり

@Stateless 
public class Chatroom 
{ 
    @PersistenceContext(unitName = "chatroom") 
    private EntityManager entityManager; 

また、あなたはあなたのpersistence.xmlがあなたのアプリケーションサーバで使用するJPAジャー/アーティファクトのMETA-INFにあることを確認しなくちゃCLASSPATHにそのクラスorg.eclipse.persistence.jpa.PersistenceProvider存在

関連する問題