import javax.ejb.Stateless;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Stateless
public class StudentServiceHibernateImpl implements StudentServiceEJBRemoteInt {
public StudentServiceHibernateImpl() {}
public void SaveStudentSurveyFormData(Student postData){
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx=session.getTransaction();
tx.begin();
session.saveOrUpdate(postData.getContact());
DetachedCriteria maxId = DetachedCriteria.forClass(Contact.class)
.setProjection( Projections.max("id"));
Contact con = (Contact) session.createCriteria(Contact.class)
.add(Property.forName("id").eq(maxId))
.uniqueResult();
postData.setContactId(con.getId());
session.saveOrUpdate(postData);
tx.commit();
}
public Student GetStudentSurveyData(Student student){
Surveys surveys = GetSurveys(student);
for(Student survey : surveys.data){
if(survey.getLastName().equalsIgnoreCase(student.getLastName()) && survey.getFirstName().equalsIgnoreCase(student.getFirstName())){
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
Contact con = (Contact) session.createCriteria(Contact.class)
.add(Property.forName("id").eq(survey.getContactId()))
.uniqueResult();
survey.setContact(con);
tx.commit();
return survey;
}
}
return null;
}
public Surveys GetSurveys(Student searchCriteria){
Surveys surveys = new Surveys();
surveys.data = new ArrayList<Student>();
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
Criteria query = session.createCriteria(Student.class);
if(searchCriteria != null){
if(searchCriteria.getFirstName() != null && !searchCriteria.getFirstName().isEmpty()){
String firstName = searchCriteria.getFirstName().replace('*', '%');
query = query.add(Restrictions.like("firstName", firstName).ignoreCase());
}
if(searchCriteria.getLastName() != null && !searchCriteria.getLastName().isEmpty()){
String lastName = searchCriteria.getLastName().replace('*', '%');
query = query.add(Restrictions.like("lastName", lastName).ignoreCase());
}
if(searchCriteria.getCity() != null && !searchCriteria.getCity().isEmpty()){
String city = searchCriteria.getCity().replace('*', '%');
query = query.add(Restrictions.like("city", city).ignoreCase());
}
if(searchCriteria.getState() != null && !searchCriteria.getState().isEmpty()){
String state = searchCriteria.getState().replace('*', '%');
query = query.add(Restrictions.like("state", state).ignoreCase());
}
}
query = query.addOrder(Property.forName("lastName").asc());
query = query.addOrder(Property.forName("firstName").asc());
@SuppressWarnings("unchecked")
List<Student> surveyList = (List<Student>)query.list();
tx.commit();
if(surveyList.size() > 0){
surveys.data = surveyList;
}
return surveys;
}
public List<Student> GetStudents(Student searchCriteria) throws IOException{
Surveys surveys = GetSurveys(searchCriteria);
return surveys.data;
}
public List<String> GetSurveyNames(){
List<String> surveyNames = new ArrayList<String>();
Surveys surveys = GetSurveys(null);
for(Student survey : surveys.data){
surveyNames.add(survey.getFirstName() + " " + survey.getLastName());
}
return surveyNames;
}
public WinningResult ComputeMeanAndStandardDeviation(String raffle){
if(StringUtils.isEmpty(raffle)){
return new WinningResult(0,0);
}
String[] numbers = raffle.split(",");
double sum = 0;
for(int i=0; i < numbers.length; i++){
sum += Double.valueOf(numbers[i].trim());
}
double mean = Math.round((sum/numbers.length) * 100)/100;
double temp = 0;
for(int i=0; i < numbers.length; i++){
double num = Double.valueOf(numbers[i].trim());
temp += (mean - num) * (mean - num);
}
double variance = temp/numbers.length;
double standardDeviation = Math.round(Math.sqrt(variance) * 100)/100 ;
WinningResult data = new WinningResult(mean, standardDeviation);
return data;
}
@Override
public void DeleteStudent(Student postData) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx=session.getTransaction();
tx.begin();
Student student = (Student) session.createCriteria(Student.class)
.add(Property.forName("id").eq(postData.getId()))
.uniqueResult();
int contactId = student.getContactId();
Contact con = (Contact) session.createCriteria(Contact.class)
.add(Property.forName("id").eq(contactId))
.uniqueResult();
session.delete(student);
session.delete(con);
tx.commit();
}
}
Hibernate Interface
package tutorial.example;
import java.io.IOException;
import java.util.List;
import javax.ejb.Remote;
import javax.jws.WebService;
@WebService(targetNamespace = "http://gmuswe645.edu/wsdl")
@Remote
public interface StudentServiceEJBRemoteInt {
public List<Student> GetStudents(Student searchCriteria) throws IOException;
public Student GetStudentSurveyData(Student student);
public WinningResult ComputeMeanAndStandardDeviation(String raffle);
public void SaveStudentSurveyFormData(Student postData);
public void DeleteStudent(Student student);
}
Hibernate Util
package tutorial.example;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
/**
* Hibernate Utility used to configure Hibernate's Session Factory and retrieve
* it.
*/
public class HibernateUtil {
private static final SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
// ------ --- -------------- ---- -----------------
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = new Configuration().configure().buildSessionFactory(serviceRegistry);
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
// ---- ---- --- --- --- ---------- -- -- ----- -- ---------
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
/**
* Get the configured session factory
*
* @return session factory
*/
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Hibernate Configuration
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Oracle Configuration -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@...</property>
<property name="hibernate.connection.username">...</property>
<property name="hibernate.connection.password">...</property>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="format_sql">false</property>
<!-- Load all mapping files -->
<mapping resource="Survey.hbm.xml" />
</session-factory>
</hibernate-configuration>
Survey Configuration
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="tutorial.example.Student" table="SURVEYS">
<id name="id" column="surveyId" type="int">
<generator class="sequence">
<param name="sequence">SURVEY_SEQ</param>
</generator>
</id>
<property name="firstName" column="firstName" type="string" />
<property name="lastName" column="lastName" type="string" />
<property name="streetAddress" column="streetAddress" type="string" />
<property name="city" column="city" type="string" />
<property name="state" column="state" type="string" />
<property name="zip" column="zip" type="string" />
<property name="telephone" column="telephone" type="string"/>
<property name="email" column="email" type="string" />
<property name="surveyDate" column="surveyDate" type="string" />
<property name="likes" column="likes" type="string" />
<property name="interest" column="interest" type="string" />
<property name="recommendation" column="recommendation" type="string" />
<property name="comments" column="comments" type="string" />
<property name="raffle" column="raffle" type="string" />
<property name="contactId" column="contactId" type="java.lang.Integer"/>
<one-to-one name="contact" class="tutorial.example.Contact" property-ref="id" cascade="all" fetch="join" />
</class>
<class name="tutorial.example.Contact" table="CONTACTS">
<id name="id" column="contactId" type="int">
<generator class="sequence">
<param name="sequence">CONTACT_SEQ</param>
</generator>
</id>
<property name="firstName" column="firstName" type="string" />
<property name="lastName" column="lastName" type="string" />
<property name="streetAddress" column="streetAddress" type="string" />
<property name="city" column="city" type="string" />
<property name="state" column="state" type="string" />
<property name="zip" column="zip" type="string" />
<property name="email" column="email" type="string" />
</class>
</hibernate-mapping>
Action Class
package tutorial.example;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.commons.lang3.StringUtils;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class SurveyAction extends ActionSupport implements ModelDriven<Student> {
private static final long serialVersionUID = 1L;
private Student student;
private WinningResult winningResult;
private List<Student> surveysList;
private Context context;
private StudentServiceEJBRemoteInt serviceEJB;
public SurveyAction(){
try {
context = new InitialContext();
serviceEJB = (StudentServiceEJBRemoteInt) context.lookup("java:global/surveyapp-tkhuc/surveyapp-tkhuc-ejb/StudentServiceHibernateImpl!tutorial.example.StudentServiceEJBRemoteInt");
} catch (NamingException e) {
e.printStackTrace();
}
}
public String deletesurvey() throws Exception{
serviceEJB.DeleteStudent(student);
return SUCCESS;
}
public String listsurvey() throws Exception{
surveysList = (List<Student>) serviceEJB.GetStudents(null);
return SUCCESS;
}
public String displaysurvey() throws Exception{
student = (Student) serviceEJB.GetStudentSurveyData(student);
return SUCCESS;
}
public String searchsurvey() throws Exception{
surveysList = (List<Student>) serviceEJB.GetStudents(student);
return SUCCESS;
}
public String execute() throws Exception{
Student studentFound = (Student) serviceEJB.GetStudentSurveyData(student);
if(studentFound != null){
return "input";
}
serviceEJB.SaveStudentSurveyFormData(student);
winningResult = (WinningResult) serviceEJB.ComputeMeanAndStandardDeviation(student.getRaffle());
if(winningResult.getMean() > 90){
return "winner";
}
return "simple";
}
public void validate(){
if(student.getSkipsValidation())
return;
if(StringUtils.isEmpty(student.getFirstName())){
addFieldError("firstName", "First Name cannot be blank.");
}
if(StringUtils.isEmpty(student.getLastName())){
addFieldError("lastName", "Last Name cannot be blank.");
}
if(StringUtils.isEmpty(student.getStreetAddress())){
addFieldError("streetAddress", "Street Address cannot be blank.");
}
if(StringUtils.isEmpty(student.getCity())){
addFieldError("city", "City cannot be blank.");
}
if(StringUtils.isEmpty(student.getState())){
addFieldError("state", "State cannot be blank.");
}
if(StringUtils.isEmpty(student.getZip())){
addFieldError("zip", "Zip cannot be blank.");
}
if(StringUtils.isEmpty(student.getTelephone())){
addFieldError("telephone", "Telephone number cannot be blank.");
}
if(StringUtils.isEmpty(student.getEmail())){
addFieldError("email", "Email cannot be blank.");
}
if(StringUtils.isEmpty(student.getSurveyDate())){
addFieldError("surveyDate", "Survey date cannot be blank.");
}
}
public Student getStudent(){
return student;
}
public void setStudent(Student student){
this.student = student;
}
public WinningResult getWinningResult(){
return winningResult;
}
public void setWinningResult(WinningResult winningResult){
this.winningResult = winningResult;
}
public List<Student> getSurveysList() {
return surveysList;
}
public void setSurveysList(List<Student> surveysList) {
this.surveysList = surveysList;
}
@Override
public Student getModel() {
student = new Student();
return student;
}
}