Отсутствует поставщик сохраняемости для ошибки EntityManager с использованием glassfish v3 - PullRequest
1 голос
/ 25 февраля 2012

Я получаю приведенную ниже ошибку на Glassfish v3, запущенном на вкладке сервера Eclipse.

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

Когда я пытаюсь запустить этот код из bean-компонента @Stateless и @Entity. Я включил код компонента в самом конце для справки (хотя я не думаю, что это проблема!)

    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!";
    }
}

1 Ответ

1 голос
/ 21 июня 2013

Вы должны ввести EntityManager с аннотацией

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

также проверьте, что класс org.eclipse.persistence.jpa.PersistenceProvider присутствует в вашем classpath

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...