-->

vendredi 18 décembre 2015

First step with Java EE 7

Introduction :

First, to explore the Java EE standard , I'll start by writing an article to simplify the development of applications that rely on Java EE 7.

Now, let's configure :


To begin, we will create a maven project and to do so, we can use the plugin maven below : 

mvn -DarchetypeGroupId=org.wildfly.archetype 
    -DarchetypeArtifactId=wildfly-javaee7-webapp-blank-archetype 
    -DarchetypeVersion=8.2.0.Final 
    -DgroupId=fr.blogspot.mjhazbri 
    -DartifactId=ContactManagement 
    -Dversion=1.0.0-SNAPSHOT 
    -Dpackage=fr.blogspot.mjhazbri 
    -Darchetype.interactive=false 
    --batch-mode 
    --update-snapshots 
     archetype:generate 


And as a result, we have a project called ContactManagement.

Framework :


The list of frameworks that will be used is EJB3.2 , JPA2.1.

Generated file :


There is a portion of source code and configuration that are generated and which are :

persistence.xml



   
      
      
      java:jboss/datasources/ContactsDS
      
         
         
         
      
   

If you notice well , we see a datasource was declared , the data dource is under the WEB- INF folder in the webapp folder : 





 
 
  jdbc:mysql://localhost:3306/contacts
  mysql
  
   root
   
  
 

 

This datasource refers to the RDBMS MySQL then the driver must be provided and also create the associated database , so the driver can be downloaded from internet and we must put it under the deployments directory of our Wildfly server.

 
To create the database , simply go on MySQL Workbench and execute the following query

create database contacts;


Now, let's code :

The first thing to do is to code entities , I'll create three entities User, Group and Right :

package fr.blogspot.mjhazbri.entities;

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.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 * @author jhazbri
 *
 */
@Entity
@Table(name = "USERS")
public class User {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 @Column(name = "usr_login")
 private String login;

 @Column(name = "usr_password")
 private String password;

 @ManyToOne(fetch = FetchType.LAZY)
 @JoinColumn(name = "usr_group")
 private Group group;

 public Integer getId() {
  return id;
 }

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

 public String getLogin() {
  return login;
 }

 public void setLogin(String login) {
  this.login = login;
 }

 public String getPassword() {
  return password;
 }

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

 public Group getGroup() {
  return group;
 }

 public void setGroup(Group group) {
  this.group = group;
 }
}

package fr.blogspot.mjhazbri.entities;

import java.util.HashSet;
import java.util.Set;

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.OneToMany;
import javax.persistence.Table;

/**
 * @author jhazbri
 *
 */
@Entity
@Table(name = "GROUPS")
public class Group {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 @Column(name = "grp_name")
 private String groupName;

 @OneToMany(targetEntity = User.class, mappedBy = "group")
 private Set users = new HashSet();

 @ManyToMany(targetEntity = Right.class)
 private Set rights = new HashSet();

 public Integer getId() {
  return id;
 }

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

 public String getGroupName() {
  return groupName;
 }

 public void setGroupName(String groupName) {
  this.groupName = groupName;
 }

 public Set getUsers() {
  return users;
 }

 public void setUsers(Set users) {
  this.users = users;
 }

 public Set getRights() {
  return rights;
 }

 public void setRights(Set rights) {
  this.rights = rights;
 }
}

package fr.blogspot.mjhazbri.entities;

import java.util.HashSet;
import java.util.Set;

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

/**
 * @author jhazbri
 *
 */
@Entity
@Table(name = "RIGHTS")
public class Right {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 @Column(name = "rht_name")
 private String rightValue;

 @ManyToMany(targetEntity = Group.class, mappedBy = "rights")
 private Set groups = new HashSet();

 public Integer getId() {
  return id;
 }

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

 public String getRightValue() {
  return rightValue;
 }

 public void setRightValue(String rightValue) {
  this.rightValue = rightValue;
 }

 public Set getGroups() {
  return groups;
 }

 public void setGroups(Set groups) {
  this.groups = groups;
 }

}

package fr.blogspot.mjhazbri.dao;

import java.util.logging.Logger;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import fr.blogspot.mjhazbri.entities.User;

/**
 * @author jhazbri
 *
 */
@Stateless
public class UserDao {

 private final static Logger logger = Logger.getLogger(UserDao.class
   .getName());

 @PersistenceContext()
 private EntityManager em;

 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
 @PostConstruct
 public void init() {
  logger.info("init EJB method ... ");
 }

 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
 @PreDestroy
 public void destroy() {
  logger.info("destory EJB method ... ");
 }

 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
 public User create(User user) {
  em.persist(user);
  return user;
 }

 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
 public User update(User user) {
  em.merge(user);
  return user;
 }

 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
 public User search(Integer userId) {
  return em.find(User.class, userId);
 }
}

So to test the injection of EJB , I create a service where I will inject Dao :

/**
 * 
 */
package fr.blogspot.mjhazbri.services;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

import fr.blogspot.mjhazbri.dao.UserDao;
import fr.blogspot.mjhazbri.entities.Group;
import fr.blogspot.mjhazbri.entities.User;

/**
 * @author jhazbri
 *
 */
@Stateless
public class UserManagementService {

 @EJB
 private UserDao userDao;

 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
 private User addUserInGroup(User user, Group group) {
  user.setGroup(group);
  return userDao.create(user);
 }
}