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。。。。。
}

你可能感兴趣的:(ejb,例子,sessionbean,entityBean)