2011-02-23 15 views
8

के साथ चिह्नित है, मैं नेटबीन 6.9.1 और जेपीए एक्लिप्ससेंक का उपयोग कर आरईएसटी वेब ऐप बना रहा हूं।अज्ञात इकाई वर्ग त्रुटि संदेश, भले ही इकाई @Entity एनोटेशन

मुद्दा मैं का सामना करना पड़ रहा हूँ है यहां तक ​​कि मेरी इकाई वर्ग हालांकि MasatoTable इकाई एनोटेशन के साथ चिह्नित है, मैं त्रुटि:

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

बात है जब मैं NetbeanIDE से GlassFish3 सर्वर को पुनः आरंभ, यह के लिए काम करता थोड़ी देर और कुछ बिंदु पर, त्रुटि दिखने लगती है। मैं टॉपलिंक आवश्यक का उपयोग करता था और मुझे कोई समस्या नहीं थी, लेकिन मैंने एक्लिप्ससेंक में बदल दिया है और persistence.xml को फिर से डिफाईन्ड किया है (नीचे दिखाया गया है) और यह समस्या शुरू हुई। लेकिन मैं किसी भी कोड त्रुटि है कि मैं के बारे में सोच सकते हैं नहीं दिख रहा है ..

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> 

एक ही मुद्दा है, लेकिन ऐसा लगता है कि टिकट का समाधान Eclipselink से टॉपलिंक पर रोलबैक करना है। क्या किसी ने टॉप्लिंक पर वापस रोल किए बिना इस मुद्दे को हल किया है?

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

अद्यतन

जहाँ तक मेरी अनुसंधान इस मामले के संदर्भ में चला जाता है, बग की तरह लग रहे संबोधित किया गया है और तय हो गई?

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

मैं काफी जानकार पूरी बात को समझने के लिए नहीं कर रहा हूँ लेकिन वहाँ कुछ तथ्यों मैंने पाया हैं: जबकि नवीनतम संस्करण 2.2.0

है

Netbean6.9.1 EclipseLink 2.0.1 प्रदान करता है

मैंने नवीनतम संस्करण डाउनलोड किया और उन्हें lib dir में फिर से तैनात किया लेकिन कोई किस्मत नहीं, यह मुद्दा अभी भी जारी है। यकीन नहीं है कि मैंने गलत तरीके से चीजें की हैं। जेम्स टिप्पणी

नीचे के बाद

अद्यतन वर्ग मैं सिंगलटन EntityManagerFactory बनाने के लिए उपयोग है और यह कैसे किया जा रहा है।

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 

यह कैसे किया जाता है:

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(); 
     } 
    } 

मेरे कोड को देख कर, मुझे लगता है कि ... मैं EntityManagerFactory बंद करने नहीं कर रहा हूँ (मैं अंत में हालांकि में EntityManager बंद करने कर रहा हूँ)

मुझे भी यह पाया गया कि निम्नलिखित क्रियाओं के साथ निश्चित रूप से "unknown entity bean class" त्रुटि दिखाई देती है।Netbean के माध्यम से

  1. तैनात वेब अनुप्रयोग (यह ब्राउज़र खुल जाएगा)

  2. बदलें Netbean IDE में कुछ कोड और उसे सहेजें। फिर जैसे ही आप सेव बटन दबाते हैं (इसे "हॉट तैनाती" कहा जाता है, तो नेटबीन ऑटो-री-तैनाती करेगा ???

  3. ब्राउज़र पर वापस जाएं और कुछ डेटा जोड़ें जैसे एंटीटी मैनेजर शामिल है।

ऐसा लगता है कि त्रुटि होती है क्योंकि मैं गर्म-तैनाती के दौरान इकाई प्रबंधक कारखाना बंद नहीं कर रहा हूं? मुझे जांच करनी है।

+0

लेकिन मुझे सिंगलटन होने के बाद EntityManagerFactory उदाहरण बंद नहीं करना चाहिए। मुझे केवल इसे बंद करना चाहिए और गर्म-तैनाती के दौरान नया उदाहरण बनाना चाहिए ..? भ्रमित हो रहा है –

उत्तर

6

आप अपनी EntityManager/Factory कैसे बना रहे हैं, क्या यह प्रबंधित या गैर-प्रबंधित है?

यदि यह प्रबंधित नहीं होता है, तो मेरा मानना ​​है कि ग्रहण लिंक्स को पुनर्निर्माण के किसी भी तरीके से अधिसूचित नहीं किया जाएगा, इसलिए अभी भी पुरानी EntityManagerFactory कैश हो जाएगी क्योंकि यह कभी बंद नहीं होता है। क्या आप यह सुनिश्चित कर सकते हैं कि गर्म तैनाती के बाद आप EntityManagerFactory को बंद कर दें?

आप दृढ़ता इकाई को एक प्रबंधित दृढ़ता इकाई बना सकते हैं, जो इस मुद्दे को हल कर सकता है।

किसी भी तरह से, कृपया इस के लिए एक्लिप्ससेंक और ग्लासफ़िश में विवरण के साथ एक बग लॉग करें, क्योंकि इस समस्या को ट्रैक किया जाना चाहिए।

मैं इस बग हो सकता है लगता है, https://bugs.eclipse.org/bugs/show_bug.cgi?id=326552

इस बग लिए वोट करें, और यह अपनी जानकारी शामिल है।

+0

मैंने अपने प्रश्न क्षेत्र पर कुछ अपडेट पोस्ट किया है, कृपया प्रतिक्रिया के रूप में देखें;) –

2

समाधान here यदि 2.0 आवश्यक नहीं है तो जेपीए 1.0 का उपयोग करना है।

+0

हां, मैंने पहले से ही प्रश्न में यूआरएल को जोड़ा है .. अगर कोई फिक्स किया गया है या टॉपलिंक पर वापस रोलिंग को छोड़कर मैं कोई काम करता हूं तो जेपीए 1.0 –

+0

है, मैंने अभी भी बहुत कुछ खोजा है लेकिन अभी भी कोई अच्छी जानकारी नहीं मिल रही है। –

+0

अफसोस की बात है कि मैं सहमत हूं, ऐसा लगता है कि इस मुद्दे को नेटबीन, ग्लासफ़िश, ईक्लीपसेलिंक, जेपीए 2 और टॉपलिंक के कुछ संयोजनों के साथ करना है। –

-1

आज मैं एक ही समस्याओं का सामना करना पड़ा, लेकिन मैं

  1. persistence.xml में सही कृपया इकाई वर्ग के नाम और पैकेज के साथ जांच सही ढंग से persistence.xml में परिभाषित कर रहे हैं।
+0

के साथ क्या आप कुछ नमूना पोस्ट कर सकते हैं? –

संबंधित मुद्दे