2014-06-23 151 views
0

我試圖connect with a database connection pool控制檯程序的JNDI連接池?

[email protected]:~$ 
[email protected]:~$ java -jar NetBeansProjects/Dialer/dist/Dialer.jar 
hello world 
Jun 23, 2014 1:04:39 AM net.bounceme.dur.Dialer <init> 
INFO: {dur.reports.db.jndi.name=jdbc/vehicles, dur.db.jndi.name=jdbc/vehicles, dur.reports.db.type=MYSQL, reports.exportRawData=true, dur.db.type=MYSQL} 
Jun 23, 2014 1:04:39 AM net.bounceme.dur.Dialer <init> 
SEVERE: null 
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662) 
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307) 
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344) 
    at javax.naming.InitialContext.lookup(InitialContext.java:411) 
    at net.bounceme.dur.Connector.<init>(Connector.java:15) 
    at net.bounceme.dur.Dialer.<init>(Dialer.java:19) 
    at net.bounceme.dur.Dialer.main(Dialer.java:26) 

[email protected]:~$ 

我認爲這是可能使用JNDI和連接池的一個控制檯應用程序,而不會是Tomcat,Glassfish的或類似的?

package net.bounceme.dur; 

import java.sql.SQLException; 
import java.util.Properties; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.sql.DataSource; 

public class Connector { 


    public Connector(Properties props) throws NamingException, SQLException { 
     InitialContext ctx = new InitialContext(); 
     //ctx.lookup(null); //???????? 
     DataSource ds = (DataSource) ctx.lookup(props.getProperty("dur.db.jndi.name")); 
    } 

} 

或者,是否需要使用某種服務器或容器?

回答

1

獲取命名服務和DataSource(使用池中的連接)是基於容器的服務。這就是爲什麼你會得到這個例外(沒有IntialContext可用,因爲沒有可用的服務提供它)。您將需要某種容器來提供這些服務。

您可以隨時編寫您自己的連接池邏輯,但您將從一開始就這樣做。

您也可以連接到遠程服務器以獲取InitialContext和其他服務,但我猜這不是你要求的。

+0

因此,它**具有**爲控制檯應用程序的不同類型的連接池?我不想使用容器。 – Thufir

+1

從你所問的意義上說,我會這麼認爲(取決於我是否正確理解你)。連接池實現並未在java中作爲標準實現。它由提供容器的供應商實施。如果您不能/不會使用容器,則必須自行修復連接池。 – DanielBarbarian

+0

這是什麼http://commons.apache.org/proper/commons-dbcp/是用於?我可以將它添加到我的類路徑中? – Thufir