2012-04-17 8 views
7

इस persistence.xml के साथ:<बहिष्कृत-असूचीबद्ध-वर्ग> झूठी</ बहिष्कृत-असूचीबद्ध-कक्षाएं> काम करने में विफल क्यों हो सकती हैं?

<?xml version="1.0" encoding="UTF-8" ?> 
<persistence 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_1_0.xsd" 
    version="1.0"> 

    <persistence-unit name="ODP_Server_Test" 
     transaction-type="RESOURCE_LOCAL"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <!-- <non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/ODPServerDataSource)</non-jta-data-source> --> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" /> 
      <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:unit-testing;create=true" /> 
      <property name="javax.persistence.jdbc.user" value="" /> 
      <property name="javax.persistence.jdbc.password" value="" /> 
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 
      <property name="eclipselink.target-database" value="DERBY" /> 
     </properties> 
    </persistence-unit> 

</persistence> 

और एक साधारण परीक्षण:

public class RepositoryTest { 
    private static Logger logger = LoggerFactory 
      .getLogger(RepositoryTest.class); 
    private static EntityManagerFactory emf; 
    private EntityManager em; 
    private RepositoryImpl repo = new RepositoryImpl(); 

    @BeforeClass 
    public static void setUp() { 
     try { 
      logger.info("Starting in-memory DB for unit tests"); 
      @SuppressWarnings("unused") 
      Class<?> cls = org.apache.derby.jdbc.EmbeddedDriver.class; 
      DriverManager.getConnection(
        "jdbc:derby:memory:unit-testing;create=true").close(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      fail("Exception during database startup."); 
     } 
     try { 
      logger.info("Building JPA EntityManager for unit tests"); 
      emf = Persistence.createEntityManagerFactory("ODP_Server_Test"); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      fail("Exception during JPA EntityManager instantiation."); 
     } 
    } 

    @AfterClass 
    public static void tearDown() throws SQLException { 
     logger.info("Shutting down JPA"); 
     if (emf != null) { 
      emf.close(); 
     } 
     try { 
      DriverManager.getConnection(
        "jdbc:derby:memory:unit-testing;drop=true").close(); 
     } catch (SQLException ex) { 
      if (ex.getSQLState().equals("08006")) { 
       logger.info("DB shut down"); 
      } else { 
       throw ex; 
      } 
     } 
     fail("DB didn't shut down"); 
    } 

    @Before 
    public void setEM() { 
     em = emf.createEntityManager(); 
     repo.setEntityManager(em); 
    } 

    @After 
    public void flushEM() { 
     if (em != null) { 
      em.flush(); 
      em.close(); 
      em = null; 
     } 

    } 

    @Test 
    public void noBlocksInEmptyDB() { 
     assertThat(repo.findFunBlock(1), is((FunctionalBlock) null)); 
    } 
} 

मैं

[ईएल चेतावनी]: 2012-04-17 15: 08: 18.476-- मेटामोडेल प्रकारों का संग्रह खाली है। मॉडल वर्गों को जावा एसई और कुछ जावा ईई कंटेनर प्रबंधित दृढ़ता इकाइयों के लिए इकाई खोज के दौरान नहीं मिला हो सकता है। कृपया देखें कि आपका इकाई वर्गों या तो <class> तत्वों या एक वैश्विक <exclude-unlisted-classes>false</exclude-unlisted-classes> तत्व

<class> तत्वों का एक बहुत कुछ के साथ <exclude-unlisted-classes>false</exclude-unlisted-classes> बदलने के बाद, यदि समस्या ठीक किया जा सकता है का उपयोग कर persistence.xml में संदर्भित है, लेकिन मैं पसंद करते हैं नहीं करने के लिए हर बार जब मुझे कोई नई इकाई जोड़ने या पुराने को हटाने की आवश्यकता होती है तो persistence.xml को संपादित करना याद रखना होगा। <exclude-unlisted-classes> के साथ संस्करण क्यों काम नहीं करता है?

+6

क्या आपकी 'persistence.xml' और एनोटेटेड कक्षाएं अलग-अलग क्लासपाथ फ़ोल्डर्स में समाप्त हो सकती हैं? Http://stackoverflow.com/questions/4885836/no-autodetection-of-jpa-entities-in-maven-verify – axtavt

+1

देखें, यह काम करता है। धन्यवाद! (सिवाय इसके कि यह '$ {project.build.outputDirectory}' का विस्तार नहीं करेगा और मैंने इसे '../ कक्षाओं 'द्वारा प्रतिस्थापित किया है, थोड़ा बुरा है लेकिन अगर मुझे करना है तो मैं इसके साथ रह सकता हूं।) –

+1

@axtavt आप चाहें इसे उत्तर के रूप में पोस्ट करने के लिए ताकि मैं इसे स्वीकार कर सकूं। –

उत्तर

1

मैं ऐसी ही स्थिति

अगर मैं जेपीए मेटामॉडल उत्पन्न सामना करना पड़ा था, कॉपी सही pacakge में पेस्ट और SVN करने के लिए यह जाँच, और अक्षम मेटामॉडल पीढ़ी, सभी JUnit परीक्षण ठीक थे

अगर मैं मेटामॉडल उत्पन्न JUnit समय में हर निर्माण, साथ - एम्बेडेड glassfish सभी EJB और मेटामॉडल ठीक मिलेगा, लेकिन गैर EJB JUnit असफल हो जायेगी

मैं अपने src/परीक्षण /resources/META-INF/persistence.xml में ऐसा करने के लिए किया था

<persistence-unit name="test-xxx" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <jar-file>file:../classes</jar-file> 
    <shared-cache-mode>ALL</shared-cache-mode> 
    <properties> 
     <property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.oracle.Oracle11Platform"/> 
     <property name="eclipselink.logging.timestamp" value="true"/> 
     <property name="eclipselink.logging.thread" value="true"/> 
     <property name="eclipselink.logging.level" value="FINE"/> 
     <property name="eclipselink.logging.parameters" value="true"/> 
     <property name="eclipselink.logging.logger" value="JavaLogger"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xxx"/> 
     <property name="javax.persistence.jdbc.password" value="xxx"/> 
     <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/> 
     <property name="javax.persistence.jdbc.user" value="xxx"/> 
    </properties> 
</persistence-unit> 
+0

क्या आप वाकई " फ़ाइल जैसे वर्ग पैकगास पास कर सकते हैं: ../ com/package? – webyildirim

+0

यह नहीं कि जावा कैसे काम करता है, आप हमेशा कॉम या संगठन आदि के शीर्ष पर डीआईआर के साथ क्लासपाथ का निर्माण करते हैं। –

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