em.getTransaction().commit();
} finally {
/* 关闭 EJB 实体管理器 */
em.close();
}
}
public void deleteBook(Book book) throws RemoteException {
/* 获得 EJB 的实体管理器 */
EntityManager em = emf.getEntityManager();
try {
/* 开始事务 */
em.getTransaction().begin();
/* 处理业务 */
Query q = em.createQuery("delete from Book c where c.id = :id");
q.setParameter("id", book.id);
q.executeUpdate();
/* 结束事务 */
em.getTransaction().commit();
} finally {
/* 关闭 EJB 实体管理器 */
em.close();
}
}
public Collection getBooks(String queryString) throws RemoteException {
/* 获得 EJB 的实体管理器 */
EntityManager em = emf.getEntityManager();
try {
/* 开始事务 */
em.getTransaction().begin();
/* 处理业务 */
List allBooks = em.createQuery(queryString).getResultList();
/* 结束事务 */
em.getTransaction().commit();
return allBooks;
} finally {
/* 关闭 EJB 实体管理器 */
em.close();
}
}
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
try {
/* 获取 JAVA EE 容器上下文环境 */
Context ejbContext = new InitialContext ();
Object o = null;
try{
/* 根据 JNDI 查找 kodo.persistence.EntityManagerFactoryImpl 的实例 */
o = ejbContext.lookup("ejb/kodo/emf");
}catch(Exception e){
/* 如果没有找到,尝试将 kodo.persistence.EntityManagerFactoryImpl 的实例绑定到 JNDI 上 */
EntityManagerFactory emfForEjb = Persistence.createEntityManagerFactory(null);
ejbContext.bind("ejb/kodo/emf",emfForEjb);
}
if (o == null)
{
/* 如果没有找到,尝试再次查找 */
emf = (EntityManagerFactory)ejbContext.lookup("ejb/kodo/emf");
}
else {
emf = (EntityManagerFactory)o;
}
} catch (NamingException e) {
throw new RuntimeException(e);
}
}
public void ejbCreate() throws RemoteException {
}
public void ejbActivate() throws EJBException, RemoteException {
}
public void ejbPassivate() throws EJBException, RemoteException {
}
public void ejbRemove() throws EJBException, RemoteException {
}
public void unsetSessionContext() {
ctx = null;
}
}
BookHome 接口
package org.vivianj.kodo.examples.ejb.stateless;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
/**
* BookHome 类提供 Session Bean 的 home 接口
*/
public interface BookHome extends EJBHome {
public BookRemote create() throws CreateException, RemoteException;
}
BookRemote 接口
package org.vivianj.kodo.examples.ejb.stateless;