2010-09-07 6 views
10

मैं इसे एम्बेडेड मोड में उपयोग नहीं करना चाहता क्योंकि मैं अन्य बाहरी अनुप्रयोगों को भी एक्सेस करने की अनुमति दे सकता हूं। और मैं उसी समय सर्वर के स्टार्टअप को निष्पादित करना चाहता हूं जैसे कि टोमकैट मेरा एप्लिकेशन लोड करता है (या जब उस मामले के लिए टॉमकैट चलता है)। ऐसा इसलिए है कि मुझे क्लाइंट को मैन्युअल रूप से hsqldb को कमांड या स्क्रिप्ट के साथ चलाने के लिए नहीं कहने से पहले कि वे मेरा युद्ध टॉमकैट में डाल सकें और इसे चलाएं (चीजों को सरल रखने के लिए)।मैं अपने वेब एप्लिकेशन के भीतर सर्वर मोड में hsqldb को कैसे शुरू और रख सकता हूं?

मैं जावा से कमांड भेजकर मुख्य रूप से Server पर कॉल कर सकता हूं, लेकिन यह मुझे एक अनदेखा धागा देगा, मुझे यकीन नहीं है कि इससे कैसे निपटें। क्या ऐसा करने का एक आसान परीक्षण तरीका है?

उत्तर

9

एचएसक्यूएलडीबी दस्तावेज़ीकरण के अनुसार जावा कोड: http://hsqldb.org/doc/2.0/guide/listeners-chapt.html#listeners_appstart-sect से डेटाबेस शुरू करना संभव है। इसलिए जब आप वेब एप्लिकेशन शुरू कर रहे हैं तो डेटाबेस को लोड करने के लिए आप servlet का उपयोग कर सकते हैं।

  1. एक सर्वलेट "InitDatabase" बनाएँ और विधि init()

    @Override 
    public void init() throws ServletException { 
        super.init(); 
        try { 
         System.out.println("Starting Database"); 
         HsqlProperties p = new HsqlProperties(); 
         p.setProperty("server.database.0", "file:/opt/db/crm"); 
         p.setProperty("server.dbname.0", "mydb"); 
         p.setProperty("server.port", "9001"); 
         Server server = new Server(); 
         server.setProperties(p); 
         server.setLogWriter(null); // can use custom writer 
         server.setErrWriter(null); // can use custom writer 
         server.start(); 
        } catch (AclFormatException afex) { 
         throw new ServletException(afex); 
        } catch (IOException ioex) { 
         throw new ServletException(ioex); 
        } 
    } 
    
  2. अपने web.xml में संपत्ति जोड़ने पर डेटाबेस शुरू के लिए कोड डाल: चरणों का पालन किया जाना चाहिए स्टार्ट अप पर लोड करें और इसे 1 पर सेट करें। वेब एप्लिकेशन शुरू होने पर विधि init() को कॉल करने के लिए।

    <servlet> 
        <servlet-name>InitDatabase</servlet-name> 
        <servlet-class>bo.hsqltest.InitDatabase</servlet-class> 
        <load-on-startup>1</load-on-startup> 
    </servlet> 
    

के बाद ऐसा करते हैं वेब अनुप्रयोग एक नया थ्रेड में HSQLDB शुरू कर देंगे। जब एप्लिकेशन बंद हो जाता है तो डेटाबेस को बंद करने के लिए आप InitServlet की विधि नष्ट() को ओवरराइड कर सकते हैं। विधि नष्ट करने में आपको "SHUTDOWN" कमांड को सामान्य एसक्यूएल क्वेरी (जेडीबीसी के माध्यम से) निष्पादित करना होगा।

1

आप एम्बेडेड मोड में किसी भी वेब/ऐप सर्वर पर एचएसक्यूएलडीबी का उपयोग कर सकते हैं और बाहरी वेब को org.hsqldb.server चलाकर इसे एक्सेस करने की अनुमति देते हैं। अपने वेब/ऐप सर्वर पर सर्लेट। बाहरी ऐप्स तब jdbc का उपयोग कर सर्वलेट से कनेक्ट होंगे: hsqldb: http: url टाइप करें।

आप org.hsqldb.server.Server (संस्करण 2.0 वर्ग), या org.hsqldb.Server चलाना चाहते हैं, बिलाव के रूप में एक अलग प्रक्रिया के रूप में, आप के लिए वर्ग org.hsqldb.util.MainInvoker उपयोग कर सकते हैं पहले सर्वर नामक सर्वर के साथ कई वर्गों (जैसे टोमकैट और एचएसक्यूएलडीबी सर्वर) के लिए मुख्य विधि को कॉल करें।

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

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