2013-02-20 11 views
5

के लिए प्रोग्रामिंग रूप से एक जेएनडीआई डेटासोर्स बनाना मेरे पास मौजूदा स्प्रिंग वेब-आधारित एप्लिकेशन है जिसमें जेएनडीआई का उपयोग करके परिभाषित डेटा स्रोत हैं, और मैं बीन्स का उपयोग करने के लिए एक स्टैंडअलोन ऐप बनाने की कोशिश कर रहा हूं। मैं स्टैंडअलोन एप्लिकेशन में प्रोग्रामिक रूप से जेएनडीआई एंट्री और डेटाबेस गुण कैसे बना सकता हूं?स्प्रिंग

<bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/jdbc/MyDS" /> 
</bean> 

    public static void main(String[] args) { 

     // this throws an error since the JNDI lookup fails - can I programmatically define the database properties here? 

    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 

    UserService userService = ctx.getBean(UserService.class); 
    User user = userService.findUserById("jdoe"); 

    System.out.println("display name: " + user.getDisplayName()); 
} 

संपादित करें:

मैं कुछ इस तरह की कोशिश की है, लेकिन अब त्रुटि हो रही है "javax.naming.NoInitialContextException: पर्यावरण या प्रणाली संपत्ति में वर्ग नाम निर्दिष्ट करना होगा"

public static void main(String[] args) { 
    setupJNDI(); 

    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 

    UserService userService = ctx.getBean(UserService.class); 
    User user = userService.findUserById("jdoe"); 

    System.out.println("display name: " + user.getDisplayName()); 
} 


private static void setupJNDI() { 
    InitialContext ic; 
    try { 
     ic = new InitialContext(); 
     ic.createSubcontext("java:"); 
     ic.createSubcontext("java:/comp"); 
     ic.createSubcontext("java:/comp/env"); 
     ic.createSubcontext("java:/comp/env/jdbc"); 
     SQLServerConnectionPoolDataSource myDS = new SQLServerConnectionPoolDataSource(); 
     opaDS.setServerName("myserver"); 
     opaDS.setPortNumber(1433); 
     opaDS.setUser("user"); 
     opaDS.setPassword("password"); 

     ic.bind("java:/comp/env/jdbc/MyDS", myDS); 
    } catch (NamingException e) { 
     e.printStackTrace(); 
    } 
} 

उत्तर

5

org.springframework.test निर्भरता के लिए SimpleNamingContextBuilder:

// First create the mock JNDI tree and bind the DS 
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder(); 
DataSource ds = new ComboPooledDataSource(); 
ds.setDriverClass(...); // etc. for uid, password, url 
builder.bind("java:comp/env/jdbc/MyDS" , ds); 
builder.activate(); 

// Then create the Spring context, which should now be able 
// to resolve the JNDI datasource 
ApplicationContext context = new ClassPathXmlApplicationContext("..."); 
के माध्यम से इसके लिए समर्थन है

यह काम करना चाहिए।

चीयर्स,

+0

धन्यवाद ... मैं इसे – acvcu

+0

मैं इस कोशिश की कोशिश करता हूँ, लेकिन त्रुटि हो रही है ' "मुख्य" org.springframework.beans.factory.BeanCreationException सूत्र में अपवाद: त्रुटि नाम के साथ सेम बनाने' क्लास पथ संसाधन [applicationContext.xml] में परिभाषित myDataSource ': init विधि का आमंत्रण विफल हुआ; नेस्टेड अपवाद javax.naming.N.NoInitialContextException: पर्यावरण या सिस्टम प्रॉपर्टी में क्लास नाम निर्दिष्ट करने की आवश्यकता है, या एक एप्लेट पैरामीटर के रूप में, या अनुप्रयोग संसाधन फ़ाइल में: java.naming.factory.initial ' – acvcu

+0

मेरा बुरा, जेएनडीआई पेड़ का होना चाहिए पाठ्यक्रम वसंत संदर्भ बनाने की कोशिश करने से पहले बनाया और सक्रिय किया गया - मैंने तदनुसार जवाब संपादित किया है। –