2011-02-23 8 views
8

Buduję aplikację internetową REST, używając Netbean6.9.1 i JPA EclipseLink.Nieznany komunikat o błędzie klasy encji, mimo że encja jest oznaczona adnotacją @Entity

Emisja skierowana jest mi mimo mojej klasy podmiotu MasatoTable oznaczona Entity adnotacji, otrzymuję błąd:

(java.lang.IllegalArgumentException: Unknown entity bean class: 
    class entity.MasatoTable, please verify that this class 
has been marked with the @Entity annotation.) 

Rzecz kiedy ponownie uruchomić serwer GlassFish3 z NetbeanIDE, że pracuje dla chwilę i jakoś w pewnym momencie pojawia się błąd. Użyłem Toplink Essential i nie miałem problemu, ale zmieniłem EclipseLink i ponownie broniłem persistence.xml (pokazane poniżej) i ten problem zaczął się. Ale nie widzę żadnego błędu kodu, który można myślę ..

MasatoTable.java

@Entity 
@Table(name = "MasatoTable") 
public class MasatoTable implements Serializable { 
...continue code... 

persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="kojoPU"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <non-jta-data-source>jdbc/koga_kojo</non-jta-data-source> 
    <class>entity.MasatoTable</class> 
    <properties> 
     <property name="eclipselink.logging.logger" value="JavaLogger"/> 
     <property name="eclipselink.logging.level.sql" value="FINEST"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://KOGADBSERVER;databaseName=MasatoDB"/> 
     <property name="javax.persistence.jdbc.password" value="foobar"/> 
     <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> 
     <property name="javax.persistence.jdbc.user" value="koga"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

Wygląda na to, że ten sam problem, ale rozwiązaniem biletu jest wycofanie do Toplink z Eclipselink. Czy ktoś rozwiązał problem bez powrotu do toplink?

Unknown entity bean class after hot deploy: netbeans 6.9 + glassfish 2.1 + eclipselink jpa 2.0

UPDATE

Jeśli chodzi o moje badania idzie w warunkach niniejszej sprawy, wygląda jak błąd został rozwiązany i stałe?

https://bugs.eclipse.org/bugs/show_bug.cgi?id=288141

nie jestem wystarczająco kompetentny, aby zrozumieć całość, ale istnieje kilka faktów znalazłem:

Netbean6.9.1 zapewnia EclipseLink 2.0.1 natomiast najnowsza wersja to 2.2.0

Pobrałem najnowszą wersję i umieściłem je w katalogu lib, a następnie ponownie wdrożono, ale bez powodzenia, problem nadal występuje. Nie jestem pewien, czy robiłem coś w niewłaściwy sposób.

UPDATE po komentarzu Jamesa

Poniżej jest klasa używam do tworzenia singleton EntityManagerFactory i jak jest on używany.

package common; 

import java.util.Date; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 

public class EmProvider { 

    private static final String DB_PU = "kojoPU"; //工場DB 

    public static final boolean DEBUG = false; 

    private static final EmProvider singleton = new EmProvider(); 

    private EntityManagerFactory emf; 

    private EmProvider() {} 

    public static EmProvider getInstance() { 
     return singleton; 
    } 


    public EntityManagerFactory getEntityManagerFactory() { 
     if(emf == null) { 
      emf = Persistence.createEntityManagerFactory(DB_PU); 
     } 
     if(DEBUG) { 
      System.out.println("factory created on: " + new Date()); 
     } 
     return emf; 
    } 

    public void closeEmf() { 
     if(emf.isOpen() || emf != null) { 
      emf.close(); 
     } 
     emf = null; 
     if(DEBUG) { 
      System.out.println("EMF closed at: " + new Date()); 
     } 
    } 

}//end class 

Jak stosować go:

EntityManager em = null; 
    Object out = null; 
    try { 
     em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager(); 
     Query query = em.createNativeQuery(sql); 

     ....some code here 
    } 
    finally { 
     if(em != null) { 
      em.close(); 
     } 
    } 

Patrząc na mojego kodu, myślę ... Ja nie zamykając EntityManagerFactory (jestem zamykania EntityManager w końcu chociaż)

Również znalazłem błąd "unknown entity bean class" w temacie pojawia się na pewno z następującym działaniem.

  1. Deploy web app przez Netbean (Spowoduje to otwarcie przeglądarki)

  2. zmienić niektóre kod w Netbean IDE i zapisz go. Następnie Netbean automatycznie ponownie uruchomi się, gdy tylko naciśniesz przycisk zapisu (jest to tak zwane "hot deploy" ???)

  3. Powróć do przeglądarki i wykonaj pewne czynności, np. Dodaj dane obejmujące EntityManager.

Wygląda na to, że wystąpił błąd, ponieważ nie zamykam fabryki podmiotu zarządzającego przy wdrażaniu na gorąco? Muszę to zbadać.

+0

Ale nie powinienem zamykać instancji EntityManagerFactory, ponieważ jest to singleton. Powinienem go zamknąć i utworzyć nową instancję podczas instalacji na gorąco ...? wpada w zakłopotanie –

Odpowiedz

6

W jaki sposób tworzysz swoją jednostkę EntityManager/Factory, czy jest ona zarządzana lub nie jest zarządzana?

Jeśli nie jest zarządzany, to wierzę, że EclipseLink nie zostanie powiadomiony w żaden sposób o przeniesieniu, więc nadal będzie przechowywany stary obiekt EntityManagerFactory, ponieważ nigdy nie jest zamknięty. Czy możesz upewnić się, że zamknąłeś EntityManagerFactory po uruchomieniu na gorąco?

Można ustawić jednostkę trwałości jako zarządzaną jednostkę trwałości, która może rozwiązać problem.

Tak czy inaczej, proszę zaloguj się do tego błędu ze szczegółami w EclipseLink i Glassfish, ponieważ problem ten powinien być śledzony.

myślę, że może to być błąd, https://bugs.eclipse.org/bugs/show_bug.cgi?id=326552

proszę głosować na tego błędu i zawierają informacje w nim.

+0

Opublikowałem aktualizację w moim obszarze pytań, proszę spojrzeć jako odpowiedź;) –

2

Rozwiązanie here polega na użyciu JPA 1.0, jeśli 2.0 nie jest wymagany.

+0

Tak, podłączyłem adres URL już w pytaniu. Poszukuję odpowiedzi, jeśli jakakolwiek poprawka została wykonana lub jakakolwiek praca z wyjątkiem powrotu do Toplink, czyli JPA 1.0 –

+0

Szukałem dużo, ale wciąż nie mogę znaleźć żadnych dobrych informacji. –

+0

Niestety, zgadzam się, wygląda na to, że problem związany jest z kombinacją netbeans, glassfish, eclipselink, JPA2 i Toplink. –

-1

dzisiaj w obliczu tego samego proble, ale rozwiązany w persistence.xml

  1. proszę skontaktować się z nazwą klasy podmiot pakietu są prawidłowo zdefiniowane w persistence.xml.
+0

Czy możesz wysłać próbkę? –

Powiązane problemy