2015-04-10 2 views
0

Как настроить соединение JNDI DataSource для обычного приложения Java, упакованного в файл .jar?Подключение к источнику данных в Java-приложении

У меня есть DataSource, как это [FooDataSource.xml]:

<datasources> 
<local-tx-datasource> 
    <jndi-name>FooDS</jndi-name> 
    <connection-url>jdbc:postgresql://127.0.0.1:5432/foo</connection-url> 
    <driver-class>org.postgresql.Driver</driver-class> 
    <user-name>admin</user-name> 
    <password>admin</password> 
    <min-pool-size>5</min-pool-size> 
    <max-pool-size>20</max-pool-size> 
</local-tx-datasource> 
</datasources> 

Я поставил этот файл в папку Resouces.

Im пытается инициализировать соединение, как это:

DataSource dataSource = null; 
    InitialContext initialContext = new InitialContext(); 
    dataSource = (DataSource) initialContext.lookup("java:/FooDS"); 
    Connection conn = dataSource.getConnection(); 
    return conn; 

Однако он не работает вообще. Я получаю ошибку, как при звонке InitialContext initialContext = new InitialContext();

javax.naming.NoInitialContextException: Cannot instantiate class: org.osjava.sj.SimpleContextFactory [Root exception is java.lang.ClassNotFoundExcepti 
on: org.osjava.sj.SimpleContextFactory] 
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657) 
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) 
    at javax.naming.InitialContext.init(InitialContext.java:223) 
    at javax.naming.InitialContext.<init>(InitialContext.java:175) 
    at ...DBUtil.getConnection(DBUtil.java:65) 
    at ...DBUtil.getFirstFleetCardId(DBUtil.java:133) 
    at ...sheduler.MainEntrance.execute(MainEntrance.java:76) 
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202) 
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) 
Caused by: java.lang.ClassNotFoundException: org.osjava.sj.SimpleContextFactory 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:249) 
    at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46) 
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654) 
    ... 8 more 

Что мне не хватает?

EDIT2 Теперь им получаю сообщение об ошибке, как это:

java.lang.NullPointerException 
    at ...DBUtil.getConnection(DBUtil.java:67) 
    at ...DBUtil.getFirstFleetCardId(DBUtil.java:128) 
    at ...MainEntrance.execute(MainEntrance.java:76) 
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202) 
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) 

Где линия 67: Connection conn = dataSource.getConnection();

+0

Что вы имеете в виду, если не работаете? Любое исключение/ошибка, которую вы видите? – SMA

+0

@SMA забыли добавить сообщение об ошибке. вопрос обновлен – ilovkatie

ответ

2

Вы пропускаете класс по классам: java.lang.ClassNotFoundException: org.osjava.sj.SimpleContextFactory. Вероятно, вы должны добавить simple-jndi-x.xx.jar в свой путь к классу.

+0

хороший момент, это было частью проблемы, но есть еще, вопрос обновлен – ilovkatie

+0

Что касается вашего обновленного вопроса: ваш источник данных «null». Поэтому я предполагаю, что JDNI не может найти/загрузить указанный источник данных – rmuller