Sunday, September 19, 2010

Spring JSF Integration

Spring JSF integration can be achieved by following 2 ways
1) JSF Centric
2) Spring Centric
Recommended approach is Spring Centric using Spring Webflow.

Spring Webflow is on top of Spring MVC. Using webflow a complex
flow can be configured using xml mapping.

Steps for integrating Spring-JSF using Spring WebFlow2

1) In web.xml, configure

2) Persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">

<persistence-unit name="examplePersistenceUnit" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/OracleDS</jta-data-source>
<properties>
<property name="show_sql" value="true" />
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup" />
<!-- property name="hibernate.connection.datasource" value="java:/OracleDS" />

<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory" />
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />
<property name="hibernate.current_session_context_class" value="jta" />
<property name="jta.UserTransaction" value="java:comp/UserTransaction" />
<provider>org.hibernate.ejb.HibernatePersistence</provider>

<property name="dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory" />
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />
<property name="hibernate.current_session_context_class" value="jta" />
<property name="jta.UserTransaction" value="java:comp/UserTransaction" /-->
<property name="hibernate.validator.apply_to_ddl" value="false" />
<property name="hibernate.validator.autoregister_listeners" value="false" />
</properties>
</persistence-unit>
</persistence>


Accessing JPA Entity Manager in EJB

@Stateless(name="ejb/EmployerBean",mappedName="EmployerBean")
public class EmployerBean {

@PersistenceUnit(unitName="examplePersistenceUnit")
private EntityManagerFactory emf;

@PersistenceContext()
private EntityManager em;

public void saveRecord(){
UserVO user = new UserVO();

user.setName("save");

AddressVO address = new AddressVO();

address.setName("add");
address.setUserInfo(user);

em.persist(user);
em.persist(address);
}
}


UserVO.java

@Entity
@Table(name="USEREMP1")//ackage not found or wo package-info.java: org.sample.mapping
public class UserVO {

@Id
@SequenceGenerator(name="seq_logical_name",sequenceName="seq_user_id")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_logical_name")
@Column(name="id1")
private long id;

@Column(name="name1")
private String name;

@OneToMany(targetEntity=org.sample.mapping.AddressVO.class,cascade=CascadeType.ALL,mappedBy="userInfo") //@JoinColumn(name="user_id")
private List addressList;


public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public List getAddressList() {
return addressList;
}
public void setAddressList(List addressList) {
this.addressList = addressList;
}
}


@Entity
@Table(name="ADDRESS")
public class AddressVO {

@Id
@SequenceGenerator(name="seq_address_logical_name", sequenceName="seq_address_id")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_address_logical_name")
@Column(name="id1")
private long id;

@Column(name="name1")
private String name;

@ManyToOne()
@JoinColumn(name="user_id",nullable=false)
private UserVO userInfo;

public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public UserVO getUserInfo() {
return userInfo;
}
public void setUserInfo(UserVO userInfo) {
this.userInfo = userInfo;
}


}