用EJB3.0实现的登录小例子

EJB3.0可能没有接触过的人在做练习或看书的时候都会和我一样出这样或那样的问题。有时候连基本的HelloWord也跑不起来。所以现在将以前学习的经验拿出来给新手看看。希望能帮到大家。

首先写一个EJB3.0的项目肯定有2个部分组成(下面是用MyEclipse6.0+jboss-4.2.2.GA说明):

1. EJB的组件(封装了业务逻辑的组件)

2. 客户端(注意:客户端可以说Java程序,也可以说Web程序,或是WebService)

假设我们要做一个登录的小例子看下面的步骤:

1.准备工作:

你需要有MyEclipse6.0的IDE 和jboss-4.2.2.GA (该版本比较稳定,推荐使用,其他版本好像有点bug)及MySQL5.0的数据库,数据库和服务器的集成此处不再说明,自己去查google

有了以上的东西,我们就来配置一下Jboss的数据源。Jboss的数据源配置非常简单,只要复制一下数据源的配置模板手动修改一下就ok了。你可以到Jboss的安装目录找到D:/jboss-4.2.2.GA/docs/examples/jca文件夹下(此路径为我的安装路径,可能你安装的盘和我不一样,但文件夹都是一样的)找到mysql-ds.xml文件将它复制到D:/jboss-4.2.2.GA/server/default/deploy目录下(此为默认的运行部署目录,在配置Jboss服务器的时候可以指定使用default的)打开该文件。

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/test</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>123456</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
</local-tx-datasource>
</datasources>

只要编辑连接地址URL,用户名,密码这3个地方就可以了。

到这里数据源就配置完成了。是不是非常简单啊。网上很多人写的配置数据源都不知道是故意还是疏漏,写的都不清楚。害我开始学的时候绕了好大一个圈子。鄙视一下!

建立好了数据源,我们还要先在数据库中建立一个表,只要有3个字段就够了,Id列 ,用户名,密码。注意:在使用MyEclipse的时候当新建一个EJB3.0的工程时,要求通过Driver来找到需要使用的数据库,但如果你数据库中没有要使用的表,则@Entity注解将一直报错。原因么无法找到相应的表。

现在就能新建一个EJB3.0的工程了,在生成工程的时候一定要小心在JNDI DataSource 的地方要求输入数据源的名称,这个地方不是随便输入的,使用Jboss时此处的格式为java:/数据源的名称。所以我们这里应该填写java:/MySqlDS 其他的地方基本上已经很简单了,driver什么的直接按照向导就能轻松搞定。当EJB工程创建完毕,我们第一步就算搞定了,你可以往下看了。

2.建立持久化类

为了简单起见,这里推荐采用逆向工程创建持久化类。

步骤:切换到MyEclipse DataBase Explorer 启动数据库连接,选择需要生成持久化类的表,右键选择EJB3 Reverse Engineering 后面跟着向导就可以完成了。

但需要注意的是使用逆向工程生成的持久化文件有点小问题。主要是主键,如果你数据库中使用了自动增长的话,这里就要手动改一下生成的持久化类。

@Id
@Column(name = "p_id", unique = true, nullable = false, insertable = true, updatable = true)
@GeneratedValue
public Integer getPId() {
   return this.PId;
}

加上粗体字的这个注解,这个是自动生成Id的值,使用默认的生成策略(使用本地数据库生成)

到这里我们的持久化类就算大功告成了,下面就来开发EJB3.0的业务逻辑方法了。

3.在这里我们使用无状态会话bean来开发

@Stateless //注解说明是一个无状态会话bean

@Remote //注解远程接口

public Class UserinfoBeanimplements UserinfoRemote{ //实现了接口

@PersistenceContext(unitName="EJB_demo02PU") //持久化上下文注解

public EntityManager em; //通过注入实体管理器,便于持久化操作

public int validateByNameAndPass(String name, String pass) {
   Query query = this.em.createQuery("from Userinfo u where u.username=? and u.password=?");
   query.setParameter(1, name);
   query.setParameter(2, pass);
   Userinfo u = (Userinfo)query.getSingleResult();
   if (null == u){
    return -1;
   }else{
    return u.getId();
   }
}

}

到这里我们的EJB3.0的组件就算开发完成了。是不是没有什么难度的?呵呵,下面继续开发客户端吧。

4.开发客户端调用EJB组件

上面我们看到了客户端可以是Java客户端或是web客户端或是Webservice

我这里就简单说明一下web客户端的使用,其实java客户端写法都是一样的,主要注意的地方就是获取JNDI上下文和lookup的查找格式

首先新建一个web工程

导入Jboss的客户端支持包,找到D:/jboss-4.2.2.GA/client目录,将所有jar文件添加到web工程的classpath里

将EJB工程添加到project下,或是将EJB打包成jar放到lib目录下

添加jndi.properties资源文件,可以到D:/jboss-4.2.2.GA/server/default/conf目录下找到,将该文件复制到web工程的src目录下,打开并编辑,在末尾添加java.naming.provider.url=localhost这句话

ok现在可以编写客户端了,JSP页面的编写这里就不说了,需要说明的是在Servlet编写的时候可以按下面的方法写:

package org.sp.servlet;

import java.io.IOException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.sp.session.UserinfoRemote;

public class LoginAction extends HttpServlet {

private static final long serialVersionUID = -1510748724137390401L;
private UserinfoRemote ur;

public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

   String username = request.getParameter("username");
   String passwrod = request.getParameter("password");
   System.out.println(username + "   " + passwrod);
int i = this.ur.validateByNameAndPass(username, passwrod);
   if (i > 0) {
    response.sendRedirect("../success.jsp");
   } else {
    response.sendRedirect("../index.jsp");
   }
}

//在Servlet初始化的时候将EJB的远程接口引用对象初始化

public void init() throws ServletException {
   try {
    InitialContext ic = new InitialContext();

//查找远程接口的格式为(EJB的实现类/remote)
    this.ur = (UserinfoRemote) ic.lookup("UserinfoBean/remote");
   } catch (NamingException e) {
    e.printStackTrace();
   }
}

}

自此我们的EJB开发就算是完成了,部署到Jboss运行一下吧!我写这篇文章,可能里面还有一些细节我没有注意到,大家可以自己去尝试一下。应该不会有太大的障碍了。基本要注意的地方我基本上都说明了。

还有一个概念要说明一下:上面的这个例子是调用了远程接口,如果你有兴趣可以再添加一个@Local注解

在Servlet里面调本地接口
    this.ur = (UserinfoRemote) ic.lookup("UserinfoBean/local");

因为我们使用的Web客户端部署在同一个Jboss服务器,也就是说EJB和客户端运行在同一个JVM下,我们就能调用本地接口了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jsf1.2+ejb3.0实现的员工管理系统1.项目说明:  本实例是一个用JSF1.2+EJB3.0实现的员工CRUD的一个实例,业务非常简单,主要是为了演示这两种技术的使用。若与商业应用类同,纯属巧合。2.源码说明: 1)本项目开发环境 操作系统: Windows xp sp2 JDK环境: JDK1.6.0 IDE工具: MyEclipse6.0GA 数据库: Mysql 5.0.41 字符集设置:utf-8 EJB容器: JBoss4.2.1GA Web容器: Tomcat 6.0.14 测试通过的浏览器: IE6.0 2)查看源码 使用MyEclipse的Import功能,就可打开。但必须得把MyEclipse的编译器调到支持JDK5.0特性,否则源代码可能编译不通过。 3)项目的目录 a. ejb端 jsfejb3-ejb |-- src |-- org.qiujy.ejb3.dao      持久层DAO接口包 |-- org.qiujy.ejb3.dao.impl 持久层DAO接口实现类包(是ejb3中的会话Bean) |-- org.qiujy.ejb3.entity 实体域模型类包 |-- META-INF |--persistence.xml EJB3的持久化配置文件 |--DBScript |--employee.sql 数据库脚本及测试数据 |--mysql-connector-java-5.1.5-bin.jar MySql的驱动程序包 |--mysql-ds.xml 在JBoss中配置MySql数据源的配置文件 b.web端 jsfejb3-war |-- src |-- org.qiujy.ejb3.dao      持久层DAO接口包 |-- org.qiujy.ejb3.entity 实体域模型类包 |-- org.qiujy.service 业务逻辑类包 |-- org.qiujy.vo 业务层数据类包(VO) |-- org.qiujy.web.controller JSF的托管Bean包 |--WebRoot |-- META-INF 打包的信息文件夹 |-- WEB-INF |-- faces-config.xml JSF的配置文件1,托管Bean的配置 |-- navigation.xml JSF的配置文件2,导航规则的配置 |-- web.xml web应用部署描述文件 |-- jsp页面 页面文件☆3.安装运行说明: 1).应用服务器 采用JBoss4.2.1GA,在发布ejb端程序时,要把MySql的驱动程序包和数据库配置文件(mysql-ds

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值