Jakarta ee 使用glassfish v3时EntityManager错误没有持久性提供程序

Jakarta ee 使用glassfish v3时EntityManager错误没有持久性提供程序,jakarta-ee,jersey,glassfish-3,persistence.xml,Jakarta Ee,Jersey,Glassfish 3,Persistence.xml,我在Eclipse的服务器选项卡中运行GlassFishV3时遇到以下错误 javax.servlet.ServletException: javax.persistence.PersistenceException: No Persistence provider for EntityManager named chatroom 当我试图从@Stateless bean和@Entity运行此代码时。我在最后包含了bean的代码以供参考(尽管我认为这不是问题所在!) 下面是我的persiste

我在Eclipse的服务器选项卡中运行GlassFishV3时遇到以下错误

javax.servlet.ServletException: javax.persistence.PersistenceException: No Persistence provider for EntityManager named chatroom
当我试图从@Stateless bean和@Entity运行此代码时。我在最后包含了bean的代码以供参考(尽管我认为这不是问题所在!)

下面是我的persistence.xml。我试着尽可能地配置它,但我不确定我在做什么。我知道我正在将实体类ChatHistory连接到数据库,但我不确定如何检查与数据库的连接,并确保它正常工作。我已经运行了数据库,并且可以在数据源浏览器中看到它。用户名和密码正确无误


org.eclipse.persistence.jpa.PersistenceProvider
org.janp.castlerock.ChatHistory
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;
    }
}
package org.janp.castlerock;
导入java.util.List;
导入javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.validation.constraints.NotNull;
@实体
公共课聊天历史{
私有int-id;
私人列表消息;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
@NotNull
公共列表getMessages(){
返回消息;
}
公共消息(列出消息){
this.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!";
    }
}
package org.janp.castlerock;
导入java.util.ArrayList;
导入java.util.List;
导入javax.ejb.ejb;
导入javax.ejb.Stateless;
导入javax.persistence.EntityManager;
导入javax.persistence.EntityManagerFactory;
导入javax.persistence.persistence;
导入javax.persistence.Query;
导入javax.ws.rs.GET;
导入javax.ws.rs.Path;
导入javax.ws.rs.products;
@路径(“/聊天室”)
@无国籍
公共课堂聊天室{
聊天历史;
@EJB
ConverterBean ConverterBean;
@得到
@生成(“文本/纯文本”)
公共字符串getClichedMessage(){
EntityManagerFactory=Persistence.createEntityManagerFactory(“聊天室”);
EntityManager em=factory.createEntityManager();
Query q=em.createQuery(“从Todo t中选择t”);
列表消息=q.getResultList();
for(ChatHistory元素:消息){
系统输出打印项次(元素);
}
System.out.println(“Size:+messages.Size());
ArrayList temp=新的ArrayList();
临时添加(“你好世界”);
临时添加(“我很好”);
em.getTransaction().begin();
ChatHistory messagehistory=新建ChatHistory();
messagehistory.setMessages(临时);
em.persist(messagehistory);
em.getTransaction().commit();
em.close();
messages=q.getResultList();
for(ChatHistory元素:消息){
系统输出打印项次(元素);
}
System.out.println(“Size:+messages.Size());
返回“成功!”:“+消息;
//System.out.println(“blahblha”);
//converterBean.dollarToYen(新的BigDecimal(5.0));
//返回“成功!”;
}
}

您应该使用注释插入
EntityManager

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

还要检查类路径中存在的类
org.eclipse.persistence.jpa.PersistenceProvider
,您应该使用注释注入
EntityManager

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

同时检查类路径中存在的类
org.eclipse.persistence.jpa.PersistenceProvider

你必须确保你的persistence.xml在应用服务器中jpa jar/artifacts的META-INF中。它在castlerock->WebContent->META-INF中不确定castlerock,但它应该放在你的jpa类所在的任何地方,或者在你jpa代码的jar META-INF中。castlerock只是项目的名称:)我很确定它在正确的位置。你必须确保你的persistence.xml在你应用服务器的jpa jar/工件的META-INF中。它在castlerock->WebContent->META-INF中。我不确定castlerock,但它应该放在你的jpa类所在的任何地方,或者jpa代码的jar META-INF.castlerock只是项目的名称:)我很确定它在正确的位置。
@Stateless
public class Chatroom 
{  
   @PersistenceContext(unitName = "chatroom")
   private EntityManager entityManager;