JSF2中注解的应用,使得JSF2很容易与EJB3,JPA2集成。
?
首先,定义一个业务接口,作为EJB的一个本地接口:
?
@Local public interface CustomerSessionBeanI { public Customer getById(long id); public List<Customer> findAll(); public void deleteById(long id); public void save(Customer c); }
?
定义一个SessionBean来实现这个接口:
?
@Stateless public class CustomerSessionBean implements CustomerSessionBeanI{ @PersistenceContext private EntityManager em; public Customer getById(long id) { return em.find(Customer.class, id); } public void setEm(EntityManager em) { this.em = em; } public EntityManager getEm() { return em; } @SuppressWarnings("unchecked") @Override public List<Customer> findAll() { return (List<Customer> )em.createNamedQuery("getAll").getResultList(); } @Override @TransactionAttribute(TransactionAttributeType.REQUIRED) public void deleteById(long id) { Query q = em.createNamedQuery("deleteById"); q.setParameter(1, id); q.executeUpdate(); } @Override @TransactionAttribute(TransactionAttributeType.REQUIRED) public void save(Customer c) { em.persist(c); } }
?
生成实体Bean:
?
?
@NamedQueries({ @NamedQuery(name="getAll",query="select c From Customer c"), @NamedQuery(name="deleteById",query="Delete c from Customer c where id=?1") }) @Entity public class Customer implements Serializable { private static final long serialVersionUID = 1L; @Id private long id; private int age; private String gender; private String name; ............................ }
?
persistence.xml:
?
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" 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_1_0.xsd"> <persistence-unit name="jejbClient" transaction-type="JTA"> <jta-data-source>ora1</jta-data-source> <class>com.bond.dom.Customer</class> <properties></properties> </persistence-unit> </persistence>
?
在ManagedBean中就可以使用了:
?
@EJB
private CustomerSessionBeanI customerbean;
?
?