`
asyty
  • 浏览: 347744 次
  • 性别: 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入门例子

    在提供的压缩包文件"TestEjb3"中,可能包含了EJB3入门教程的源代码或者示例项目。这些示例通常会展示如何创建和使用EJB3组件,如状态less会话bean、实体bean和消息驱动bean。通过学习和运行这些示例,开发者可以更好...

    《EJB 3.0入门经典》 源码

    在"ejb3.0入门经典教程-source"这个压缩包中,包含了书中各个章节的示例代码,覆盖了EJB 3.0的各个方面,例如实体Bean的创建、会话Bean的使用、事务管理、安全性设置以及JPA的持久化操作等。这些源码对于初学者来说...

    ejb3.0入门图文教程

    通过《EJB 3.0入门图文教程》的学习,你可以系统了解并掌握这些核心概念和实践技巧,为开发高质量的企业级Java应用打下坚实基础。教程中可能包含详细的步骤演示,示例代码,以及如何在开发环境中配置和部署EJB 3.0...

    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-...

    weblogic 10 ejb3 入门教程 + 调试通过的源代码

    - `Weblogic10 + EJB3入门教程.doc`:这个文档很可能是对 WebLogic 10 和 EJB 3.0 的综合教程,包含详细的步骤和示例,帮助初学者快速入门。 - `company.jar`:这是一个包含 EJB 组件的 JAR 文件,可能包含了 `...

    EJB3入门经典配套源码2.rar

    "EJB3入门经典配套源码"是一个针对初学者的资源包,包含了EJB3学习过程中的一些示例代码。这些源码可能涵盖以下主题: 1. **注解驱动的Bean**:EJB3的一大亮点是使用注解代替XML配置,如`@Stateless`、`@Stateful`...

    Weblogic10 + EJB3入门教程

    ### Weblogic10 + EJB3入门教程 #### 一、引言 随着企业级应用的发展,Java EE标准成为构建复杂应用系统的重要基石之一。Oracle公司的WebLogic Server作为一款高性能的应用服务器,在Java EE领域占据着重要的地位。...

    《EJB3.0入门经典》的精简版.pdf

    这本书《EJB3.0入门经典》的精简版,作为EJB基础学习的资料,通过经典实例帮助初学者理解EJB的核心概念和技术。 1. **EJB概述** EJB是Java EE(Java Platform, Enterprise Edition)的一部分,用于处理企业级应用...

    《ejb3.0入门经典》

    ejb-3_0-fr-spec-simplified.pdf和ejb-3_0-fr-spec-persistence.pdf是EJB3.0官方规范的简化版和持久化部分,它们详细阐述了EJB3.0的所有规范和设计决策,是深入理解EJB3.0的权威资料。 通过阅读《ejb3.0入门经典》...

    EJB3.0(入门教程+最新教程+文档+应用开发详解+编程实例(源代码)).rar

    这部分提供了具体的编程示例,帮助开发者理解如何在J2EE环境中使用EJB进行开发,可能包括创建、部署和测试EJB的步骤,以及与Servlet、JSP等其他Java EE组件的交互。 5. **EJBjc**: 这个文件名可能是"EJB Java ...

    利用Myeclipse6和jboss开发EJB3入门实例

    ### 利用Myeclipse 6与JBoss开发EJB3入门实例详解 #### 一、概述 本文将详细介绍如何使用Myeclipse 6和JBoss来开发一个EJB3入门级的应用程序。通过本教程,您将学习到EJB3的基本概念、所需开发工具的配置、以及...

    EJB3.0入门学习

    本资源"EJB3.0入门学习"显然是为了帮助初学者快速掌握这一关键技能。 EJB 3.0的主要特性包括: 1. **注解驱动**:EJB 3.0引入了注解(Annotations),如`@Entity`, `@Stateless`, `@PersistenceContext`, `@EJB`等...

    EJB 2.1入门操作实践视频

    **企业级JavaBeans(EJB)2.1详解** 企业级JavaBeans(EJB)是Java平台上用于构建可部署在企业级服务器上的组件模型。...实践中可能涵盖了上述所有概念,并通过具体的示例帮助学习者掌握EJB 2.1的关键技术和最佳实践。

    EJB3.0入门与进阶

    **EJB3.0入门与进阶** Enterprise JavaBeans(EJB)是Java平台上用于构建企业级应用的组件模型,EJB3.0是其第三个主要版本,它在设计上进行了许多重大改进,使得开发更加简化,提高了生产力,并且降低了学习曲线。...

Global site tag (gtag.js) - Google Analytics