我正在使用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>
答案 0 :(得分:0)
您没有说明如何在容器中配置JNDI资源(例如Tomcat中的server.xml
或META-INF/context.xml
或...)。但<res-ref-name>
中的资源名称应为jdbc/practice
,jndiName
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>