锁定老帖子 主题:EJB3.0实现登录注册(一)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (4)
|
||
---|---|---|
作者 | 正文 | |
发表时间:2009-07-12
最后修改:2009-07-12
环境 IDE:Eclipse3.4(JavaEE版) 数据库:MySQL5.0 服务器:Jboss4.0.5 步骤 1. 搭建环境 2. 在MySQL中建立数据库表 表结构如下: Id:无实意主键,采用自增方式生成 stuId:学号 Name:姓名 Password:密码 registerDate:注册时间 email:Email phone:电话号码 sex:性别 对应的SQL语句如下: DROP TABLE IF EXISTS `account`; CREATE TABLE `account` ( `Id` int(11) NOT NULL auto_increment, `stuId` varchar(20) NOT NULL, `name` varchar(50) NOT NULL, `sex` varchar(6) , `registerDate` date , `email` varchar(100) , `phone` varchar(30 , `password` varchar(20) , PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 3. 建立EJB工程 4. 编写简单Bean文件Account.java 定义Account类所具有的属性和方法,不包含任何业务相关代码,其中的属性与数据库表的各列相对应,通过Eclipse自动生成各属性的getter和setter方法。 5.创建实体Bean 6. 编写无状态SessionBean SessionBean用于实现业务逻辑,可分为有状态Bean(Stateful Bean)和无状态Bean(Stateless Bean)。当客户端请求时,服务器就会分配Session Bean为客户端服务。Session Bean可以直接访问数据库,但更多的时候是通过实体Bean实现数据访问。Session Bean可以作为业务处理对象出现在应用体系中。在本实验中用Eclipse的SessionBean创建向导创建无状态SessionBean, 命名为AccountManage,State type选择"Stateless",接口类型选择"Remote",创建成功后Eclipse会自动生成远程接口类AccountManageRemote。首先需要定义接口的内容,因为调用EJB 的客户端是通过使用这个接口的引用从EJB容器得到的会话Bean对象stub,从而进行所需操作的。 在实现类中添加EntityManager的获取代码,EntityManager 是用来对实体Bean进行操作的辅助类。它可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJBQL语言查找满足条件的实体Bean。EntityManager 的获取可以通过@PersistenceContext注释由EJB容器(本实验中即jboss)动态注入。修改后的AccountManage类如下
@Stateless public class AccountManage implements AccountManageRemote { @PersistenceContext(unitName = "test") private EntityManager manager; public AccountManage() { } @Override public void addAccount(Account account) { manager.persist(account); try { Producer.sendMessage("Congratulations! Register success!"); } catch (Exception e) { System.out.println("@Send message error!"); e.printStackTrace(); } } @Override public Account findAccount(String name, String password) { Query query = manager.createQuery("from Account c " + " where c.name=:name" + " and c.password=:password"); query.setParameter("name", name); query.setParameter("password", password); Account account = (Account)query.getSingleResult(); try { if(account==null){ Producer.sendMessage("Login failed!"); }else{ Producer.sendMessage("Congratulations! Login success!"); } } catch (Exception e) { System.out.println("@Send message error!"); e.printStackTrace(); } return account; } @Override public Account findAccountById(int id) { return manager.find(Account.class, id); } } 代码中对应于注册的addAccount方法通过EntityManager自带的API中的persist方法来实现,而对应于注册的查询方法findAccount通过手动编写EJB QL来实现,以用户名(学号)和密码作为参数,返回符合条件的结果,如果登录失败则返回null,同时利用消息驱动Bean向队列中发送成功或失败的消息。 7. 编写客户端程序调用SessionBean来完成登录和注册的功能。 为简单起见,客户端程序并没有提供图形用户界面,只起到简单测试的作用,因此将注册和登录信息都写死在了程序中。具体如下:
8. 编写相关配置文件 由于一部分配置文件可以由Eclipse和Jboss自动生成,所以需要写的配置文件只有两个,一个是JNDI的配置文件,另一个是日志的相关配置。其中的JNDI(The Java Naming and Directory Interface,Java 命名和目录接口) 是一组在Java 应用中访问命名和目录服务的API。为开发人员提供了查找和访问各种命名和目录服务的通用、统一的方式。借助于JNDI 提供的接口,能够通过名字定位用户、机器、网络、对象服务等。命名服务就像DNS 一样,通过命名服务器提供服务,大部分的J2EE 服务器都含有命名服务器。目录服务是一种简化的RDBMS 系统,通过目录具有的属性保存一些简单的信息。目录服务通过目录服务器实现,比如微软ACTIVE DIRECTORY 等。使用JNDI可带来如下好处:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
||
返回顶楼 | ||
浏览 3143 次