2012-02-24 94 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连接到数据库,但我不确定如何检查与数据库的连接,并确保它正常工作。我有数据库正在运行,并可以在Data Source Explorer中看到它。用户名和密码是正确的。

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

你必须确保你的persistence.xml是JPA你罐子/在你器物应用服务器的META-INF。 – 2012-02-24 20:37:20

+0

这是在castlerock-> WebContent - > META-INF – Jazzepi 2012-02-24 20:41:00

+0

不知道castlerock,但它应该去任何你的jpa类,或你的jpa代码的jar META-INF。 – 2012-02-24 20:57:52

回答

1

你应该注释注入EntityManager

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

还要检查,存在于你的classpath类org.eclipse.persistence.jpa.PersistenceProvider

相关问题