Sunday, December 8, 2013

Hibernate JPA

Hibernate Implementation Class
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;
}
}

Javax.JWS.WebService

Web Service Class
package tutorial.example;

import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

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;

@WebService(
portName = "SurveyAppPort",
serviceName = "SurveyAppService",
targetNamespace = "http://gmuswe645.edu/wsdl",
endpointInterface = "tutorial.example.StudentServiceEJBRemoteInt")
@Stateless
public class StudentServiceHibernateImplWS implements StudentServiceEJBRemoteInt {

public StudentServiceHibernateImplWS() {}

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();
Contact con = (Contact) session.createCriteria(Contact.class)
   .add(Property.forName("id").eq(survey.getContactId()))
   .uniqueResult();
survey.setContact(con);
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;
}

@WebMethod
public List<Student> GetStudents(@WebParam 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();
}
}

Web Service 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);
}

Action Class
package tutorial.serviceexample;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import tutorial.example.Student;
import tutorial.example.StudentServiceEJBRemoteInt;

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 List<Student> surveysList;
private Service surveyService;
private StudentServiceEJBRemoteInt surveyWs;
public SurveyAction(){
try {
surveyService = Service.create(
       new URL("http://localhost:8080/surveyapp-tkhuc-ejb/SurveyAppService/StudentServiceHibernateImplWS?wsdl"),
       new QName("http://gmuswe645.edu/wsdl", "SurveyAppService"));
surveyWs = surveyService.getPort(StudentServiceEJBRemoteInt.class);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}

public String searchsurvey() throws Exception{
surveysList = (List<Student>) surveyWs.GetStudents(student);
return SUCCESS;
}
public void validate(){
}
public Student getStudent(){
return student;
}
public void setStudent(Student student){
this.student = student;
}
public List<Student> getSurveysList() {
return surveysList;
}

public void setSurveysList(List<Student> surveysList) {
this.surveysList = surveysList;
}

@Override
public Student getModel() {
student = new Student();
return student;
}

public int getSurveysListCount() {
int count = 0;
if(surveysList != null)
count = surveysList.size();
return count;
}
}

Web Project Files Structure





EJB Project Files Structure



EAR Project Files Structure







































META-INF\application.xml
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
  <display-name>surveyapp-tkhuc</display-name>
  <module>
    <web>
      <web-uri>surveyapp-tkhuc-web.war</web-uri>
      <context-root>surveyapp</context-root>
    </web>
  </module>
  <module>
    <ejb>surveyapp-tkhuc-ejb.jar</ejb>
  </module>
</application>

Tuesday, September 10, 2013

Thursday, August 29, 2013

MSBuild Choose When Condition


msbuild buildfile.build /target:Deploy /p:Configuration=Release;Environment=Dev
<Choose>
    <When Condition=" '$(Environment)'=='' Or '$(Environment)'=='Dev' ">
      <PropertyGroup>
        <SourceXMLFile>web.dev.config</SourceXMLFile>
        <WebServerName></WebServerName>
        <WebServerUserName></WebServerUserName>
        <WebServerPassword></WebServerPassword>
      </PropertyGroup>
    </When>
    <When Condition=" '$(Environment)'=='Test' ">
      <PropertyGroup>
        <SourceXMLFile>web.test.config</SourceXMLFile>
        <WebServerName></WebServerName>
        <WebServerUserName></WebServerUserName>
        <WebServerPassword></WebServerPassword>
      </PropertyGroup>
    </When>
  </Choose>

Sunday, July 28, 2013

Recent Books Read

 Dependency Injection in .NET

 Secrets of the JavaScript Ninja

The art of Unit Testing with Examples in .NET

Friday, June 14, 2013

Calling User Defined Function in Entity Framework 5

public string ExecuteUserDefinedFunctionReturningScalarStringValue(int inputValue)
{
    var query = "SELECT [dbo].[UserDefinedFunctionName]({0})";
    object[] param = { inputValue };
    var outputString = Context.Database.SqlQuery<string>(query, param).FirstOrDefault();

    return outputString;
}

Calling Store Procedure in Entity Framework 5

Model.Context.cs:

public virtual int DbStoreProcedureName(ObjectParameter output_string, Nullable<int> inputId)
{
    var inputIdParameter = inputId.HasValue ?
        new ObjectParameter("inputParam1", inputId) :
        new ObjectParameter("inputParam1", typeof(int));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("DbStoreProcedureName", output_string, inputIdParameter);
}       
       
Usage:

var inputValue = 5;
var outputParam = new ObjectParameter("output_string", typeof(string));
Context.DbStoreProcedureName(outputString, intputValue);
var outputString = outputParam.Value.ToString();

Sunday, April 28, 2013

Current Visual Studio Theme: Cointen


Cointen is currently my favorite theme. It has red text, which helps keep me focused on what is important. Give it a try at http://studiostyl.es/schemes/cointen.