J2EE マスター への道 ( ̄◇ ̄;)!

ユーザ管理(UserManager)

最終更新:

kzwapipe

- view
管理者のみ編集可
プロジェクト

ユーザ管理(UserManager)プロジェクト


ユーザ、グループ、その対応を定義する EntityBean と、その永続化(Persistence)を行う Session Bean (DAO) を作成します。

EntityBean は通常の Java クラスとして、SessionBean は EJB3.0 / Session Bean から作成します。また、persistence のユニット名は“project_usermanager”とします。

 プロジェクト
   +-- src
      +-- project.usermanage.ejb
      |  +-- Users.java
      |  +-- Group.java
      |  +-- ManageDao.java
      |  +-- ManageDaoBean.java
      +-- META-INF
      |  +-- persistence.xml
      +-- jndi.properties (プロジェクト作成時自動生成)



■ Users.java (EntityBean)


 package project.usermanager.ejb;
 
 import java.io.Serializable;
 import java.util.List;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
 /**
  * ユーザー情報を表す Entity Bean です。
  *
  * @author [email protected]
  * @version NC
  */
 @Entity
 @Table(name = "domain_users")
 @NamedQueries(value = {
         @NamedQuery(name = "findUsersByName", query = "SELECT object(c) FROM Users c WHERE c.name= :name"),
         @NamedQuery(name = "selectAllUsers", query = "SELECT c FROM Users c") })
 public class Users implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
     private Long              id;
     private String            name;
     private String            passwd;
     private String            fullname;
     private String            attribute;
     private String            email;
     private Boolean           valid;
     private List<Group>       group;
 
 
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     @Column(name = "id")
     public Long getId() {
         return this.id;
     }
 
     public void setId(Long id) {
         this.id = id;
     }
 
     @Column(name = "name", nullable = false, unique = true)
     public String getName() {
         return this.name;
     }
 
     public void setName(String name) {
         this.name = name;
     }
 
     @Column(name = "passwd", nullable = false)
     public String getPasswd() {
         return this.passwd;
     }
 
     public void setPasswd(String passwd) {
         this.passwd = passwd;
     }
 
     @Column(name = "fullname", nullable = false)
     public String getFullname() {
         return this.fullname;
     }
 
     public void setFullname(String fullname) {
         this.fullname = fullname;
     }
 
     @Column(name = "attribute", nullable = false)
     public String getAttribute() {
         return this.attribute;
     }
 
     public void setAttribute(String attribute) {
         this.attribute = attribute;
     }
 
     @Column(name = "email", nullable = false)
     public String getEmail() {
         return this.email;
     }
 
     public void setEmail(String email) {
         this.email = email;
     }
 
     @Column(name = "valid", nullable = false)
     public Boolean getValid() {
         return this.valid;
     }
 
     public void setValid(Boolean valid) {
         this.valid = valid;
     }
 
     @ManyToMany(targetEntity = project.usermanager.ejb.Group.class, fetch = FetchType.LAZY)
     @JoinTable(name = "domain_roles")
     public List<Group> getGroup() {
         return this.group;
     }
 
     public void setGroup(List<Group> list) {
         this.group = list;
     }
 
     @Override
     public int hashCode() {
         int hash = 0;
         hash += (this.id != null ? this.id.hashCode() : 0);
         return hash;
     }
 
     @Override
     public boolean equals(Object object) {
         if (!(object instanceof Users)) {
             return false;
         }
         Users other = (Users) object;
         if (this.id != other.id
                 && (this.id == null || !this.id.equals(other.id)))
             return false;
         if (this.name != other.name
                 && (this.name == null || !this.name.equals(other.name)))
             return false;
         return true;
     }
 
     @Override
     public String toString() {
         return "Users[" + this.id + "]@" + this.name;
     }
 }


■ Group.java (EntityBean)

 package project.usermanager.ejb;
 
 import java.io.Serializable;
 import java.util.List;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.ManyToMany;
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
 /**
  * グループ情報を表す Entity Bean です。
  *
  * @author [email protected]
  * @version NC
  */
 @Entity
 @Table(name = "domain_group")    // DB テーブル名
 @NamedQueries(value = {          // 検索クエリー
     @NamedQuery(name = "findAllGroup",
         query = "select c from Group c") })
 public class Group implements Serializable {
     private static final long serialVersionUID = 1L;
 
     // オブジェクトの属性
     private Integer id;
     private String name;
     private String fullname;
     private List users;
     
     // プライマリキーとなるシリアル番号(自動生成)
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     @Column(name = "id")
     public Integer getId() {
         return this.id;
     }
     public void setId(Integer id) {
         this.id= id;
     }
 
     // グループ名(ユニーク)
     @Column(name = "name", nullable = false, unique = true)
     public String getName() {
         return this.name;
     }
     public void setName(String name) {
         this.name = name;
     }
 
     // グループのフルネーム
     @Column(name = "fullname", nullable = false)
     public String getFullname() {
         return this.fullname;
     }
     public void setFullname(String fullname) {
         this.fullname = fullname;
     }
     
     // グループに所属するユーザーのリスト(多対多の関係)
     @ManyToMany(
         targetEntity = project.usermanager.ejb.Users.class,
         mappedBy = "group")
     public List<Users> getUsers() {
         return this.users;
     }
     public void setUsers(List<Users> list) {
         this.users = list;
     }
 }

■ ManageDao.java / ManageDaoBean(SessionBean)

 package project.usermanager.ejb;
 
 import java.util.List;
 
 import javax.ejb.Local;
 import javax.ejb.Remote;
 
 /**
  * ユーザー、グループのための DAO インタフェースです。
  * 
  * @author [email protected]
  * @version NC
  */
 @Local
 @Remote
 public interface ManageDao {
     public void create(Object object);
     public void remove(Object object);
     public Group getGroup(Integer id);
     public List<Group> getGroupList();
     public Users getUsers(Integer id);
     public Users getUsers(String name);
     public List<Users> getUsersList();
 }

 package project.usermanager.ejb;
 
 import java.util.List;
 
 import javax.ejb.Stateless;
 import javax.persistence.EntityManager;
 
 import project.usermanager.ejb.ManageDao;
 
 /**
  * ユーザー、グループのための DAO 実装の SessionBean です。
  * 
  * @author [email protected]
  * @version NC
  */
 public @Stateless
 class ManageDaoBean implements ManageDao {
 
     @javax.persistence.PersistenceContext(
         unitName = "project_usermanager")
     private EntityManager em;
 
     public void create(Object object) {
         this.em.persist(object);
     }
     public void remove(Object object) {
         Object mergedObject = this.em.merge(object);
         this.em.remove(mergedObject);
     }
 
     public Group getGroup(Integer id) {
         return this.em.find(Group.class, id);
     }
     public List<Group> getGroupList() {
         @SuppressWarnings("unchecked")
         List<Group> list = this.em.createNamedQuery("findAllGroup")
                 .getResultList();
         return list;
     }
 
     public Users getUsers(Integer id) {
         return this.em.find(Users.class, id);
     }
     public Users getUsers(String name) {
         Object object = this.em.createNamedQuery("findUsersByName")
                 .setParameter("name", name).getSingleResult();
         return (Users) object;
     }
     public List<Users> getUsersList() {
         @SuppressWarnings("unchecked")
         List<Users> list = this.em.createNamedQuery("findAllUsers")
                 .getResultList();
         return list;
     }
 
 }

■ persistence.xml(永続コンテキスト定義ファイル)

 <?xml version="1.0" encoding="UTF-8"?>
 <persistence xmlns="http://java.sun.com/xml/ns/persistence">
   <persistence-unit name="project_usermanager">
     <provider>org.hibernate.ejb.HibernatePersistence</provider>
     <jta-data-source>java:/MySqlDS</jta-data-source>
     <properties>
       <property name="hibernate.hbm2ddl.auto"  value="create"/>
     </properties>
   </persistence-unit>
 </persistence>
ウィキ募集バナー