Spring MVC JNDI连接池错误

时间:2014-04-09 19:34:52

标签: java spring jndi

我正在使用Spring MVC JNDI,我得到了这个例外:

  

异常javax.naming.NameNotFoundException:名称jdbc未绑定在此Context中

我不知道如何解决这个问题。这是我的代码:

的applicationContext.xml

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dbDataSource" ref="dbDataSource" />  
</beans>

<bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/practice"/>
  <property name="lookupOnStartup" value="true"></property>
</bean>

public class EmpDAOImpl implements EmpDAO {
  @Autowired
  private SessionFactory sessionfactory;

  @Autowired
  @Qualifier("dbDataSource")
  private DataSource dataSource;
}

的web.xml

<web-app >
  <resource-ref>
    <description>MySQL Datasource example</description>
    <res-ref-name>java:comp/env/jdbc/practice</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

3 个答案:

答案 0 :(得分:0)

您没有说明如何在容器中配置JNDI资源(例如Tomcat中的server.xmlMETA-INF/context.xml或...)。但<res-ref-name>中的资源名称应为jdbc/practicejndiName bean属性的值也应如此。

这里有几点建议:

答案 1 :(得分:0)

 applicationContext.xml
 <bean id="sessionFactory"                                                                                                     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dbDataSource" ref="dbDataSource" />  
  </bean>
 <bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/practice"/>
     <property name="lookupOnStartup" value="true"></property>
  </bean>

 web.xml
  <resource-ref>
<description>MySQL Datasource example</description>
<res-ref-name>java:comp/env/jdbc/practice</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
 </resource-ref>

公共类EmpDAOImpl实现了EmpDAO {

@Autowired
private SessionFactory sessionfactory;

    @Autowired
     @Qualifier("dbDataSource")
    private DataSource dataSource;

public void addEmp(Employee e){

    this.sessionfactory.getCurrentSession().save(e);

     }
      }

   server.xml
  <server>
  <GlobalNamingResources>
  <Resource name="jdbc/practice"
  global="jdbc/practice"
  auth="Container"
  type="javax.sql.DataSource"
  driverClassName="com.mysql.jdbc.Driver"
  url="jdbc:mysql://localhost:3306/practice"
  username="root"
  password="root123"
  maxActive="100"
  maxIdle="20"
  minIdle="5"
  maxWait="10000"/>
  </GlobalNamingResources>
    </server>

答案 2 :(得分:0)

context.xml中

   <context>
    <ResourceLink name="jdbc/practice"
                global="jdbc/practice"
                auth="Container"
                type="javax.sql.DataSource" />
    </context>