2013-02-20 23 views
5

JNDI kullanılarak tanımlanmış veri kaynakları olan bir Spring web tabanlı uygulamasına sahibim ve fasulyeleri kullanmak için bağımsız bir uygulama oluşturmaya çalışıyorum. Bağımsız uygulamada JNDI giriş ve veritabanı özelliklerini programsal olarak nasıl oluşturabilirim?İlkbahar için bir JNDI DataSource'ı programlı olarak oluşturma

<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()); 
} 

DÜZENLEME: ": çevre veya sistem özelliğinde sınıf adını belirtmek için Need 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(); 
    } 
} 

cevap

5

böyle bir şey çalıştı, ancak şimdi hata alıyorum

org.springframework.test bağımlılığının, bunun için SimpleNamingContextBuilder:

aracılığıyla desteği vardır.

Bu işe yaramalı.

Alkış,

+0

Teşekkürler ... ben o bunu denedim – acvcu

+0

çalışacağım ancak hata alıyorum ' 'ana' org.springframework.beans.factory.BeanCreationException dizisindeki İstisna: Hata adıyla fasulye yaratma' myDataSource 'sınıf yolu kaynağında tanımlandı [applicationContext.xml]: Init yönteminin çağrılması başarısız oldu; iç içe istisna javax.naming.NoInitialContextException: Ortam veya sistem özelliği veya bir uygulama parametresi olarak veya bir uygulama kaynak dosyasında sınıf adı belirtmeniz gerekir: java.naming.factory.initial ' – acvcu

+0

Benim kötü, JNDI ağacı Bahar bağlamını oluşturmaya çalışmadan önce kurs oluşturulmalı ve etkinleştirilmelidir - cevabı buna göre düzenledim. –

İlgili konular