terça-feira, 9 de junho de 2009

Obter valor de ManagedBean JSF 1.2

Método para obter valor de um ManagedBean na versão 1.2 do JSF.


public BaseViewBean accessBean(String beanName, Class viewClass) {

StringBuffer valueBinding = new StringBuffer();
valueBinding.append(CERQUILHA);
valueBinding.append(ABRE_CHAVES);
valueBinding.append(beanName);
valueBinding.append(FECHA_CHAVES);

ValueExpression exp = context.getApplication().getExpressionFactory()
.createValueExpression(context.getELContext(),
valueBinding.toString(), viewClass);

BaseViewBean bean = (BaseViewBean) exp.getValue(context.getELContext());

return bean;
}


Onde:
BaseViewBean - Classe ManagedBean padrão da qual todas extendem.

quinta-feira, 2 de abril de 2009

Acesso a banco via Hibernate

Para buscar a sessão responsável por executar o acesso ao banco, foi criado uma classe da seguinte forma:


import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new AnnotationConfiguration().configure()
.buildSessionFactory();
} 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);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}


E para realizar o acesso, basta chama-la da seguinte forma:


public class UserDaoImpl implements UserDao {

private Session session;

public void salvar(User user) {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
}

public List listar() {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
List userList = session.createQuery("from User").list();
session.getTransaction().commit();
return userList;
}



E então resta apenas utilizar de forma simples:


User c1 = new User();
c1.setNome("Raul Seixas");

User c2 = new User();
c2.setNome("Bruce Dickinson");

UserDao clienteDAO = new UserDaoImpl();
clienteDAO.salvar(c1);
clienteDAO.salvar(c2);

Utilizando @SequenceGenerator do hibernate com o Firebird

Para utilizar Sequence do firebird, basta criar o generator no banco de dados:

"CREATE SEQUENCE GEN_USUARIO_ID;"

E depois disso, utilizar este nome na entidade, mapeando da seguinte forma:


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@SequenceGenerator(name = "INC_USUARIO", sequenceName = "GEN_USUARIO_ID")
@Table(name = "usuario")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "INC_USUARIO")
private Long id;

@Column
private String nome;


E o mapeamento do arquivo hibernate.cfg.xml fica normal.


<?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 name="Hibernate" >
<!-- Database connection settings -->
<property name="connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>
<property name="connection.url">jdbc:firebirdsql:localhost/3050:E:\Desenv\Base\base.fdb</property>
<property name="connection.username">sysdba</property>
<property name="connection.password">masterkey</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.FirebirdDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- property name="hibernate.hbm2ddl.auto">create</property> -->

<mapping class="br.com.viartes.entities.User" />
</session-factory>
</hibernate-configuration>