quarta-feira, 18 de maio de 2011

java.lang.NoClassDefFoundError: Could not initialize class

Erro:
java.lang.NoClassDefFoundError: Could not initialize class br.com.teste.ganymede.util.HibernateUtil

15:36:30,543 INFO  [CollectionBinder] Mapping collection: br.com.teste.ganymede.modelo.operacional.Mawb.hawbs -> AbreProcesso
15:36:30,549 INFO  [Version] Hibernate Validator 3.1.0.GA
15:36:30,637 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
java.lang.NoClassDefFoundError: Could not initialize class br.com.teste.ganymede.util.HibernateUtil
      at br.com.teste.ganymede.util.HibernateSessionfilter.doFilter(HibernateSessionfilter.java:29)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
      at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
      at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
      at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
      at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
      at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
      at java.lang.Thread.run(Unknown Source)

Origem do problema:
public class DespesaHawb implements Serializable{
            
      @ManyToOne
      // Origem do problema aqui!
      @JoinColumn(name="hawb_id")
      private AbreProcesso hawb;
    
      @OneToOne
      // Assim funciona!
      @JoinColumn(name="despesa_id",insertable=false,updatable=false)
      private Despesa despesa;
     
      @OneToOne
      // Assim funciona, pois a propriedade usuario esta anotada!
      @JoinColumn(name="insert_usuario")
      private Usuario usuario;
     
      @Id
      @GeneratedValue
     
generator="seq_despesahawb",strategy=GenerationType.SEQUENCE)
      private int id;
      private Integer despesa_id;
      private Double valor;
      private String moeda_codigo;
      private Double valor_moeda;
      private Double taxa_conversao;
      private Double valor_real;
      @Column(insertable=false,updatable=false)
      private Integer insert_usuario;
      @Column(insertable=false,updatable=false)
      private Date insert_data;
      private String hawb_id;
      private String tipo;   

Solução:
1)       Remover a propriedade hawb_id deixando somente o objeto hawb.

Ou
2)       Anotar a propridade hawb_id com @Column(insertable=false,updatable=false)
   Ou
3) Alterar o @ManyToOne para:@ManyToOne@JoinColumn(name="hawb_id",insertable=false,updatable=false)private AbreProcesso hawb;

quarta-feira, 2 de fevereiro de 2011

Exemplo de configuração do Hibernate com Firebird

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD/EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>


<session-factory name="firebird">
<property name="hibernate.dialect">org.hibernate.dialect.FirebirdDialect </property>
<property name="hibernate.connection.username">SYSDBA</property>
<property name="hibernate.connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>
<property name="hibernate.connection.password">masterkey</property>
<property name="hibernate.connection.url">jdbc:firebirdsql:127.0.0.1:banco</property>


<!--
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
-->


<!--
Pool de Conexões - C3P0 Colocar JARs na pasta server/default/lib do
JBoss
-->


<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<property name="hibernate.org.c3p0.min_size">2</property>
<property name="hibernate.org.c3p0.max_size">10</property>
<property name="hibernate.org.c3p0.timeout">180</property>
<property name="hibernate.org.c3p0.idle_test_period">100</property>


<!--
Cache de Segundo Nível - EhCache Colocar JARs na pasta
server/default/lib do JBoss Criar arquivo ehcache.xml na pasta
web-inf da aplicacao
-->

<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="hibernate.cache.use_structured_entries">true</property>
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.use_second_level_cache">true</property>

<!-- Classes -->
<mapping class="modelo.cadastro.Banco" />
<mapping class="modelo.cadastro.Cidade" />
<mapping class="modelo.cadastro.Pais" />
<mapping class="modelo.cadastro.Contato" />

</session-factory>

</hibernate-configuration>

terça-feira, 4 de janeiro de 2011

Localizar duplicatas no Oracle / Find duplicate records in Oracle

Lozalizar registros duplicados no Oracle:


select 
  c.cnpj,
  count(*)
from
  contato c
  having count(c.cnpj) > 1
  group by c.cnpj

sexta-feira, 17 de dezembro de 2010

Oracle: Inserir data em campo timestamp no oracle

INSERT INTO SIS.USUARIO
(ID,NOME,DATA_NASCIMENTO,INSERT_DATA)
VALUES
  (44,'ALEXANDRE PALMEIRA',TO_DATE('12/01/1983','MM-DD-YYYY'),TO_TIMESTAMP('07/15/2009 16:17:47', 'MM-DD-YYYY HH24.MI.SSXFF'));

quarta-feira, 8 de dezembro de 2010

Pesquisar em campo valor no formato brasileiro - 0.000,00

Para efetuar uma pesquisa em um campo Double, o valor deve estar no formato americano 0,000.00.

Porém, o usuário precisa digitar o valor no formato brasileiro 0.000,00.

Podemos resolver esse problema utilizando o método replace:

A propriedade pesquisaValue recebe o valor digitado pelo usuário no JSF no formato brasileiro, então utilizamos o replace para convertê-lo para o formato americano.

daoView
.getFindByValorPago( pesquisaValue.replace(".", "").replace(",",".") );




Com isso: 1.000,00 ou 1000,00 é convertido para 1000.00 e a pesquisa é efetuada.


quarta-feira, 20 de outubro de 2010

Exemplo de utilização do Quartz

O que é o Quartz?


É um framework de agendamento de tarefas.


Com ele você pode por exemplo agendar uma tarefa para executar: uma vez por dia, um vez por semana, uma vez por mês, uma vez a cada 5 minutos etc.


Obs: A finalidade desse post é mostrar de forma rápida e simples algumas funcionalidade desse framework, para que você inicie seu aprendizado no mesmo. Para maiores informações entre no site do Quartz, pois o mesmo tem muito mais recursos do que o apresentado aqui!


Utilizando o Quartz:


Faça o download da versão mais recente no site: http://www.quartz-scheduler.org/, descompacte o arquivo e copie o jar (quando esse post foi escrito a versão era quartz-1.8.3.jar) para o diretório lib de seu projeto.


Criaremos as seguintes classes:
1) Agenda - Responsável pelo agendamento das tarefas.
2) JobDia - Job que será executado uma vez por dia.
3) JobHora - Job que será executado a cada 60 minutos.


Classe Agenda:


 public class Agenda implements ServletContextListener {
 public static Scheduler sched;
 private Logger log;

 @SuppressWarnings("static-access")
 protected void init() throws ObjectAlreadyExistsException {

  try {
   /* Fábrica para criar instância de Scheduler */
   StdSchedulerFactory schedFactory = new StdSchedulerFactory();

   getLog().info("---------------- Criar Agendador ----------------");
   Agenda.sched = schedFactory.getScheduler();


   /* ************************Inicio Job Hora *****************************/
   getLog().info("---------------- Criando Tarefa: JobHora para ser executada a cada 60 minutos ----------------");
   JobDetail jobHora = new JobDetail("JobIntegraBysoft",Scheduler.DEFAULT_GROUP, JobHora.class);

   getLog().info("---------------- Criar Gatilho Job Hora  ----------------");
   SimpleTrigger sptJobHora = new SimpleTrigger(
     "JobHora", sched.DEFAULT_GROUP, new Date(), null,
     SimpleTrigger.REPEAT_INDEFINITELY, 3600L * 1000L);

   getLog().info("---------------- Faz o Agendamento de JobHora ----------------");
   java.util.Date ft = sched.scheduleJob(jobHora, sptJobHora);

   /* Imprime informações do Job */
   getLog().info(jobHora.getFullName() + " Foi programado para funcionar em: "
     + ft + " e repete baseado na expressão: ");
   /* ************************ Fim Job Hora *******************************/


   /* ************************ Inicio Job Dia *****************************/
   getLog().info("---------------- Criando tarefa: JobDia para ser executado todos os dias as 22 horas ----------------");
   JobDetail JobDia = new JobDetail("JobDia",Scheduler.DEFAULT_GROUP,
      JobDia.class);

   getLog().info("---------------- Criar Gatilho Para JobDia  ----------------");
   CronTrigger ctgJobDia = new CronTrigger("JobDia", sched.DEFAULT_GROUP);
   /* setCronExpression(* Segundos,* Minutos,* Horas,* Dias do mês,* Mês,* Dias da semana) */
   ctgJobDia.setCronExpression("0 00 22 * * ?");

   getLog().info("---------------- Faz Agendamento de JobDia ----------------");
   java.util.Date dataAniversariosDoDia = sched.scheduleJob(JobDia, ctgJobDia);

   /* Imprime informações do Job */
   getLog().info(JobDia.getFullName() + " Foi programado para funcionar em: "
     + dataAniversariosDoDia + " e repete baseado na expressão: "); 
   /* ************************ Fim Job Dia **************************** */


   /* Iniciar execução do Scheduler */
   Agenda.sched.start();   



  } catch (Exception e) {
   System.out.println("\n\nErro ao tentar iniciar Scheduler .\n\n");
   e.printStackTrace();
  }
 }


 public void contextInitialized(ServletContextEvent ce) {
  try{
   init();
  }catch (Exception ex) {
   ex.getStackTrace();
  }
 }



 public void contextDestroyed(ServletContextEvent arg0) {
  // Finaliza o schedule
  restart();
 }



 public void restart() {
  try {
   Agenda.sched.shutdown(true);
  } catch (Exception ex) {
   getLog().error("Erro ao tentar reiniciar as tarefas");
   getLog().error(ex.getMessage(), ex);
  }
 }



 protected Logger getLog() {
  if (this.log == null) {
   this.log = Logger.getLogger("AÇÃO : ");
  }

  return this.log;
 }



}


 
Adicione o listener no seu web.xml
<listener>
  <listener-class>br.com.lpc.ganymede.quartz.Agenda</listener-class>
</listener>






Classe JobHora


public class JobHora implements Job {
 @Override
 public void execute(JobExecutionContext arg0) throws JobExecutionException {
  System.out.println("Executando Job Hora");
 }
}








Classe JobDia



public class JobDia implements Job {
 @Override
 public void execute(JobExecutionContext arg0) throws JobExecutionException {
  System.out.println("Executando Job Dia");
 }
}



Execute a aplicação, e veja o resultado na console:

23:06:42,330 INFO  [StdSchedulerFactory] Quartz scheduler version: 1.4.5
23:06:42,330 INFO  [AÇÃO : ] ---------------- Criando Tarefa: JobHora para ser executada a cada 60 minutos ----------------
23:06:42,334 INFO  [AÇÃO : ] ---------------- Criar Gatilho Job Hora  ----------------
23:06:42,338 INFO  [AÇÃO : ] ---------------- Faz o Agendamento de JobHora ----------------
23:06:42,339 INFO  [AÇÃO : ] DEFAULT.JobIntegraBysoft Foi programado para funcionar em: Wed Oct 20 23:06:42 BRST 2010 e repete baseado na expressão:
23:06:42,339 INFO  [AÇÃO : ] ---------------- Criando tarefa: JobDia para ser executado todos os dias as 22 horas ----------------
23:06:42,341 INFO  [AÇÃO : ] ---------------- Criar Gatilho Para JobDia  ----------------
23:06:42,348 INFO  [AÇÃO : ] ---------------- Faz Agendamento de JobDia ----------------
23:06:42,351 INFO  [AÇÃO : ] DEFAULT.JobDia Foi programado para funcionar em: Wed Oct 20 23:07:00 BRST 2010 e repete baseado na expressão:
23:06:42,351 INFO  [QuartzScheduler] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
23:06:42,480 INFO  [STDOUT] Executando Job Hora
23:06:47,421 INFO  [ServerImpl] JBoss (Microcontainer) [5.0.0.GA (build: SVNTag=JBoss_5_0_0_GA date=200812042120)] Started in 52s:48ms
23:07:00,012 INFO  [STDOUT] Executando Job Dia



Bons estudos!

Exemplos de utilização do Criteria

public class ExemplosCriteria<T> {
 protected Class<T> persistentClass;
 protected Session session;

 public ExemplosCriteria(Session session, Class<T> persistentClass){
  this.session = session;
  this.persistentClass = persistentClass;
 }

 /** Retorna todos os registros da tabela com ordenação */
 @SuppressWarnings("unchecked")
 public List<T>findAll(String fieldOrder){
  Criteria c = this.session.createCriteria(persistentClass);
  c.addOrder(Order.asc(fieldOrder));
  return c.list();
 }

 /** Pesquisa de acordo com o campo e valor fornecido. retorna somente um objeto */
 @SuppressWarnings("unchecked")
 public T loadByField(String field, String value){
  Criteria c = this.session.createCriteria(persistentClass);
  c.add(Restrictions.eq(field, value));
  T t = (T) c.uniqueResult();
  return t;
 }

 /** Pesquisa de acordo com campo, valor (em qualquer posição do campo), ordena, e limita resultado */
 @SuppressWarnings("unchecked")
 public List<T> findByNameAnyWhere(String fieldName, String fieldValue,String fieldOrder, Integer maxResults){
   Criteria c = this.session.createCriteria(persistentClass);
   c.add(Restrictions.ilike(fieldName, fieldValue,MatchMode.ANYWHERE));
   c.addOrder(Order.asc(fieldOrder));
  
   if (maxResults != null) {  
    c.setMaxResults(maxResults);
   }
  
   return c.list();
 }

 /** Semelhante ao exemplo acima, porém, faz join em outras "tabelas/objetos" */
 @SuppressWarnings("unchecked")
 public List<T> findByNameAnyWhereJoin(String fieldName, String fieldValue,String fieldOrder, Integer maxResults){ 
   Criteria c = session.createCriteria(NotaFiscal.class, "nota");
   c.createAlias("nota.itens", "item",CriteriaSpecification.LEFT_JOIN);
   c.createAlias("item.usuario", "usuario",CriteriaSpecification.LEFT_JOIN);
   c.createAlias("usuario.unidadeOperacional", "unidade",CriteriaSpecification.LEFT_JOIN);
   c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
   c.addOrder(Order.asc(fieldOrder));
  
   Integer numero = Integer.parseInt(fieldValue);
   c.add(Restrictions.eq(fieldName, numero));
   return c.list();  
 }

 /** OR/AND no criteria */
 @SuppressWarnings("unchecked")
 public List<Usuario> getChamadosAbertosUsuario(Usuario usuario){  
     Criteria c = session.createCriteria(Usuario.class);
   
     Criterion c1 = Restrictions.eq("status", "A");
     Criterion c2 = Restrictions.eq("status", "C");
     c.add(Restrictions.or(c1, c2));
   
     c.add(Restrictions.eq("usuario", usuario));
     c.addOrder(Order.desc("id"));
   
     return c.list();
 }

 /** Criteria com cache de query ativado */
 @SuppressWarnings("unchecked")
 public List<View_Vencimentos> getVencimetosDoCliente(Integer matrizId){
  Criteria c = session.createCriteria(View_Vencimentos.class);
  c.add(Restrictions.eq("id_matriz", matrizId));
  c.addOrder(Order.asc("vencimento"));
 
  c.setCacheable(true);
  c.setCacheMode(CacheMode.NORMAL);
  return c.list();
 }

}