2015-12-21 12 views
6

में उपलब्ध नहीं है ऐसा लगता है जैसे संसाधन सिंगलटन की @ प्रिडेस्ट्राय विधि के लिए उपलब्ध नहीं हैं।संसाधन @Singleton @Predestroy विधि

@PreDestroy 
public void cleanup() { 
    logger.info("*** Application shutting down. Dropping temporary tables ***"); 
    try { 
     connection = dataSource.getConnection(); 

     Statement statement = connection.createStatement(); 
     statement.execute("drop table TABLE1"); 
     statement.execute("drop table TABLE2"); 
     connection.close(); 
     connection = null; 
    } catch (SQLException sqle) { 
     sqle.printStackTrace(); 
    } 
} 

getConnection करने के लिए कॉल() "No Pool Meta Data object associated with the pool" त्रुटि के साथ विफल। ध्यान दें कि getConnection() कॉल @PostConstruct विधियों में सफल है।

क्या यह एप्लिकेशन सर्वर कार्यान्वयन में एक बग है? यदि नहीं, अस्थायी तालिकाओं को छोड़ने का सबसे शानदार तरीका क्या है?

(का उपयोग करते हुए Glassfish 4.1.1 + डर्बी डीबी डेटा स्रोत glassfish-resources.xml EAR

<resources> 
    <jdbc-resource pool-name="EmbeddedDerbyPool" 
        jndi-name="java:app/jdbc/ActionBazaarDS" /> 
    <jdbc-connection-pool name="EmbeddedDerbyPool" 
          res-type="javax.sql.DataSource" 
          datasource-classname="org.apache.derby.jdbc.EmbeddedDataSource" 
          is-isolation-level-guaranteed="false"> 
     <property name="databaseName" value="memory:action-bazaar-db"/> 
     <property name="createDatabase" value="create"/> 
    </jdbc-connection-pool> 
</resources> 

के साथ तैनात उपयोग कर बनाई गई है।)

अद्यतन:
मैं एक बनाया ग्लासफ़िश https://java.net/jira/browse/GLASSFISH-21476 में बग रिपोर्ट।

उत्तर

1

इस के रूप में एक @Singleton है, @PreDestroy शायद केवल संदर्भ शटडाउन होने पर कहा जाता है, इसलिए संभव है कि पहले से ही dataSourcedestroyed/finalized/closed (यहाँ विशिष्ट मैं datasource के प्रकार पता नहीं है के रूप में नहीं किया जा सकता) इसलिए त्रुटि हुई है ।

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