2010-02-27 155 views
1

我想從我的Spring項目(在springtoolsuite)內創建MySQL數據源豆,我想 訪問MySQL JNDI(由JBoss application server運行)。訪問MySQL的數據源豆春季

我的bean聲明

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton" > 
<property name="jndiName" value="java:/MySqlDS" /> 
<property name="resourceRef" value="true" /> 

而且從JBoss的控制檯:

java: Namespace 
+- MySqlDS (class: org.jboss.resource.adapter.jdbc.WrapperDataSource) 

然而,當我跑我的測試應用程序,我得到了下面。我做錯了什麼?

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [/workspace-sts/test1/cspringbean.xml]: Invocation of init method failed; nested exception is 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 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1401) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:540) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416) 
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140) 
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84) 
    at com.don22.EscortIdol.main(EscortIdol.java:13) 
Caused by: 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:645) 
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) 
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325) 
    at javax.naming.InitialContext.lookup(InitialContext.java:392) 
    at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154) 
    at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87) 
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152) 
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178) 
    at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95) 
    at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105) 
    at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:201) 
    at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:187) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1460) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1398) 
    ... 12 more 
+2

這看起來很喜歡你的應用程序實際上並沒有在JBoss運行。 – skaffman 2010-02-28 12:12:42

+0

這是正確的,應用程序不在JBoss中運行,我認爲任何應用程序都可以從JBoss訪問JNDI資源? 當我真的在JBoss中運行一個Web應用程序時,我可以很好地獲取java:/ MySqlDS的JNDI對象。 那麼,如果我的應用程序只是一個不在JBoss中運行的控制檯應用程序,我如何從JBoss訪問JNDI名稱?這甚至有可能嗎? – portoalet 2010-02-28 12:31:50

回答

0

javax.naming.NoInitialContextException: 需要 環境或系統屬性指定的類名,或 一個applet參數,或在 應用程序資源文件: java.naming.factory。初始

此消息的堆棧跟蹤使我相信,要麼你沒有設立一個JNDI數據源池在JBoss中或您的JNDI名稱不正確。同時檢查。

更新:您的應用程序如何使用JBOSS進行JNDI查找?如果您沒有部署在應用服務器中,那麼您應該使用DriverManagerDataSource,而不是JNDI數據源。

+0

我沒有從JBoss內部運行我的應用程序,它只是一個控制檯Spring應用程序,它嘗試使用JBoss內部運行的JNDI訪問MySQL。不知道是否有可能? – portoalet 2010-02-28 12:33:43

+1

您的應用程序如何使用JBOSS進行JNDI查找?如果您未部署在應用服務器中,那麼您應該使用DriverManagerDataSource,而不是JnidDataSource。 – duffymo 2010-02-28 13:33:55

+0

所以我不能訪問JNDI,如果我沒有部署在JBoss中? 使用DriverManagerDataSource很好,但我沒有使用資源池。 – portoalet 2010-02-28 13:39:25