Java Application中的数据源连接

时间:2015-04-10 11:16:31

标签: java datasource jndi

如何为打包到.jar文件中的常规Java应用程序配置JNDI DataSource连接?

我有像[[{1}}]这样的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

然而它根本不起作用。我在调用 DataSource dataSource = null; InitialContext initialContext = new InitialContext(); dataSource = (DataSource) initialContext.lookup("java:/FooDS"); Connection conn = dataSource.getConnection(); return conn;

时收到这样的错误
InitialContext initialContext = new InitialContext();

我失踪了什么?

EDIT2 现在我得到这样的错误:

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

第67行是: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)

1 个答案:

答案 0 :(得分:2)

您在类路径上缺少一个类:java.lang.ClassNotFoundException: org.osjava.sj.SimpleContextFactory。您可能应该在类路径中添加simple-jndi-x.xx.jar