`
y806839048
  • 浏览: 1081150 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

配置Tomcat JNDI数据源

阅读更多

以下示例基于Spring:

1、在Mysql中建立Spring数据库,数据库中建立user表

配置Tomcat JNDI数据源

2、在tomcat目录下conf\context.xml中的<Context>标签中加入

 

<Resource name="jndi"
        auth="Container"
        type="javax.sql.DataSource"
        password="mysql5"
        username="root"
        driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/spring"
        maxActive="5"
        maxIdle="2"
        maxWait="3000"
    />

3、修改项目的web.xml文件,加入

<resource-ref>
    <res-ref-name>jndi</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

4、在spring配置文件中配置Datasource

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

我们也可以采用下面的方式,但是要加入以下命名空间 :
xmlns:jee="http://www.springframework.org/schema/jee"

xsi:schemaLocation="http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">

<!-- Spring 2.0为获取J2EE资源提供了一个jee命名空间,通过jee命名空间,可以有效地简化J2EE资源的引用。 -->
    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jndi"/>

具体sample如下所示:

配置Tomcat JNDI数据源

User.java

package cn.nevo.model;

import org.springframework.stereotype.Component;

/**
 * Entity
 * @author Administrator
 *
 */
@Component("user")
public class User {

    private String username;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
}

UserDao.java

package cn.nevo.dao;

import cn.nevo.model.User;

public interface UserDao {
    public void save(User user);
}

UserDaoImpl.java

package cn.nevo.dao.impl;

import java.sql.Connection;
import java.sql.SQLException;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.stereotype.Component;

import cn.nevo.dao.UserDao;
import cn.nevo.model.User;

@Component("userDao")
public class UserDaoImpl implements UserDao {

    private DataSource dataSource;

    public DataSource getDataSource() {
        return dataSource;
    }

    //默认是by name注入
    @Resource
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
        System.out.println(dataSource);
    }

    public void save(User user) {
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
            conn.createStatement().executeUpdate("insert into user values (null, '" +user.getUsername()+"')");

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        System.out.println("user saved!");
    }
}

UserService.java

package cn.nevo.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import cn.nevo.dao.UserDao;
import cn.nevo.model.User;

@Component("userService")
public class UserService {
    private UserDao userDao;

    public UserDao getUserDAO() {
        return userDao;
    }

    @Resource(name = "userDao")
    public void setUserDAO(UserDao userDao) {
        this.userDao = userDao;
    }

    public void add(User user) {
        userDao.save(user);
    }
}

LoginServlet.java

package cn.nevo.servlet;

import java.io.IOException;

import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.nevo.model.User;
import cn.nevo.service.UserService;

@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet {

    private User user;

    public User getUser() {
        return user;
    }

    @Resource
    public void setUser(User user) {
        this.user = user;
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        user.setUsername(request.getParameter("username"));

        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
        UserService userService = (UserService)ctx.getBean("userService");
        userService.add(user);
    }

}

bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/jee
           http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">

    <!--
        隐式注册 post-processors 包括了
        AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,
        也包括了前面提到的 RequiredAnnotationBeanPostProcessor。处理我们配置的annotation
    -->
    <context:annotation-config />

    <!--
        要检测这些类并注册相应的bean,需要在XML中包含以下元素,其中'basePackage'是类的公共父包
        (或者可以用逗号分隔的列表来分别指定包含各个类的包)。
    -->
    <context:component-scan base-package="cn.nevo" />

    <!-- 从Tomcat配置的JNDI服务获取数据源-->
    <!--
    <bean id="dataSource"
        class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:comp/env/jndi"/>
    </bean>
     -->

    <!-- Spring 2.0为获取J2EE资源提供了一个jee命名空间,通过jee命名空间,可以有效地简化J2EE资源的引用。 -->
    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jndi"/>
</beans>

index.jsp

<body>
    <form action="loginServlet" method="post">
         UserName:<input type="text" name="username">
        <input type="submit" value="Login">
    </form>
</body>

启动tomcat访问:
配置Tomcat JNDI数据源

 

配置Tomcat JNDI数据源

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics