Uma dica rapida para outubro nao passar em branco.
como uso o postgres desde a versao 6.4
no inicio para aceitar os caracteres do brasil utilizava o latin1
como enconding.
hoje na versao 8.4 o suporte a utf-8 esta se tornando padrao, entao o
que fazer para migrar as bases antigas?
Resposta esta na utilizacao de conversores de codificaçao do arquivo de backup.
para linux faça o seguinte:
- Gere um backup normal com pg_dump:
pg_dump -i banco > backup.sql
- utilize recodificadores de caracteres, no meu caso escolhi o recode (http://www.gnu.org/software/recode/recode.html):
recode l1..utf8 backup.sql
- por final, edite o arquivo para retirar o SET client_encoding = 'LATIN1'; que o pg_dump gera:
vim backup.sql
- feito isso basta importa o backup para o novo banco ja criado com a codificaçao UTF-8
psql banco < backup.sql
segunda-feira, 19 de outubro de 2009
sexta-feira, 11 de setembro de 2009
Palestra sobre Java Mobile com Roger Brinkley (Sun Microsystems)
Opa,
Dia 10 de setembro em maringa, mais precisamente no Cesumar, foi realizado uma palestra : "O futuro do desenvolvimento móvel com JavaME", com Roger Brinkley.
Roger Brinkley é o Líder da Comunidade Móvel & Embarcados da Sun Microsystems. É responsável pelo desenvolvimento comunitário relacionado a tecnologias Java ME. Roger possui mais de 30 anos de experiência profissional, sendo mais de 14 na Sun. É um palestrante asssíduo em conferências técnicas ao redor do mundo.
Estive la, com a ajuda (leia-se carona) do pessoal da unimake, e pude conferir de perto, estava na primeira fila, mais sobre o assunto.
O cara é estranho, começou lançando duas bolinhas de brinde da sun, com taco de golf,
pensei, hoje eu ganho brinde, que nada, foram os unicos de todo o encontro.
A desculpa foi que o tudo foi arranjado na hora, e ate o datashow e a tradução falharam.
Roger basicamente comentou sobre tres aspectos: mobile, tv digital, e embarcados.
Em relação a parte movel, ele comentou de um novo projeto chamado phoneME, que vai começar a vir no celulares para daqui uns 6 meses, esse projeto traz recursos avançados para o desenvolvedor inventar moda no celular. Assim ele pode programar para um e rodar em qualquer dispositivo com phoneME e tera o mesmo resultado, a mesma cara no caso. Comentou tambem sobre o lwuit (https://lwuit.dev.java.net/) que é um conjunto de componente para trabalhar com java me.
Na parte da tv digital o fato importante esta que a tecnologia brasileira esta toda em java, ele falou de projeto nos EUA o que pra mim ainda nao vem ao caso.
Por final, os embarcados (brinquedinhos caros), foi a que o pessoal gostou mais. Ele demonstrou o SUN SPOT, uns cubinhos que rodam aplicações java, que da pra inventar um monte de coisa, exemplo que ele demonstrou:
- um spot jogando bola com outro
- um carinho robo que desvia de obstaculos e ate de buraco
- um luva do tipo minority report, que ele usou para manipular imagens
- um dipositivo do tamnaho de uma carteira aberta que recebe dispositivos plug-play
Ja no no pinga-fogo, onde era proibido fazer pergunta sobre a oracle, o destaque foi para a resposta sobre o phoneME em relação o Java FX, a ide nova para programar para java mobile, e o suporte a multi-touch e android.
Do mais, o evento foi muito bom pois revi amigos e professores, e é bom ficar interado um pouco sobre novas tecnologias :)
Dia 10 de setembro em maringa, mais precisamente no Cesumar, foi realizado uma palestra : "O futuro do desenvolvimento móvel com JavaME", com Roger Brinkley.
Roger Brinkley é o Líder da Comunidade Móvel & Embarcados da Sun Microsystems. É responsável pelo desenvolvimento comunitário relacionado a tecnologias Java ME. Roger possui mais de 30 anos de experiência profissional, sendo mais de 14 na Sun. É um palestrante asssíduo em conferências técnicas ao redor do mundo.
Estive la, com a ajuda (leia-se carona) do pessoal da unimake, e pude conferir de perto, estava na primeira fila, mais sobre o assunto.
O cara é estranho, começou lançando duas bolinhas de brinde da sun, com taco de golf,
pensei, hoje eu ganho brinde, que nada, foram os unicos de todo o encontro.
A desculpa foi que o tudo foi arranjado na hora, e ate o datashow e a tradução falharam.
Roger basicamente comentou sobre tres aspectos: mobile, tv digital, e embarcados.
Em relação a parte movel, ele comentou de um novo projeto chamado phoneME, que vai começar a vir no celulares para daqui uns 6 meses, esse projeto traz recursos avançados para o desenvolvedor inventar moda no celular. Assim ele pode programar para um e rodar em qualquer dispositivo com phoneME e tera o mesmo resultado, a mesma cara no caso. Comentou tambem sobre o lwuit (https://lwuit.dev.java.net/) que é um conjunto de componente para trabalhar com java me.
Na parte da tv digital o fato importante esta que a tecnologia brasileira esta toda em java, ele falou de projeto nos EUA o que pra mim ainda nao vem ao caso.
Por final, os embarcados (brinquedinhos caros), foi a que o pessoal gostou mais. Ele demonstrou o SUN SPOT, uns cubinhos que rodam aplicações java, que da pra inventar um monte de coisa, exemplo que ele demonstrou:
- um spot jogando bola com outro
- um carinho robo que desvia de obstaculos e ate de buraco
- um luva do tipo minority report, que ele usou para manipular imagens
- um dipositivo do tamnaho de uma carteira aberta que recebe dispositivos plug-play
Ja no no pinga-fogo, onde era proibido fazer pergunta sobre a oracle, o destaque foi para a resposta sobre o phoneME em relação o Java FX, a ide nova para programar para java mobile, e o suporte a multi-touch e android.
Do mais, o evento foi muito bom pois revi amigos e professores, e é bom ficar interado um pouco sobre novas tecnologias :)
terça-feira, 18 de agosto de 2009
replicaçao postgres morna quase pelando
Voltamos!
E hoje num dia chuvoso nada melhor que escrever um tutorial
- Ta loko!
- Por que?
- Bom mesmo e´ se funcionar :)
depois de algumas pesquisas(google) de como fazer replicaçao com bando de dados
postgres chegamos a alguns resultados:
Com slony, ´e legal quando voce quer replicar determinadas partes do banco,
e tem o pgadmin que ajuda muito na configuracao. Contras nao replica
objetos largos. qualquer coisa que mexer no master ex. alterar tipo de campo, criar tabela
tem que fazer a mesma coisa no slave, o replicador nao faz automatico.
Com pgcluter precisa de no minimo tres maquinas, em algums casos com maquina virtual
vc coloca pra funcionar tudo na mesma maquina, mas dai nao tem vantagem :(
Ai foi que nosso amigo Edson (unimake), sugeriu o modo standby, no qual o slaver fica sendo atualizado
pelo master em um determinado tempo e no que precisa esta pronto para entrar em produçao.
Em busca de mais detalhes desse modo, descobrimos que existe o modo hot, e warm,
o hot o slave fica no ar e esta apto para consultas, no modo war o slave fica baixado
E com base nesse tutorial (http://www.gulbf.com.br/?q=node/33) estamos fornecendo um modo
de fazer isso.
O ambiente testado foi ubuntu e a versao do postgresql 8.3.
Para facilitar vamos utilizar simbolos para descrever onde o comando deve ser executado:
* na maquina master @
* na maquina slave #
- instalar o postgres:
# @ apt-get install postgresql
- instalar o rsync
# @ apt-get install rsync
- parar o banco
# invoke-rc.d postgresql-8.3 stop
- habilitar a conexao do ssh por chave publica
@ ssh-keygen
- copiar a chave publica para a slave
@ scp .ssh/id_rsa.pub root@192.168.1.x:/root/
- copiar o arquvio para .ssh/authorized_keys se nao existir
# cp /root/id_rsa.pub /root/.ssh/authorized_keys
- ou ediar se exister e colar o conteudo do id_rsa.pub para dentro
# vim .ssh/authorized_keys
- igualar o UID do usuario e do grupo postgres de ambas as maquinas
# vim /etc/group
# find / -group 109 -exec /bin/chown -v .125 {} \;
- onde o 109 era o uid antigo e 125 ´e o uid novo, caso for diferente o uid do slave em relacao ao master
# vim /etc/passwd
- lembrar de alterar o uid do group caso foi alterado acima
# find / -user 104 -exec /bin/chown -v 113 {} \;
- onde o 104 era o uid antigo e 113 ´e o uid novo, caso for diferente o uid do slave em relacao ao master
- mover o diretorio da instalacao e preparar um novo para recever os arquivo do master
# mv main/ main-old/
# mkdir main
# chown postgres:postgres main -R
Tudo pronto so sincronizar e rezar
@ /usr/bin/rsync -Cravzp /var/lib/postgresql/8.3/main/ root@192.168.1.x:/var/lib/postgresql/8.3/main/
Funciono? Graças a Deus?
agora so colocar um scrpt prar a cada intervalo sincronizar
Entao vou acrescentar mais algumas dicas como forma de melhoria do post
a primeira dela é simples, para poder configurar o rsync para poder conectar em uma porta diferente do ssh. Deve-se utilizar o parametro:
/usr/bin/rsync -Cravzp --rsh='ssh -p2220'
a segunda é tambem relacionada ao rsync. Em alguns casos o servidor slave pode executar o comando de sincronismo sem problemas, assim varias maquinas podem ser sincronizadas ou tambem, por algum motivo de segurança o servidor nao pode acessar o ssh do slave.
a terceira é importante! nao foi colocado nesse post mas é recomendavel habilitar os archives do postgres, assim se o db no master corromper, a replicação é repassada mas pelo logs da pra recuperar
E hoje num dia chuvoso nada melhor que escrever um tutorial
- Ta loko!
- Por que?
- Bom mesmo e´ se funcionar :)
depois de algumas pesquisas(google) de como fazer replicaçao com bando de dados
postgres chegamos a alguns resultados:
Com slony, ´e legal quando voce quer replicar determinadas partes do banco,
e tem o pgadmin que ajuda muito na configuracao. Contras nao replica
objetos largos. qualquer coisa que mexer no master ex. alterar tipo de campo, criar tabela
tem que fazer a mesma coisa no slave, o replicador nao faz automatico.
Com pgcluter precisa de no minimo tres maquinas, em algums casos com maquina virtual
vc coloca pra funcionar tudo na mesma maquina, mas dai nao tem vantagem :(
Ai foi que nosso amigo Edson (unimake), sugeriu o modo standby, no qual o slaver fica sendo atualizado
pelo master em um determinado tempo e no que precisa esta pronto para entrar em produçao.
Em busca de mais detalhes desse modo, descobrimos que existe o modo hot, e warm,
o hot o slave fica no ar e esta apto para consultas, no modo war o slave fica baixado
E com base nesse tutorial (http://www.gulbf.com.br/?q=node/33) estamos fornecendo um modo
de fazer isso.
O ambiente testado foi ubuntu e a versao do postgresql 8.3.
Para facilitar vamos utilizar simbolos para descrever onde o comando deve ser executado:
* na maquina master @
* na maquina slave #
- instalar o postgres:
# @ apt-get install postgresql
- instalar o rsync
# @ apt-get install rsync
- parar o banco
# invoke-rc.d postgresql-8.3 stop
- habilitar a conexao do ssh por chave publica
@ ssh-keygen
- copiar a chave publica para a slave
@ scp .ssh/id_rsa.pub root@192.168.1.x:/root/
- copiar o arquvio para .ssh/authorized_keys se nao existir
# cp /root/id_rsa.pub /root/.ssh/authorized_keys
- ou ediar se exister e colar o conteudo do id_rsa.pub para dentro
# vim .ssh/authorized_keys
- igualar o UID do usuario e do grupo postgres de ambas as maquinas
# vim /etc/group
# find / -group 109 -exec /bin/chown -v .125 {} \;
- onde o 109 era o uid antigo e 125 ´e o uid novo, caso for diferente o uid do slave em relacao ao master
# vim /etc/passwd
- lembrar de alterar o uid do group caso foi alterado acima
# find / -user 104 -exec /bin/chown -v 113 {} \;
- onde o 104 era o uid antigo e 113 ´e o uid novo, caso for diferente o uid do slave em relacao ao master
- mover o diretorio da instalacao e preparar um novo para recever os arquivo do master
# mv main/ main-old/
# mkdir main
# chown postgres:postgres main -R
Tudo pronto so sincronizar e rezar
@ /usr/bin/rsync -Cravzp /var/lib/postgresql/8.3/main/ root@192.168.1.x:/var/lib/postgresql/8.3/main/
Funciono? Graças a Deus?
agora so colocar um scrpt prar a cada intervalo sincronizar
#!/bin/bash
echo 'Iniciando sincronizacao de arquivos...'
/usr/bin/rsync -Cravzp /var/lib/postgresql/8.3/main/ root@192.168.1.x:/var/lib/postgresql/8.3/main/
echo 'Finalizado.'
echo 'Aguardando proxima sincronizacao...'
sleep 60
exec $(pwd)/replica.sh
Entao vou acrescentar mais algumas dicas como forma de melhoria do post
a primeira dela é simples, para poder configurar o rsync para poder conectar em uma porta diferente do ssh. Deve-se utilizar o parametro:
/usr/bin/rsync -Cravzp --rsh='ssh -p2220'
a segunda é tambem relacionada ao rsync. Em alguns casos o servidor slave pode executar o comando de sincronismo sem problemas, assim varias maquinas podem ser sincronizadas ou tambem, por algum motivo de segurança o servidor nao pode acessar o ssh do slave.
a terceira é importante! nao foi colocado nesse post mas é recomendavel habilitar os archives do postgres, assim se o db no master corromper, a replicação é repassada mas pelo logs da pra recuperar
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
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
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
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.
isso foi testado com oracle 9 e 10 xe
usando driver jdbc oracle
ojdb14.jar
ojdb14_g.jar
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
Assinar:
Postagens (Atom)
