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>