Working with JBoss using seam architecture layers?
ibmoreno Oct 16, 2009 4:22 AMWorking with JBoss using seam architecture layers, DAO, Business. Below my classes.
My class DAO
@Name("userDAO")
public class UserDAO<E, PK extends Serializable> {
@In
private Session hibernateSession;
/**
* Classe passada como Generico para manipulacao.
*
*/
private Class<E> entityClass;
/**
* Construtor AbstractDAO
*
* @param clazz
*/
public UserDAO(Class<E> clazz) {
this.entityClass = clazz;
}
/**
* Metodo para recuperar todos os objetos persistido no Banco de Dados.
*
* @return List<E>, lista de Objetos.
*
* @throws SasException
*/
@SuppressWarnings("unchecked")
public List<E> findAll() throws SasException {
try {
Criteria criteria = getHibernateSession().getSessionFactory()
.getCurrentSession().createCriteria(entityClass);
criteria.addOrder(Order.asc("nome"));
return criteria.list();
} catch (HibernateException hibernateException) {
throw new SasException(String
.format("Não foi possível carregar a lista de objetos."),
hibernateException);
}
}
/**
* Metodo para retornar Objeto persistido no Banco de Dados pelo Id
* informado no parametro.
*
* @param id
* , valor do Id do objeto persistido.
*
* @return Objeto persistido.
*
* @throws SasException
*/
@SuppressWarnings("unchecked")
public E findById(PK id) throws SasException {
try {
return (E) getHibernateSession().get(entityClass, id);
} catch (HibernateException hibernateException) {
throw new SasException(
String
.format(
"Não foi possível recuperar o objeto identificado por '%d'.",
id), hibernateException);
}
}
/**
* Metodo para recuperar todos os objetos persistido no Banco de Dados, pelo
* valor da propriedade do Objeto informado.
*
* @param propertyName
* , nome da propriedade a ser usado como criteria de consulta.
* @param propertyValue
* , valor da propriedade informada.
*
* @return List<E>, lista de Objetos.
*
* @throws SasException
*/
@SuppressWarnings("unchecked")
public List<E> findByProperty(String propertyName, Object propertyValue)
throws SasException {
try {
Criteria criteria = getHibernateSession().getSessionFactory()
.getCurrentSession().createCriteria(entityClass);
criteria.add(Restrictions.ilike(propertyName, propertyValue));
criteria.addOrder(Order.asc(propertyName));
return criteria.list();
} catch (HibernateException hibernateException) {
throw new SasException(
String
.format("Não foi possível carregar a lista de objetos para o nome: "
+ propertyValue + "."), hibernateException);
}
}
/**
* Metodo para remover objeto persistido no Banco de Dados.
*
* @param entityClass
* , Objeto Entity persistido.
*
* @throws SasException
*/
public void remove(E entityClass) throws SasException {
try {
getHibernateSession().delete(entityClass);
} catch (HibernateException hibernateException) {
throw new SasException("Não foi possível remover o objeto.");
}
}
/**
* Metodo para persistir o objeto no Banco de Dados.
*
* @param entityClass
* , Objeto Entity a ser persistido.
*
* @throws SasException
*/
public void save(E entityClass) throws SasException {
try {
getHibernateSession().saveOrUpdate(entityClass);
} catch (HibernateException hibernateException) {
throw new SasException("Não foi possível salvar o objeto");
}
}
/**
* Metodo para recuterar a Sessao do Banco de Dados do Hibernate.
*
* @return Session.
*/
public Session getHibernateSession() {
return hibernateSession;
}
public void setHibernateSession(Session hibernateSession) {
this.hibernateSession = hibernateSession;
}
}
My class BO
@Name("userBO")
public class UserBO {
private UserDAO<Estado, String> userDAOEstado;
@Factory(value = "userDAOEstado", autoCreate = true)
public void initUserDAOEstado() {
userDAOEstado = new UserDAO<Estado, String>(Estado.class);
}
public void saveEstado(Estado estado) {
userDAOEstado.save(estado);
}
}
My class Action
@Name("acionBeanUser")
@Scope(ScopeType.EVENT)
public class ActionBeanUser {
@In(value = "userBO", create = true)
private UserBO userBO;
public void save() {
Estado estado = new Estado();
estado.setEstadoId("MT");
estado.setNome("MATO GROSSO");
userBO.saveEstado(estado);
}
}
My components.xml
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core" xmlns:persistence="http://jboss.com/products/seam/persistence"
xmlns:security="http://jboss.com/products/seam/security" xmlns:drools="http://jboss.com/products/seam/drools"
xmlns:web="http://jboss.com/products/seam/web" xmlns:mail="http://jboss.com/products/seam/mail"
xmlns:transaction="http://jboss.com/products/seam/transaction"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ui="http://jboss.com/products/seam/ui"
xsi:schemaLocation="http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.1.xsd
http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.1.xsd
http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.1.xsd
http://jboss.com/products/seam/ui http://jboss.com/products/seam/ui-2.1.xsd
http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.1.xsd
http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.1.xsd
http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.1.xsd">
<core:manager conversation-timeout="120000"
concurrent-request-timeout="500" conversation-id-parameter="cid" />
<persistence:hibernate-session-factory
name="hibernateSessionFactory" />
<persistence:managed-hibernate-session
name="hibernateSession" session-factory="#{hibernateSessionFactory}"
auto-create="true" />
<transaction:hibernate-transaction
session="#{hibernateSession}" />
</components>
The problem is that the DAO class is not injecting HibernateSession that is in context, I believe it is because it is using the @Factory instead of @In more using @ In in a class of features. How to do?
thank you
Ivan