Spring Data JPA + JSF + Maven + MySQL Using Eclipse IDE
Spring Data JPA + JSF + Maven + MySQL Using Eclipse IDE
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.empmgmnt.emp</groupId>
<artifactId>EmployeeMgmnt</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Employee Maven Webapp</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>repository.jboss.org-public</id>
<name>JBoss repository</name>
<url>https://repository.jboss.org/nexus/content/groups/public</url>
</repository>
</repositories>
<properties>
<hibernate.version>4.0.1.Final</hibernate.version>
<mysql.connector.version>5.1.18</mysql.connector.version>
<slf4j.version>1.6.1</slf4j.version>
<spring.version>3.1.0.RELEASE</spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.el</groupId>
<artifactId>el-ri</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons-core</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- H2 Database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.160</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>4.1.0.Final</version>
</dependency>
</build>
</project>
Once you save the pom.xml file, Maven will automatically start
downloading the required dependencies. If not, you can
a) right click on project under Project Explorer
b) Click on Run As
c) Select maven install
5) Next, update the web.xml as follows
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>EmpManagement</display-name>
<!-- Change to "Production" when you are ready to deploy -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<!-- Welcome page -->
<welcome-file-list>
<welcome-file>faces/hello.xhtml</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-cl
ass>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/spring/*</url-pattern>
</servlet-mapping>
<!-- Add Support for Spring -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<!-- JSF mapping -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map these files with JSF -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF
Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>resources.application</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
</web-app>
Repositories:- EmployeeRepository.java
package com.empmgmnt.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import com.empmgmnt.domain.Employee;
public interface EmployeeRepository extends JpaRepository<Employee,
Long>{
}
Service:- EmployeeService.java
package com.empmgmnt.services;
import java.util.List;
import com.empmgmnt.domain.Employee;
import com.empmgmnt.transferobjects.EmployeeDTO;
public interface EmployeeService {
public void create(EmployeeDTO emp);
public void delete(EmployeeDTO emp);
java.util.List;
org.springframework.beans.factory.annotation.Autowired;
org.springframework.stereotype.Component;
org.springframework.stereotype.Service;
org.springframework.transaction.annotation.Transactional;
import com.empmgmnt.domain.Employee;
import com.empmgmnt.repositories.EmployeeRepository;
import com.empmgmnt.transferobjects.EmployeeDTO;
@Component
@Service
public class EmployeeServiceImpl implements EmployeeService{
private static Integer new_emp_id=0;
private synchronized static Integer getNewEmpId(){
return new_emp_id++;
}
@Autowired
private EmployeeRepository employeeRepository;
private Employee getEmployee(EmployeeDTO employeeDTO){
Employee employee = new Employee();
employee.setEmpid(employeeDTO.getEmpid());
employee.setName(employeeDTO.getName());
employee.setAge(employeeDTO.getAge());
employee.setAddress(employeeDTO.getAddress());
employee.setSalary(employeeDTO.getSalary());
return employee;
}
@Override
public void create(EmployeeDTO emp) {
System.out.println("############ Saving service
##############");
Employee e = getEmployee(emp);
e.setEmpid(EmployeeServiceImpl.getNewEmpId());
employeeRepository.save(e);
System.out.println("########### After Saving service
##############");
}
@Override
public void delete(EmployeeDTO emp) {
employeeRepository.delete(getEmployee(emp));
}
@Override
public Employee search(Integer id) {
return employeeRepository.findOne(Long.valueOf(id));
}
@Override
public List<Employee> findAll() {
return employeeRepository.findAll();
}
}
java.io.Serializable;
javax.inject.Inject;
org.springframework.beans.factory.annotation.Autowired;
org.springframework.context.annotation.Scope;
org.springframework.stereotype.Component;
com.empmgmnt.services.EmployeeService;
com.empmgmnt.transferobjects.EmployeeDTO;
@Component
@Scope("session")
public class EmployeeBean implements Serializable {
private static final long serialVersionUID = 1L;
private
private
private
private
private
String name;
String address;
Integer age;
Integer salary;
Integer empid;
@Inject
@Autowired
EmployeeService employeeServiceImpl;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getSalary() {
return salary;
}
public void setSalary(Integer salary) {
this.salary = salary;
}
public Integer getEmpid() {
return empid;
}
public void setEmpid(Integer empid) {
this.empid = empid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
>
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="empmgmnt" />
<property name="persistenceXmlLocation"
value="classpath:META-INF/persistence.xml" />
<property name="jpaVendorAdapter">
<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL" />
</bean>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="dataSource" ref="dataSource" />
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<context:component-scan base-package="com.empmgmnt" />
<jpa:repositories base-package="com.empmgmnt.repositories"/>
<bean id="employeeService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBe
an">
<property name="transactionManager" ref="transactionManager" />
<property name="target" ref="employeeServiceImpl" />
<property name="proxyInterfaces">
<value>com.empmgmnt.services.EmployeeService</value>
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_NOT_SUPPORTED, readOnly</prop>
</props>
</property>
</bean>
<bean id="employeeServiceImpl"
class="com.empmgmnt.services.EmployeeServiceImpl">
</bean>
</beans>
select
employee0_.empid as empid0_0_,
employee0_.address as address0_0_,
employee0_.age as age0_0_,
employee0_.name as name0_0_,
employee0_.salary as salary0_0_
from
Employee employee0_
where
employee0_.empid=?
Hibernate:
select
employee0_.empid as empid0_0_,
employee0_.address as address0_0_,
employee0_.age as age0_0_,
employee0_.name as name0_0_,
employee0_.salary as salary0_0_
from
Employee employee0_
where
employee0_.empid=?
Initializing non-lazy collections
Done entity load
Generated identifier: 0, using strategy: org.hibernate.id.Assigned
Initiating transaction commit
Committing JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@3fe3b1c]
committing
Processing flush-time cascades
Dirty checking collections
Flushed: 1 insertions, 0 updates, 0 deletions to 1 objects
Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
Listing entities:
com.empmgmnt.domain.Employee{empid=0, address=Mumbai, India, name=Nikhil, age=30,
salary=30000}
insert
into
Employee
(address, age, name, salary, empid)
values
(?, ?, ?, ?, ?)
Hibernate:
insert
into
Employee
(address, age, name, salary, empid)
values
(?, ?, ?, ?, ?)
committed JDBC Connection
re-enabling autocommit
Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@3fe3b1c] after transaction
Closing JPA EntityManager
HHH000420: Closing un-released batch
Releasing JDBC connection
Released JDBC connection
HHH000163: Logical connection releasing its physical connection
########### After Saving service ##############
#################### After Saving ##############