quarta-feira, 4 de dezembro de 2013

Configurando datasource no tomcat

Adicionar o seguinte trecho de código no arquivo context.xml.
Ele pode estar contido em: META-INF/context.xml no projeto;
conf/context.xml dentro do servidor;
e nas configurações de servidores do eclipse

<Resource name="jdbc/teste" auth="Container" type="javax.sql.DataSource"
             maxActive="150" maxIdle="75" maxWait="10000" minIdle="50"
        timeBetweenEvictionRunsMillis="30000" minEvictableIdleTimeMillis="60000"
        removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
              username="mm" password="123456" driverClassName="oracle.jdbc.OracleDriver"
     url="jdbc:oracle:thin:@mmdigitaltst:1522:xe"/>


Na sua classe para conexão:

import javax.naming.Context;
import javax.naming.InitialContext;
ou utilizar o injectioin: 
import javax.annotation.Resource;
@Resource(name="jdbc/teste")
DataSource ds;
Context initContext;
  try {
   initContext = new InitialContext();
//   NO TOMCAT
//    Context envContext  = (Context)initContext.lookup("java:/comp/env");
//      DataSource ds = (DataSource)envContext.lookup("jdbc/teste");
//   NO JBOSS
   Context envContext  = new InitialContext();
   DataSource ds = (DataSource)envContext.lookup("java:jdbc/teste");
//   
   Connection conn = ds.getConnection();
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery("select * from ami_cliente");
   int x = 0;
   PrintWriter pw = response.getWriter();
   while(rs.next()){
    pw.println(x);
    System.out.println(x);
    x++;
   }
   pw.flush();
   pw.close();
  } catch (NamingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }catch (SQLException e) {
   // TODO: handle exception
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 vamos informar ao Hibernate que ele vai usar uma conexão JNDI, para o Hibernate o que importa é o path. Se amanhã você mudar a senha de conexão, vai precisar alterar apenas o arquivo context.xml que está na pasta Server dentro do Eclipse, lembrando que isso é em ambiente de teste. Abaixo, veja como ficou meu arquivo hibernate.cfg.xml:
<hibernate-configuration>
<session-factory name="hibernate/SessionFactory">
<property name="hibernate.connection.datasource">java:/comp/env/jdbc/lpjava</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.jdbc.batch_size">0</property>
<mapping class="br.com.camilolopes.bean.TUsuario"/>
</session-factory>
</hibernate-configuration>
Mais informações: http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html
http://jbossdivers.wordpress.com/2011/08/31/configurando-data-source-no-jboss-as-6-1/
http://www.mastertheboss.com/jboss-datasource/jboss-datasource-configuration

segunda-feira, 18 de novembro de 2013

Criando scheduler com Quartz

import org.apache.log4j.Logger;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;

import br.com.gmm.scheduler.tasks.MMOnlineSchedulerTask;

public class SchedulerAgent extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 4867136433906642551L;
private static final Logger LOGGER = Logger.getLogger(SchedulerAgent.class.getName());
public static Scheduler scheduler;


@Override
public void init(ServletConfig config) throws ServletException {
LOGGER.info("iniciando servletAgente de scheduler");


try {
Scheduler scheduler = new StdSchedulerFactory().getDefaultScheduler();
       scheduler.start();
      JobDetail jobDetail = new JobDetail("MyJob", scheduler.DEFAULT_GROUP, MMOnlineSchedulerTask.class); //Define qual a classe que contém o metodo Job a ser executado
      CronTrigger trigger = new CronTrigger("MyTrigger", scheduler.DEFAULT_GROUP, "0 0 8 * * ? *");// determina o horário de cada execução: todos os dias às 8:00 horas
      scheduler.scheduleJob(jobDetail, trigger);
} catch (SchedulerException  e) {
LOGGER.warn(e);
} catch (ParseException e) {
LOGGER.warn(e);
}


}
}

package br.com.gmm.scheduler.tasks;

import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import br.com.gmm.scheduler.entity.mmonline.ViewMMOnline;
import br.com.gmm.scheduler.facade.FacadeFactory;
import br.com.gmm.scheduler.facade.MmonlineFacade;

public class MMOnlineSchedulerTask implements ISchedulerTask, Job{
private static Logger logger = Logger.getLogger(MMOnlineSchedulerTask.class);
public void run(){

//esse método é executado!!!
StatusNewsScheduleTask newsScheduleTask = new StatusNewsScheduleTask();
newsScheduleTask.run();
}
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
run();

}
}



Ler html a partir uma URL

Como ler o html de uma pagina na web através da url com java:

import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class UrlTask{
   public static void main(String[] args){
      URL url;
try {
url = new URL("http://youtu.be/VKZ6Tmu9NWw?t=4m");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
       String linha = "";
       while ((linha = reader.readLine()) != null)
           System.out.println(linha);
       reader.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
   }

}

quarta-feira, 6 de novembro de 2013

Preencher zeros à esquerda com função Oracle

Preencher zeros à esquerda com função Oracle 

No Oracle assim no como no Postgres a função LPAD preenche caracteres no lado esquerdo de uma string.
Sintaxe:
LPAD (strlenghtpad)
Legenda:
stré a seqüência de caracteres preencher o lado esquerdo.
Length: posições (qtde) à preencher.
pad: é o valor que irá completar as posições.
Exemplos de uso:
lpad('tech', 7); retorna '   tech'
lpad('tech', 2); retorna 'te'
lpad('tech', 8, '0'); retorna '0000tech'
lpad('tech on the net', 16, 'z'); retorna 'ztech on the net'
lpad('tech on the net', 15, 'z'); retorna 'tech on the net'



Para preencher zeros a esquerda:
select LPAD(string,3,0) from tabela –- dada a string “A” com tamanho 3, e pad “0”, irá resultar em “00A”

--update geral na coluna para completar com zero a esquerda o valores com tamanho inferior a 6 digitos
update aluno set matricula = lpad(matricula, 6, '0'); --valor 123 vai para 000123, valor 2 vai para 000003, etc...

Veja a função RPAD caso queira fazer o prenchimento à direita.

quinta-feira, 31 de outubro de 2013

Paginação no Oracle

select *
from (select usuario.*, rownum rn
   from cad_mmnetwork usuario
  inner join cad_mmnetwork_dados dados
  on usuario.id_usuario = dados.id_usuario
  where usuario.cad_ativo = 'S'

  and rownum <=10)

where rn >5  ;

Rsultará em 5 linhas

Recuperando dados do ResultSet no java, array de objetos

Recuperando dados do ResultSet no java, array de objetos:

Retornando apenas um Integer:
    BigDecimal tot = new BigDecimal(0);
for (Object rows : sqlQuery.list()) {
tot =  (BigDecimal) rows;
}
return tot.intValue();


Retornando array de objetos:

for (Object rows : query.list()) {
c = new Contato();
Object[] row = (Object[]) rows;
c.setDados(new ContatoDados());
c.getDados().setPri_nome((String) row[0]);
c.setEmail_login((String) row[1]);

}