精华帖 (1) :: 良好帖 (1) :: 新手帖 (9) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-10-26
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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-10-26
希望对刚开始学习ejb3的人有帮助!
|
|
返回顶楼 | |
发表时间:2010-10-26
最后修改:2010-10-26
形式主义
什么东西都要用上spring ejb3了要spring做什么 希望不要误导新人 你非要用action --->service--->Dao这种罗唆的模式的话 那么 action=struts2 service==remote sesssionbean dao==local sessionbean 有spring什么事情 |
|
返回顶楼 | |
发表时间: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容器里所配置的服务 |
|
返回顶楼 | |
发表时间:2010-10-26
嗯。正准备学习下EJB3呢。对EJB还没概念的。
|
|
返回顶楼 | |
发表时间:2010-10-27
Struts有一个ejb3的插件,只要在webapp中加上这个插件的jar包,就可以在拦截器、Action中直接使用类似下面的注解了,根本不需要spring。
@EJB private HelloBean bean; |
|
返回顶楼 | |
发表时间:2010-10-27
大牛们进来提点意见就是,别那个太。。。,支持LZ的教学贴~~~~~~~
|
|
返回顶楼 | |
发表时间:2010-10-27
spring没必要和ejb3结合
|
|
返回顶楼 | |
发表时间:2010-10-27
不是太那啥,我觉得有些观念上的问题是需要纠正。
spring确实和EJB基本属于替代的关系,这样的结构容易误导新人。 不如出个struts2+ejb3的更有意义。。。 当然我也不是说LZ故意这样,有时候自己也没意识到的 |
|
返回顶楼 | |
发表时间:2010-10-27
想说说为什么我觉得LZ的spring+ejb是多余的。
用spring的主要是ioc,用ejb最大好处是独立部署,分部式部署。 假如你把ejb的服务注入到spring中了,逻辑分别在spring和ejb中,那ejb独立运行和部署有什么意义?为什么不把ejb的逻辑放到spring中? 要说分布式,用了spring,可以将需要的服务独立运行app再用远程调用如hessian之类 反之也一样,struts2本来就可以直接注解ejb了,根本不用spring多此一举。 依本人愚见,spring+ejb根本是冗余而不是优化 |
|
返回顶楼 | |