tomcat 报错:
Exception in thread "main" [olr] INFO [main] org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(282) | Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@d19bc8: defining beans [dataSource,sessionFactory]; root of factory hierarchy
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [applicationContext.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
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(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:123)
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:85)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:121)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:146)
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:93)
at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)
at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:197)
at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:184)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1198)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1167)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:285)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.context.support.ClassPathXmlApplicationContext. <init>(ClassPathXmlApplicationContext.java:122)
at org.springframework.context.support.ClassPathXmlApplicationContext. <init>(ClassPathXmlApplicationContext.java:66)
at test.main(test.java:13)
server.xml 数据源配置
<Resource name="jdbc/olr"     
        auth="Container"         
        type="javax.sql.DataSource"         
        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"         
        url="jdbc:sqlserver://localhost:1433;databaseName=restaurant"         
        username="sa"         
        password="311219"         
        maxActive="100"         
        maxIdle="30"         
       maxWait="10000" />
context.xml 配置
<ResourceLink global="jdbc/olr" name="jdbc/olr" type="javax.sql.DataSource"/>
application.xml配置
<bean id="dataSource"
        class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="/jdbc/olr"></property>
        <property name="resourceRef" value="true"></property>
    </bean>
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.SQLServerDialect
                </prop>
                <prop key="hibernate.connection.autocommit">true</prop>
                <prop key="hibernate.show_sql">false</prop>
            </props>
        </property>
        <property name="mappingResources">
            <list>
                <value>org/olr/model/HistoryRcd.hbm.xml</value>
                <value>org/olr/model/Dish.hbm.xml</value>
                <value>org/olr/model/User.hbm.xml</value>
                <value>org/olr/model/ReservationRcd.hbm.xml</value>
                <value>org/olr/model/Available.hbm.xml</value>
                <value>org/olr/model/SysUser.hbm.xml</value>
            </list>
        </property>
    </bean>

解决方案 »

  1.   

    仔细看看SPRING里的JNDI 配置 <bean id="dataSource"
            class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="/jdbc/olr"></property>
            <property name="resourceRef" value="true"></property>
        </bean>
        <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource">
                <ref bean="dataSource" />
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">
                        org.hibernate.dialect.SQLServerDialect
                    </prop>
                    <prop key="hibernate.connection.autocommit">true</prop>
                    <prop key="hibernate.show_sql">false</prop>
                </props>
            </property>
            <property name="mappingResources">
                <list>
                    <value>org/olr/model/HistoryRcd.hbm.xml</value>
                    <value>org/olr/model/Dish.hbm.xml</value>
                    <value>org/olr/model/User.hbm.xml</value>
                    <value>org/olr/model/ReservationRcd.hbm.xml</value>
                    <value>org/olr/model/Available.hbm.xml</value>
                    <value>org/olr/model/SysUser.hbm.xml</value>
                </list>
            </property>
        </bean>
      

  2.   

    仔细 看看SPRING 里的JNDI 的配置 
      

  3.   

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
    <value>java:comp/env/jdbc/olr</value>
    </property>
    </bean>OK  就这样的 如果还是不行联系
      

  4.   

    我的方法是
    第一步:conf/ context.xml,打开context.xml进行修改:在<context> </context>中加入 <Resource name="jdbc/test"   
       auth="Container"   
       type="javax.sql.DataSource"   
       driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"   
       url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=stu"   
       username="sa"
       password=""
       maxActive="10"   
    maxIdle="3"   
       maxWait="10000" />
    第二步
    :在tomcat 目录的lib目录放对应的驱动包

    第三步
    : <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName"> 
    <value>java:comp/env/jdbc/olr </value> 
    </property> 
    </bean> 
      

  5.   

    呦!!嗯!GOOD!个人认为用TOMCAT要在JNDI地址加上java:comp/env!
      

  6.   

    <property name="jndiName" value="/jdbc/olr"></property>
    <property name="jndiName" value="jdbc/olr"></property>
      

  7.   

    spring配置jndi 在name名称前加上java:comp/env
      

  8.   

    spring配置jndi 在name名称前加上java:comp/env
      

  9.   

    java:comp/env 是前缀.一定要加的.
      

  10.   

    [Quote=引用 12 楼 vivi8233 的回复:]
    spring配置jndi 在name名称前加上java:comp/env
    [/Quote