2010-02-27 116 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