terça-feira, 2 de julho de 2013

org.hibernate.exception.GenericJDBCException: Overflow Numérico / Caused by: java.sql.SQLException: Overflow Numérico

Solução: Altere a propriedade @Fetch de alguns mapeamentos para @Fetch(FetchMode.SELECT).

De:
public class ProcessoImp extends Processo implements Serializable, Cloneable{
@OneToOne
@JoinColumn(name="transportadorinternacional_id", insertable=false,updatable=false)
private Contato transportadorInternacional;

@OneToOne
@Fetch(FetchMode.JOIN)
@JoinColumn(name="moeda_valor_vmld", insertable=false,updatable=false)
private Moeda moedaVmld;
}

Para:
public class ProcessoImp extends Processo implements Serializable, Cloneable{
@OneToOne
@Fetch(FetchMode.SELECT)
@JoinColumn(name="transportadorinternacional_id", insertable=false,updatable=false)
private Contato transportadorInternacional;

@OneToOne
@Fetch(FetchMode.SELECT)
@JoinColumn(name="moeda_valor_vmld", insertable=false,updatable=false)
private Moeda moedaVmld;
}

terça-feira, 25 de junho de 2013

org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations):

// Estrutura

public class LancamentoCc implements Serializable, Comparable<LancamentoCc>,Cloneable{
      
       @ManyToOne(fetch = FetchType.EAGER)
       @JoinColumn(name="str_nro_processo",referencedColumnName="nref", insertable=false,updatable=false)
       private AbreProcesso processo;
      
       @ManyToOne(fetch=FetchType.LAZY)
       @JoinColumn(name="int_movimento_conta", insertable=false, updatable=false)
       private MovimentoCc movimento;
}
public class AbreProcesso implements Serializable,Cloneable {
      
       @OneToMany(mappedBy="processo", cascade = CascadeType.ALL,fetch=FetchType.EAGER, orphanRemoval = true)
       @Fetch(FetchMode.SUBSELECT)
       protected Collection<LancamentoCc> movimentos = new ArrayList<LancamentoCc>();
}
public class MovimentoCc implements Serializable{
      
@OneToMany(mappedBy="movimento", cascade = CascadeType.ALL, fetch = FetchType.EAGER ,orphanRemoval=false)
       @Fetch(FetchMode.SELECT)
       private List<LancamentoCc> lancamentos = new ArrayList<LancamentoCc>();
}

// Dessa forma ocorre o erro
public
String delete(ContaReceber conta) {
       try{
              dao = new LancamentoContaDao<ContaReceber>(HibernateUtil.getSession(), ContaReceber.class);
             dao.delete(conta);                                         
       }catch (Exception e) {
              e.printStackTrace();
       }
       return null;
}

// Dessa forma funciona
public
String delete(ContaReceber conta) {
       try{
              Dao<AbreProcesso> dao = new Dao<AbreProcesso>(HibernateUtil.getSession(), AbreProcesso.class);
              AbreProcesso processo = conta.getProcesso();
              processo.getMovimentos().remove(conta);
              dao.save(processo);                                        
       }catch (Exception e) {
              e.printStackTrace()
       }
       return null;
}


segunda-feira, 17 de junho de 2013

java.util.ConcurrentModificationException


Causa do erro
for(Lancamento lanc : processo.getLancamentos() ){
  if(lanc.getStrOrigem() != null && lanc.getStrOrigem().equals("FE")){
  processo.getLancamentos().remove(lanc);
  }
}

Solução, usar iterator
for (Iterator<Lancamento> iterator = processo.getLancamentos().iterator(); iterator.hasNext();) {
Lancamento lancamento = iterator.next();

if(lancamento.getStrOrigem() != null && lancamento.getStrOrigem().equals("FE")){
iterator.remove();
}
   
}

Fonte: http://www.guj.com.br/java/30323-erro-com-collections-javautilconcurrentmodificationexception

sexta-feira, 14 de junho de 2013

h:selectOneMenu com converter


Classe a ser convertida
@Entity
public class Comissao implements Serializable{

  @Id
  private Integer id;
     private String descricao;

}

Classe onda a classe a ser convertida é utilizada
@Entity
public class Processo implements Serializable{
     // Podem ocorrer problemas durante o carregamento do h:selectOneMenu, se marcado como LAZY
  @OneToOne(fetch = FetchType.EAGER)
  @JoinColumn(name="comissaoId")
  protected Comissao comissao;
}

Converter
public class ConverterComissao implements Converter{

@Override
public Object getAsObject(FacesContext context, UIComponent component, String string) {
if(string == null || string.isEmpty()){
return null;
}

Dao<Comissao> dao = new Dao<Comissao>(HibernateUtil.getSession(),Comissao.class);

Integer id = Integer.valueOf(string);

return dao.get(id);
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object object) {
Comissao comissao = (Comissao) object;
if(comissao == null || comissao.getInt_id() == null){
return null;
}
return String.valueOf(comissao.getId());
}

}

Função para popular o h:selectOneMenu
public List<Comissao> comboComissao(){
Dao<Comissao> dao;
dao = new Dao<Comissao>(HibernateUtil.getSession(),Comissao.class);

Comissao comissao =  new Comissao();
comissao.setStr_descricao("");
comissao.setInt_id(null);

List<Comissao> list = new ArrayList<Comissao>();

list.add(comissao);

try{
list.addAll( dao.findAll("int_id", false) );
}catch (Exception e) {
new GeraFacesMessage("ATENÇÃO: OCORREU UM ERRO DURANTE O PROCESSAMENTO, A OPERAÇÃO NÃO FOI EFETUADA! \n",e);
e.printStackTrace();
}

return list;
}

O h:selectOneMenu
<h:selectOneMenu value="#{fechamentoMB.processo.comissao}" maxListHeight="50px;" converter="converterComissao">

     <f:selectItems value="#{selectItems.comboComissao}" var="comissao" itemValue="#{comissao}" itemLabel="#{comissao.descricao}" />

<f:ajax event="change" render="optPanel" listener="#fechamentoMB.changeListenerComissao()}"/>

</h:selectOneMenu>

quarta-feira, 15 de maio de 2013

JSF: Exibir um popup durante a execução de um evento



<a4j:commandButton
status="waitModalStatus"
title="Enviar arquivo via FTP"
actionListener="#{processoMB.sendFtp(upload)}"
image="/resources/images/16x16/up.png">


<rich:popupPanel
    id="waitModal" style="text-align:center" autosized="true" modal="true" width="200" >
<h:graphicImage library="images" name="ajaxloader32.gif" alt="ai"/><br />
    <h:outputText value="Transmitindo o arquivo, aguarde!" />
</rich:popupPanel>

<a4j:status name="waitModalStatus">
    <f:facet name="start">
        <rich:componentControl event="start" operation="show" target="waitModal" />
    </f:facet>  
    <f:facet name="stop">
        <rich:componentControl event="stop" operation="hide" target="waitModal" />
    </f:facet>
</a4j:status>

segunda-feira, 13 de maio de 2013

Copiar arquivos no Java

Dessa forma o arquivo de destino não é alterado durante a cópia:


  1.  public static void copyFile(File source, File destination) throws IOException {  
  2.      if (destination.exists())  
  3.          destination.delete();  
  4.   
  5.      FileChannel sourceChannel = null;  
  6.      FileChannel destinationChannel = null;  
  7.   
  8.      try {  
  9.          sourceChannel = new FileInputStream(source).getChannel();  
  10.          destinationChannel = new FileOutputStream(destination).getChannel();  
  11.          sourceChannel.transferTo(0, sourceChannel.size(),  
  12.                  destinationChannel);  
  13.      } finally {  
  14.          if (sourceChannel != null && sourceChannel.isOpen())  
  15.              sourceChannel.close();  
  16.          if (destinationChannel != null && destinationChannel.isOpen())  
  17.              destinationChannel.close();  
  18.     }  
  19. }  

Dessa forma o arquivo de destino pode sofrer alterações:

  1. public class Teste {  
  2.     public static void main(String[] args) throws IOException {  
  3.         File arquivoOrigem = new File("c:/temp/original.txt");  
  4.         FileReader fis = new FileReader(arquivoOrigem);  
  5.         BufferedReader bufferedReader = new BufferedReader(fis);  
  6.         StringBuilder buffer = new StringBuilder();  
  7.         String line = "";  
  8.         while ((line = bufferedReader.readLine()) != null) {  
  9.             buffer.append(line).append("\n");             
  10.         }  
  11.           
  12.         fis.close();  
  13.         bufferedReader.close();  
  14.           
  15.         File arquivoDestino = new File("C:/temp/copia.txt");  
  16.         FileWriter writer = new FileWriter(arquivoDestino);  
  17.         writer.write(buffer.toString());  
  18.         writer.flush();  
  19.         writer.close();  
  20.           
  21.           
  22.           
  23.           
  24.     }  

quarta-feira, 17 de abril de 2013

JSF: Setar foco em um elemento que foi renderizado



<p:outputPanel id="optPanel">
   <h:inputText value="#{myBean.nome}" id="nome"/>

   <h:inputText>
      <a4j:ajax event="complete"  render="optPanel" oncomplete="nome.focus();"/>
   </h:inputText>
</p:outputPanel>