论坛首页 Java企业应用论坛

EJB3+spring2.5+struts2和ejb3+servlet增,删,改,查实现!

浏览 11349 次
精华帖 (1) :: 良好帖 (1) :: 新手帖 (9) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-10-26  
EJB3整合struts2和spring2.5实现增,删,改,查功能!
EJB3整合Servlet,jsp实现增删改查功能!
开发环境 :myeclipse7.0
web服务器:jboss4.2.1
数据库:mysql5.0
附上部分源代码
 
package cn.ljz.dao.EJBBeanDaoImpl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.ejb.Remote;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import cn.ljz.dao.UserDao;
import cn.ljz.model.User;

/**
 * @theme EJB无状态bean,对数据库进行增,删,改,查
 * @author ljz
 * @since 2010/10/24
 * @version 1.0
 */
@Stateless
@Remote(UserDao.class)
@TransactionManagement(TransactionManagementType.CONTAINER)
public class UserDaoImpBean implements UserDao {
	@PersistenceContext(unitName = "Struts2EJBPU")
	private EntityManager em;
	@Resource
	private SessionContext ctx;

	
	public UserDaoImpBean() {

	}

	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public int addUser(User user) {
		if (jpaTemplate(user, "add") == 1) {
			return 1;// 返回1表示成功插入数据库
		} else {
			return 0;// 返回0表示未成功的插入数据库
		}

	}

	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public int delete(int id) {
		if (jpaTemplate(this.queryUser(id, "single", new User()).get(0),"delete") == 1) {
			return 1;
		}// 返回1表示成功插入数据库 }
		else {
			return 0;// 返回0表示未成功的插入数据库 }
		}

	}

	// 根据不同的flag值查询用户,如果flag为single则根据id查询用户,如果等于all则查询所有的用户,
	// 如果u对象不等于空则表示根据u对象的用户名和密码查询
	@SuppressWarnings("unchecked")
	public List<User> queryUser(int id, String flag, User u) {
		List<User> userResultList = new ArrayList<User>();
		Query query = null;
		try {
			if (flag.equals("single")) {
				User user = em.find(User.class, id);
				userResultList.add(user);

			} else if (flag.equals("all")) {
				// 这个问题我觉得很奇怪,按道理应该是对对象进行操作,应该改为select u from User
				// u,可是这样写的话报错,只能用下面的写法才正确
				query = em.createQuery("select u from t_user u");
				userResultList = (List<User>) query.getResultList();
			} else if (flag.equals("userNameAndPassword")) {
				if (u != null) {
					query = em.createQuery("select u from t_user u where u.userName = '"+ u.getUserName()+ "' and u.password = '"+ u.getPassword() + "'");
userResultList = (List<User>) query.getResultList();
				}
			} else if(flag.equals("userName")){
				if(u!=null){
				query = em.createQuery("select u from t_user u where u.userName = '"+ u.getUserName()+"'");
				userResultList = (List<User>)query.getResultList();
				}
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return userResultList;
	}

	public int updateUser(User user) {
		if (jpaTemplate(user, "update") == 1) {
			return 1;// 返回1表示成功更新数据库记录
		} else {
			return 0;// 返回0表示未成功更新数据记录
		}
	}

	/**
	 * @param user
	 *            User对象
	 * @param flag
	 *            操作标志,如果为add则表示添加操作,如果为delete则表示删除操作
	 * @return 1或者0 返回1表示操作成功, 返回0表示操作失败
	 */
	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public int jpaTemplate(User user, String flag) {
		String exceptionSource = null;// 异常来源,比如来源于添加用户!或者是删除用户
		try {
			if (flag.equals("add")) {
				exceptionSource = "添加用户";
				em.persist(user);
			} else if (flag.equals("update")) {
				exceptionSource = "更新用户";
				em.merge(user);
			} else if (flag.equals("delete")) {

				exceptionSource = "删除用户"; try {
				User u = user;
				em.merge(u);
				em.remove(u);

			}
		}

		catch (Exception ex) {
			ctx.setRollbackOnly();
			System.out.println(exceptionSource + "出现异常:" + ex.getMessage());
			return 0;// 返回0表示未成功插入数据库
		}
		return 1;
	}
}
 

<?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:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
	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.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
           http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
           
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>WEB-INF/jboss.properties</value>			
			</list>
		</property>
	</bean>       

	<util:properties id="evn" location="/WEB-INF/jndi.properties"></util:properties>

	<!-- 注入jndi-->
	<jee:jndi-lookup jndi-name="${cn.ljz.dao.userDao}" id="userDaoImpBean"
		lookup-on-startup="true" cache="true" proxy-interface="cn.ljz.dao.UserDao"
		environment-ref="evn">
	</jee:jndi-lookup>

	<!--  导入资源文件-->
	<import resource="user_beans.xml" />



</beans>


源代码下载http://ljz0898.iteye.com/blog/794052
   发表时间:2010-10-26  
希望对刚开始学习ejb3的人有帮助!
0 请登录后投票
   发表时间:2010-10-26   最后修改:2010-10-26
形式主义
什么东西都要用上spring
ejb3了要spring做什么

希望不要误导新人

你非要用action --->service--->Dao这种罗唆的模式的话
那么
action=struts2
service==remote sesssionbean
dao==local sessionbean

有spring什么事情
0 请登录后投票
   发表时间:2010-10-26  
southgate 写道
形式主义
什么东西都要用上spring
ejb3了要spring做什么

希望不要误导新人

你非要用action --->service--->Dao这种罗唆的模式的话
那么
action=struts2
service==remote sesssionbean
dao==local sessionbean

有spring什么事情

不能说用ejb3就不用spring 因为他们各有优点,应该把他们的优点整合起来才达到最优!
比如:通过Spring暴露出服务,将服务配置到Spring的IOC容器里
     在自己的运行环境里访问到Spring的IOC容器,能够轻松使用Spring容器里所配置的服务
0 请登录后投票
   发表时间:2010-10-26  
嗯。正准备学习下EJB3呢。对EJB还没概念的。
0 请登录后投票
   发表时间:2010-10-27  
Struts有一个ejb3的插件,只要在webapp中加上这个插件的jar包,就可以在拦截器、Action中直接使用类似下面的注解了,根本不需要spring。

@EJB
private HelloBean bean;

0 请登录后投票
   发表时间:2010-10-27  
大牛们进来提点意见就是,别那个太。。。,支持LZ的教学贴~~~~~~~
0 请登录后投票
   发表时间:2010-10-27  
spring没必要和ejb3结合
0 请登录后投票
   发表时间:2010-10-27  
不是太那啥,我觉得有些观念上的问题是需要纠正。
spring确实和EJB基本属于替代的关系,这样的结构容易误导新人。
不如出个struts2+ejb3的更有意义。。。
当然我也不是说LZ故意这样,有时候自己也没意识到的
0 请登录后投票
   发表时间:2010-10-27  
想说说为什么我觉得LZ的spring+ejb是多余的。
用spring的主要是ioc,用ejb最大好处是独立部署,分部式部署。
假如你把ejb的服务注入到spring中了,逻辑分别在spring和ejb中,那ejb独立运行和部署有什么意义?为什么不把ejb的逻辑放到spring中?
要说分布式,用了spring,可以将需要的服务独立运行app再用远程调用如hessian之类
反之也一样,struts2本来就可以直接注解ejb了,根本不用spring多此一举。
依本人愚见,spring+ejb根本是冗余而不是优化
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics