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

EJB3入门 示例

阅读更多

 

原创,转载请标明源 http://asyty.iteye.com/blog/1249495

 

随便贴个入门示例,贴贴代码说明一下,个人觉得网上的例子都稍显简洁,虽然我这个也不复杂,

建议搜索网上其他简单例子互相配合参考下。例如 http://blog.chinaunix.net/space.php?uid=20426042&do=blog&id=1681669

 

 

1 eclipse新建ejb项目

File --> new Project --> EJB Project

 

数据库中建两张表 t_users, t_roles,即用户表和权限表,字段和entity bean(entitybean在后面)里定义要一致

 

 

 在src-->META-INF文件夹下新建mysql-ds.xml,配置数据库连接

 

<datasources>
	<local-tx-datasource>
		<jndi-name>ejbDatasource</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></password>
		<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
		</exception-sorter-class-name>
		<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker
		</valid-connection-checker-class-name>
		<metadata>
			<type-mapping>mySQL</type-mapping>
		</metadata>
	</local-tx-datasource>
</datasources>

 

 新建persistence.xml,使用Hibernate的持久化单元,也就是要需要持久化的内容,即通过JNDI指定上面定义的数据库,可以配置多个持久化单元

 

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
	xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
	<persistence-unit name="test">
		<jta-data-source>java:/ejbDatasource</jta-data-source>
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
		</properties>
	</persistence-unit>
</persistence>

 

 

 

定义entity bean,主要是观察定义表对应的字段的annotation @id @GeneratedValue @NotNull @Colum @ManyToOne等等

 

Role.java

 

@Entity
@Table(name = "T_ROLES")
public class Role implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)      //mysql支持自增ID,uuid等类型的id
	private Integer id;
	
	@NotNull
	@Column(name = "ROLE_NAME", length= 10)
	private String roleName;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getRoleName() {
		return roleName;
	}

	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}
	
}
 

Subscriber.java

@Entity
@Table(name = "T_USERS")
public class Subscriber implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "UUID", length = 36)
	private String uuid = UUID.randomUUID().toString();
	
	@NotNull
	@Length(min = 2, max = 32)
	@Column(name = "user_name", unique = true)       //uuid
	private String userName;
	
	@NotNull
	@Length(min = 6, max = 32)
	@Column(name = "user_password")
	private String password;
	
	@Column(name = "user_email", length = 50)
	private String email;
	
	@Column(name = "user_reg_time")
	@Temporal(value =TemporalType.TIMESTAMP)
	private Date regTime = new Date();
	
	@NotNull
	@ManyToOne(targetEntity=Role.class)         //默认lazy=false 也就是Role会被同时取出
	@JoinColumn(name="role_id", referencedColumnName="id")
	private Role role;
	
	
	public Subscriber() {
		super();
	}

	public String getUuid() {
		return uuid;
	}
	
	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public void setRole(Role role) {
		this.role = role;
	}

	public Role getRole() {
		return role;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
	
	public void setRegTime(Date regTime) {
		this.regTime = regTime;
	}

	public Date getRegTime() {
		return regTime;
	}
}

 

这样,entity bean和数据库连接就定义好了

 

 

<---------------以下部分是 session bean-------------->

如果使用DAO访问数据库的话,就可以定义dao,service和action,本例中直接继承Dao模板,Dao模板中已定义增删改查等功能,可google下DAO模板。DAO,service相当于session bean,这里只写一下User的部分,role部分类似

 

SubscriberDao.java

 

@Local           //@local @remote,表示这个ejb是远程调用还是本地调用
public interface SubscriberDao extends DAO<Subscriber>{
	
	/**
	 * 确定是否可以登录
	 */
	public boolean checkUser(String username, String password);
}

 

 SubscriberDaoImpl.java

 

@Stateless
public class SubscriberDaoImpl extends DaoSupport<Subscriber> implements SubscriberDao {

	@Override
	public boolean checkUser(String username, String password) {
		long count = (Long)getEntityManager().createQuery("select count(o) from SysUser o where o.userName=?1 and o.password=?2")
		.setParameter(1, username).setParameter(2, password).getSingleResult();
		return count>0;
	}
}
SubscriberService.java
@Local
public interface SubscriberService {
	/**
	 * 增删改查
	 * @param user
	 */
	public void add(Subscriber user);
	
	public void delete(String userId);
	
	public void update(Subscriber user);
	
	public Subscriber get(String userId);
	
	public List<Subscriber> getAll();
	
	public boolean checkUser(String username, String password);
}
 

  SubscriberServiceImpl.java

 

 

@Stateless
public  class SubscriberServiceImpl implements Serializable, SubscriberService {

	private static final long serialVersionUID = 1L;
	
	@EJB
	private SubscriberDao subscriberDao;

	@Override
	public boolean checkUser(String username, String password) {
		return subscriberDao.checkUser(username, password);
	}

	@Override
	public void add(Subscriber sysUser) {
		subscriberDao.save(sysUser);
	}

	

	@Override
	public void delete(String userId) {
		subscriberDao.delete(userId);
		
	}

	@Override
	public void update(Subscriber user) {
		subscriberDao.update(user);
		
	}

	@Override
	public Subscriber get(String userId) {
		return subscriberDao.find(userId);
	}

	@Override
	public List<Subscriber> getAll() {
		return subscriberDao.getScrollData().getResultlist();
	}
}

 

然后在action中就可以直接调用service了。。。。。。。通过@EJB标签引入SERVICE,和service引入DAO的方式是一样的。。。。

 

 

@Named("subscriber")
@RequestScoped
public class SubscriberAction implements Action, Serializable {
	private static final long serialVersionUID = 1L;

	private String 	uuid;
	private String 	userName;
	private String 	password;
	
	private Integer roleId;
	private String 	errorMessage;
	private Subscriber user;

        XXXXX其他属性


	@EJB
	private SubscriberService subscriberService;
	
	@EJB
	private RoleService roleService;

	public SubscriberAction() {
	}

	public String get() {
		errorMessage = null;
		
		Subscriber user =subscriberService.get(uuid);
		
		return SUCCESS;
	}
	
	public String delete() {
		errorMessage = null;
	        xxxxxx操作;
		subscriberService.delete(uuid);
		
		return SUCCESS;
	}
	
	public String update() {
		errorMessage = null;
		xxxxxx操作;
		subscriberService.update(user);
		return SUCCESS;
	}
	
	
	public String login() {
		errorMessage = null;
		if(!subscriberService.checkUser(userName, password)) {
			errorMessage = "帐号或密码有误";
			return INPUT;
		}
		return SUCCESS;
	}

	一堆getter setter。。。。。
}
分享到:
评论
1 楼 stevenjohn 2012-02-02  
能不能把源代码上传一份,或者发我邮箱stevenanthony@sina.com

相关推荐

    ejb3.0入门经典教程及源码

    本光盘是配书CD-ROM光盘,其中包括黎活明的入门教程、sourcecode、“软件”两个文件夹、ejb-3_0-fr-spec-ejbcore.pdf、 ejb-3_0-fr-spec-persistence.pdf、ejb-3_0-fr-spec-simplified.pdf。两个演示文档以及mysql-...

    EJB3.0示例教程

    非常好的学习EJB的入门资料,非常难得。

    Beginning EJB 3 Java EE 7 Edition 源代码

    Beginning EJB 3 Java EE 7 Edition 源代码 EJB3入门经典 原书附带的示例代码,学习EJB3的好帮手

    JSF+EJB示例

    这是一个jsf+ejb的入门级程序,对于刚开始接触这两门技术的人来说,会有很大的帮助。里面包含了,EJB的session bean和entity bean。同时,在JSF项目中使用EJB提供的借口来对底层数据进行操作。在JSF中,包括了对数据...

    EJB与JSF的集成(简单示例)

    EJB与JSF的集成(简单示例),适合刚入门的EJB的学习者是个不错的例子。

    EJB入门(Java EE 8,使用企业JavaBeans构建应用程序)英文epub

    本书针对Java和Java EE开发人员(无论以前有没有EJB经验),内含实用的见解、策略提示和代码示例。随着每一章的展开,您将看到如何通过具体的示例将新的EJB规范应用于自己的应用程序。 本书不仅可以作为参考,还可以...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    中文名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 原名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 作者: 李刚 资源格式: PDF 版本: 第一版 出版社: 电子...

    EJB开发代码实例

    EJB代码示例,用于对EJB技术的入门学习

    EJB3.0实例教程 源代码

    适用于黎活明的《EJB3.0实例教程》和《EJB3.0入门经典》这两本书书中示例的源代码

    ejb3.0实例教程.rar

    介绍EJB3。0的使用,及其入门示例,是目前国内最早介绍EJB3。0资料之一,比较易于上手。

    ssm框架整合示例

    ssm框架整合示例, 掌握SPRING + SPING MVC + MYBATIS 三大框架整合.Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development ...

    jsp从入门到高级编程

    第一部分 JSP入门 第1章 概述 1.1 Java技术 1.1.1 Java技术的发展 1.1.2 JavaBeans 1.1.3 JDBC 1.1.4 J2EE 1.1.5 EJB 1.1.6 Java Servlet 1.2 JSP技术 1.2.1 JSP技术概述 1.2.2 JSP的优势及与其他Web开发...

    Spring入门经典

    Spring入门经典 一书全面透彻地介绍Spring Framework;Spring Framework是Java开发领域最流行的框架,是事实上的企业级应用开发标准。本书浓墨重彩地描述实际的企业级解决方案,每一章都提供了通俗易懂的示例和动手...

    javaee-starter:具有Ear,ejb和war的JavaEE入门项目(基于Apache Maven)

    JavaEE入门项目 (仍然不完整) 描述 该项目包含几个Maven示例项目,这些项目归为一个Maven项目。 它包含一个战争项目,一个ejb项目,一个ear项目和父项目。 克隆 该代码可以照常使用 git clone ...

    jsp servlet 入门学习资料-新手一看就懂

    第一部分 JSP入门 第1章 概述 1.1 Java技术 1.1.1 Java技术的发展 1.1.2 JavaBeans 1.1.3 JDBC 1.1.4 J2EE 1.1.5 EJB 1.1.6 Java Servlet 1.2 JSP技术 1.2.1 JSP技术概述 1.2.2 JSP的优势及与其他Web开发...

    JSP高级教程

    第一部分 JSP入门 第1章 概述 1.1 Java技术 1.1.1 Java技术的发展 1.1.2 JavaBeans 1.1.3 JDBC 1.1.4 J2EE 1.1.5 EJB 1.1.6 Java Servlet 1.2 JSP技术 1.2.1 JSP技术概述 1.2.2 JSP的优势及与其他Web开发...

    quickstart-wildfly:使用maven和jBoss开发工具生成的Wildfly快速入门应用程序

    这是一个示例性可部署Maven 3项目,可帮助您踏上使用JBoss WildFly上的Java EE 7的大门。 设置该项目是为了允许您使用JSF 2.2,CDI 1.1,EJB 3.3,JPA 2.1和Bean Validation 1.1创建兼容的Java EE 7应用程序。 它...

    jaxs-rs-playground:JAX-RS模板和示例

    #JAX-RS-PLAYGROUND Various JAX-RS templates and examples 专案 kitchensink-angularjs:...ejb-crud:ejb模块上的CRUD操作示例,JAX-RS注释演示,JAX-RS 2.0客户端(在测试用例中使用) war-crud:以上部署为WAR

    Java数据库编程宝典3

    第4章 JDBC入门 4.1 什么是JDBC 4.2 两层和三层模型 4.2.1 两层模型 4.2.2 三层模型 4.3 SQL的一致性 4.4 JDBC兼容性 4.5 JDBC如何工作 4.5.1 DriverManager 4.5.2 JDBC DataSource 4.5.3 DataSource...

    showcase-wild-boot:WildFly-BootsFacses-PrimeFaces展示柜

    这是一个示例性可部署的Maven 3项目,可帮助您在JBoss WildFly上使用Java EE 7,BootsFaces和PrimeFaces入门。 该项目的设置允许您使用JSF 2.2,CDI 1.1,EJB 3.3,JPA 2.1和Bean Validation 1.1,BootsFaces 0.6.6...

Global site tag (gtag.js) - Google Analytics