2009-07-05 14 views
7

पर जेएनडीआई डेटासोर्स का उपयोग करके डीबी कनेक्शन प्राप्त नहीं कर सकता है। मैं जेबॉसैस 5.1.0 के लिए जावा वेबपैप्स बनाने का अध्ययन कर रहा हूं और मैं डेटा एक्सेस के लिए जेएनडीआई डेटासोर्स का उपयोग करके जेबीओएसएएस 5 पर एक बहुत ही बुनियादी जेएसपी वेब ऐप बनाने की कोशिश कर रहा हूं ।जेबीएसआई

जब एक कनेक्शन मैं इस अपवाद मिल खोलने की कोशिश कर:

21:42:52,834 ERROR [STDERR] Cannot get connection: org.jboss.util.NestedSQLException: 
Unable to get managed connection for hedgehogDB; - nested throwable: 
(javax.resource.ResourceException: Unable to get managed connection for hedgehogDB) 

डेटा स्रोत ठीक तैनात किया जाता है, मैं JMX-सांत्वना & डेटाबेस फ़ाइलों को ठीक बनाया जा रहा है में देख सकते हैं।

प्रश्न में

जावा कोड जहां अपवाद फेंक दिया जाता है:

static public Connection getHedgehogConnection() 
{ 
    Connection result = null; 
    try 
    { 
     String DS_Context = "java:comp/env/jdbc/hedgehogDB"; 

     Context initialContext = new InitialContext(); 

     if (initialContext == null) 
      log("JNDI problem. Cannot get InitialContext."); 

     DataSource datasource = (DataSource)initialContext.lookup(DS_Context); 

     if (datasource != null) 
      result = datasource.getConnection(); 
     else 
      log("Failed: datasource was null"); 
    } 
    catch(Exception ex) 
    { 
     log("Cannot get connection: " + ex); 
    } 

    return result; 
} 

web.xml:

<web-app> 
    <resource-ref> 
    <res-ref-name>jdbc/hedgehogDB</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref> 
</web-app> 

jboss-web.xml:

<jboss-web> 
    <resource-ref> 
     <res-ref-name>jdbc/hedgehogDB</res-ref-name> 
     <jndi-name>java:/hedgehogDB</jndi-name> 
    </resource-ref> 
</jboss-web> 

hedgehogdb-ds.xml

<datasources> 
    <local-tx-datasource> 
     <jndi-name>hedgehogDB</jndi-name> 
     <connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}hedgehogDB</connection-url> 
     <driver-class>org.hsqldb.jdbcDriver</driver-class> 
     <user-name>sa</user-name> 
     <password></password> 
     <min-pool-size>5</min-pool-size> 
     <max-pool-size>20</max-pool-size> 
     <idle-timeout-minutes>0</idle-timeout-minutes> 
     <track-statements/> 
     <security-domain>HsqlDbRealm</security-domain> 
     <prepared-statement-cache-size>32</prepared-statement-cache-size> 
     <metadata> 
     <type-mapping>Hypersonic SQL</type-mapping> 
     </metadata> 
     <depends>jboss:service=Hypersonic,database=hedgehogDB</depends> 
    </local-tx-datasource> 

    <mbean code="org.jboss.jdbc.HypersonicDatabase" 
    name="jboss:service=Hypersonic,database=hedgehogDB"> 
    <attribute name="Database">hedgehogDB</attribute> 
    <attribute name="InProcessMode">true</attribute> 
    </mbean> 

</datasources> 

यह इस माहौल में मेरा पहला समय है और मुझे संदेह है कि मुझे कुछ मूलभूत याद आ रही है।

उत्तर

0

यह पता चल:

अपराधी hedgehogdb-ds.xml में यह था:

<security-domain>HsqlDbRealm</security-domain> 

HsqlDbRealm एक अलग डी एस & के लिए कॉन्फ़िगर किया गया था कनेक्शन विफल पैदा कर रहा था।

0

अपना कोड देखकर, ऐसा लगता है कि आपको डेटासोर्स सही तरीके से मिलता है - अन्यथा यह शून्य होगा। तो समस्या तब होती है जब आप कनेक्शन प्राप्त करने का प्रयास करते हैं। ,

jdbc:hsqldb:file:${jboss.server.data.dir}${/}hypersonic${/}hedgehogDB 

और एक सामान्य कोडिंग टिप्पणी के रूप में, (1) एक मानक प्रवेश पैकेज का उपयोग, बल्कि एक देसी की तुलना में ":

HSQLDB docs को देखते हुए, ऐसा लगता है कि अपने URL एक" फाइल "घटक की जरूरत है लॉग अप करें "विधि, और (2) अपवाद लॉग करते समय, लॉगर कॉल (लॉग 4 जे और कॉमन्स लॉगिंग, शायद अन्य दोनों द्वारा समर्थित) का उपयोग करें जो एक पैरामीटर के रूप में अपवाद लेता है (ताकि आपको पूर्ण स्टैक ट्रेस मिल सके)।

+0

फ़ाइल - अजीब, उदाहरण मैं प्रयोग देखा है में से कोई भी कि, यह कनेक्शन की jdbc DriverManager शैली के लिए आवश्यक हो सकता है, इसे बदलने से अधिक अपवाद – Dana

+0

लॉग 4 जे अनुस्मारक के लिए धन्यवाद, मेरा बुरा परीक्षण कोड :-( – Dana

1

यह Jboss6 में -ds.xml उपयोग में < आवेदन से प्रबंधित-सुरक्षा /> के बजाय < सुरक्षा-डोमेन के लिए संभव भी है>, पट्टे पर