sexta-feira, 29 de maio de 2009

Margem espelho ireport (jasper para os leigos)

Trata-se de uma POG utiliza para gerar relatorios com margem espelhos:
o esquema ´e o seginte:
- cria-se dois relatorios iguais no conteudo, um com a margem certa e outro com a margem recuada
- depois passa pegando uma folha de cada para gerar o relatorio final



Report report = new Report(txDateInitial.getText(), txDateFinal.getText());
report.setBeginBefore(beginBefore);
report.setIsVerso((rbFrente.isSelected() ? Boolean.FALSE: Boolean.TRUE));
report.setFolha(folha);


String pathReportRecto = Util.getResource().getProperty("pathReportRecto");
JasperPrint printRecto = report.getReport(pathReportRecto);

String pathReportVerso = Util.getResource().getProperty("pathReportVerso");
report.setFolha((rbFrente.isSelected() ? folha-1: folha));
JasperPrint printVerso = report.getReport(pathReportVerso);

JasperPrint jasperPrint = new JasperPrint();
jasperPrint.setOrientation(JasperReport.ORIENTATION_LANDSCAPE);
jasperPrint.setName("Protocolo");

if (rbFrente.isSelected()) {
jasperPrint.setPageWidth(printRecto.getPageWidth());
jasperPrint.setPageHeight(printRecto.getPageHeight());
} else {
jasperPrint.setPageWidth(printVerso.getPageWidth());
jasperPrint.setPageHeight(printVerso.getPageHeight());
}

int i = 0;
Iterator<jrprintpage> iterator = printRecto.getPages().iterator();
Iterator<jrprintpage> iterator2 = printVerso.getPages().iterator();

if (rbFrente.isSelected()) {

while ( iterator.hasNext() ){
if (i % 2 == 0) {
jasperPrint.addPage(i, iterator.next());
if (iterator2.hasNext())
iterator2.next();
} else {
jasperPrint.addPage(i, iterator2.next());
if (iterator.hasNext())
iterator.next();
}
i++;
}

} else {
while ( iterator2.hasNext() ){
if (i % 2 == 0) {
jasperPrint.addPage(i, iterator2.next());
if (iterator.hasNext())
iterator.next();
} else {
jasperPrint.addPage(i, iterator.next());
if (iterator2.hasNext())
iterator2.next();
}
i++;
}

}

report.closeConnection();


if (jasperPrint.getPages().size()>0) {
Preview preview = new Preview(jasperPrint);
preview.setVisible(true);
preview.setExtendedState(MAXIMIZED_BOTH);
} else {
JOptionPane.showMessageDialog( this, "Os parametros informados não geraram nenhum relatório.", "Erro", JOptionPane.ERROR_MESSAGE);
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, ex.getMessage());
ex.printStackTrace();
}

quarta-feira, 1 de abril de 2009

iBatis + Spring + Flex = uau

Acho que fiquei loko de vez, em plena ferias to aproveitando pra aprender ibatis
e to fazendo isso convertendo um sistema simples, desenvolvido em um esquema velho
em MVC.

a ideia é aproveitar e fazer a jogadinha iBatis+spring +flex
mas como diz Jack, vamos por parte.

ate agora ta divertido e estou postando algumas dicas sobreo ibatis que estou encontrando:

1- cuidade em usar $xxx$, isso é bom pra gerar sql dinamico mas conforme a implementação abre espaço para um ataque sqlinjection, ex: voce colocar pra ordenar dinamicamente a tabela passando como paramentro o campo atravez de um lik na coluna /servlet?allCliente&orderBy=nome , e la na sql vc usa
order by $orderBy$ o cara pode mandar um comendo junto com a url.
nesses casos melhor usar alguma hash map ou ate mesmo enum para pega o paramentro e trocar pelo nome da coluna.

2 - result property="estado.id" column="estado_id" . isso serve para mapear uma bean que tenha como atributo uma outra bean e vc vai fazer um select so com join.

3 - Como fazer like com % já que no ibatis ele vai trocar? simples no sql vc usa o recurso de concatenar string do banco de dados ex. postgres where nome like '%' || #valuee# || '%'

4- typeAlias alias="Passaro" isso serve para colocar um apelido para a classe. assim vc nao precisa ficar passando sempre br.com.suaempresa.bean.Obejeto
nos depais tags sql vc so passa Passaro.

5 - sql id="fragmentWherePassaro". Esse é sem duvida o recurso mais interesante do ibatis. imagina que vc tem dois select um com count e outro o select normal. os dois utilizan a mesma clausula where. vc faz o where em uma tag separada e pode usar nos dois ou outros sql, lembrando sempre que o where pode ser dinamico

6 - nome dos parametro ex. #cliente.id# coloque #clienteID# se nao ele nao acha no map, para o ibatis o cliente.id ele vai tentan procurar por um objeto cliente com atributo id e nao um parametro "cliente.id"

o proximo post vou mostar algus configurações para usar spring com anotaçlões e com um service e dao generica e o terceiro e o Flex

segunda-feira, 23 de março de 2009

WEB SERVICES SEGUROS EM JAVA

Estou de ferias meio periodo (problemas no software), mas para o blog não ficar muito parado estou disponibilizando minha monografia do curso de pos-graduação que fiz em java.
Segue o resumo:

No momento, a arquitetura orientada a serviços encontra-se no radar de muitos
gerentes de TI, e um numero maior de empresas passam a dedicar cada vez mais
recursos à SOA. Se a SOA é a arquitetura, os Web Services são os blocos de
construção (IBM, 2008). Desta forma, Web Services estão em destaque no mundo
da computação distribuída como uma tecnologia que resolve os problemas de
interoperabilidade dos sistemas, pois utilizam padrões abertos e independentes de
plataforma, como HTTP e XML. Porem, por possuir uma infra-estrutura publica
oferece, também, uma maior preocupação no tocante a segurança. Neste presente
trabalho pretende-se demonstrar o funcionamento de Web Services seguros
utilizando a tecnologia Java abordando conceitos da arquitetura orientada a
serviços. Através de um estudo de caso será implementado Web Services, com o
auxilio de frameworks como Apache Axis e CXF, utilizando os padrões de protocolos
adotados pela industria demonstrando a especificação WS-Security.

download

terça-feira, 3 de março de 2009

Call Procedure Oracle with Java and Param Out

Segue um exemplo de como executar uma procedure com parametro de entrada e saida no oracle.


public static void main(String[] args) {
try {

Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:xe";
Connection con = DriverManager.getConnection(url, db_user, password);
System.out.println("Connected to database");

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date now = new java.sql.Date(simpleDateFormat.parse("12/02/2001").getTime());

String command = "{call SALDOS(?,?)}";
CallableStatement cstmt = con.prepareCall (command);
cstmt.registerOutParameter(2, Types.DECIMAL);

cstmt.setDate(1, now);
cstmt.execute();
Double str = cstmt.getDouble(2);

cstmt.close();

System.out.println("Retorno: "+str);

} catch (Exception e) {
e.printStackTrace();
}
}


isso foi testado com oracle 9 e 10 xe
usando driver jdbc oracle
ojdb14.jar
ojdb14_g.jar

sexta-feira, 27 de fevereiro de 2009

Welcome.blog

Este é o meu primeiro post, e quero aqui compartilhar algumas idéias em relação ao meu trabalho e se for interessante algum fato da minha vida tambem.

Espero que o que for colocado aqui seja util à alguem, assim como muitas coisas que encontrei na internet e que já me ajudo e ajudam muito.

A internet hoje tornou-se um grande mundo virtual, o lado b da realidade, onde encontra-se te tudo! Mas se formos analisar, ela pode ser muito mais, afinal quantas coisas vc já compartilhou na rede?

Bom... se sua resposta limita-se a um perfil no orkut ta na hora de pelo menos começar a responder a algum forum ou então fazer iqual eu e criar um blog. Vamos lá, comece vc tambem! Não doi nada :)

Algumas razões que me motivaram:

pessoas mediocres discutem pessoas
pessoas médias dicutem fatos
pessoas grandes dicutem ideias

Um pouco de publicidade não faz mal a ninguem.

Imagine um jornalista que sabe onde Osama Bin Ladem esta escondido, mas guarda essa informação so pra ele...

Perder no varejo para ganhar no atacado.