Entrevista

16 de August de 2008

Olá Pessoal.

Tive a grande honra de ser entrevistado por meu amigo e colega de profissão, Rapahel, do blog http://www.raphamaster.com.br/blog/. Conversamos sobre tecnologia, mercado de trabalho, etc.

Para quem quiser, leia na íntegra nosso bate-papo:

http://www.raphamaster.com.br/blog/?p=8

Um abraço a todos.

Nasceu!

8 de August de 2008

Não, minha filha já tem mais de 7 meses e não tenho bebê novo para chegar. Também não é o nascimento de nenhum filho(a) de meus amigos grávidos (Eduardo e Cleverson), mas nessa última quarta-feira nasceu algo muito especial: A FlexIngá - Comunidade de Desenvolvedores Flex/AIR de Maringá-PR e Região.

Querem ver como foi? Acessem: http://www.flexinga.com/

Você, caro leitor, mora aqui em Maringá ou na região metropolitana?  Então venha participar. Fique atento ao site oficial, que terá avisos da próxima reunião.

Um abraços a todos!

(Desculpem me pela demora na atualização desse blog, mas ultimamente ando trabalhando muito. Prometo que logo voltarei ao normal em relação a minha meta de uma postagem por semana.)

Curso On-Line: Flex + Vídeos (streaming)

12 de June de 2008

AAAEeeeeee galera!
Primeiramente, desculpe pela demora dos Posts …. assunto tenho vários para postar, mas está faltando tempo… logo logo coloco o blog em dia.

Seguinte… A e-Genial, Solution Partner da Adobe no Brasil, está lançando mais um curso on-line:
Curso On-Line de Flex e Vídeos (streaming)

A grade do curso já está pronta, e no final será feito uma aplicação como essa: formigas.

Realmente, é uma excelente oportunidade de aprender sobre Flex e Vídeos. Principalmente agora que o mercado de EAD (Ensino a Distância) tem se aquecido muito no Brasil. É um nicho de mercado que pode render muito dinheiro para quem souber implementar/desenvolver aplicações de e-Learning.

Não perca tempo galera… vamos lá fazer a matrícula!!!

Abraços a todos… quem sabe nos encontramos lá no curso!

Mapeamento de Entidades com Chave Composta (JPA with Hibernate)

4 de May de 2008

Poucos dias antes de sair de férias precisei ajudar um amigo a fazer seu primeiro programa em Java e aproveitando o ensejo, fui ensiná-lo a construir, também, sua primeira aplicação em Flex (já que Adobe Flex foi definido como opção oficial da Elotech - onde trabalhamos - para suas aplicações web).

Como o banco de dados já foi definido anteriormente em uso por outros sistemas desktop - Delphi… ecaaa, tivemos que mapear nossas classes de entidades (@Entity) com chaves compostas (@Embeddable e @EmbeddedId). Mapear as classes no lado Java não foi problema, o problema foi descobrir o mapeamento correto no lado do Flex.

Considere o seguinte exemplo:

package com.mariojunior.sys.entidades;
//imports omitidos

@Entity
public class TesteCompositeId implements Serializable {
private static final long serialVersionUID = 1L;

//A classe interna que representa a chave composta
//precisa ser obrigatoriamente PUBLIC para que o BlazeDS
//possa “enxergar” a classe e serializá-la.

@Embeddable
public static class PK implements Serializable {

@Column(length=15)
private String login;

@Column(length=11)
private String cpf;

//getter e setters omitidos

}

//Atributo que representa o Tipo da chave composta.
@EmbeddedId
private PK id;

@Column
private String nome;

@Column
private String sobrenome;

//getters e setters omitidos
}

Em ActionScript 3, uma classe assim PODERIA ser mapeada da seguinte forma:

[Bindable]
[RemoteClass(alias=”com.mariojunior.sys.entidades.TesteCompositeId“)]
public class TesteCompositeId {

public static class PK {
public var login : String;
public var cpf : String;
}

public var id : PK;
public var nome : String;
public var sobrenome : String;
}

Eu disse que PODERIA, porque aqui temos dois problemas:
- Classes não podem ser estáticas.
- AS3 não suporta classes internas (acho isso um pouco chato, mas nada demais)

Além disso, precisamos mapear a classe PK em AS3 para que seja espelhada pela classe PK em Java.

Bem, a solução é simples: criar uma outra classe somente para representar a PK, e então mapeá-la corretamente, vamos ao código:

[Bindable]
[RemoteClass(alias=”com.mariojunior.sys.entidades.????????“)]
public class PK {
public var login : String;
public var cpf : String;
}

E na classe anterior (TesteCompositeId.as), tipar o atributo id com a classe PK:

public var id : PK;

Assim ficamos certo!
Agora, se você está me pergutando o porquê dos ???????? no lugar do nome da classe, já explico:

Como mapear uma classe interna do lado Java para uma classe simples em AS3?
Se você pensou em fazer :
(alias="com.mariojunior.sys.entidades.TesteCompositeId.PK) saiba que o objeto nunca será tipado corretamente! Pois TesteCompositeId é uma classe e não um pacote, logo não pode ser separado por um “.” (ponto).

A resposta para esse tipo de mapeamento está nos arquivos compilados java (bytecode). Depois de gerar os arquivos .class (resultado da compilação dos arquivos .java), basta olhar nos nomes dos arquivos e descobrir que toda classe interna é gerada em um arquivo .class separado e, por convenção, os arquivos possui a seguinte nomenclatura:
ClassePai$ClasseInterna (reparem o sinal de cifrão no meio dos nomes).

Como os des/serializadores de objetos AS <=> Java trabalham com a manipulaçao de arquivos .class (bytecode), é preciso que o mapeamento de classes no lado AS3 sejam compatíveis com os nomes de arquivos .class, e com isso matamos a charada ao fazermos isso:

[Bindable]
[RemoteClass(alias=”com.mariojunior.sys.entidades.TesteCompositeId$PK“)]

public class PK {
public var login : String;
public var cpf : String;
}

Assim, ao se fazer o Debug no Flex, foi fácil perceber que os objetos foram serializados corretamente. Tanto de Java para Flex como de Flex para Java.

Bem, não há nenhuma grande novidade nessa informação, mas como pesquisei (google) e vi que não havia nada na web falando sobre chaves compostas entre java + flex, então resolvi compartilhar aqui com vocês.

Fica um abraço para galera.

Mário Júnior.
(de férias em Bonito-MS)

Em breve… BlazeDS X Hibernate LazyLoad solved (beta-test ok)

25 de March de 2008

Salve galera….

Um grande amigo meu, Eduardo Rebola excelente programador Java, me mostrou um novo framework em que ele está ajudando a desenvolver na empresa onde trabalha - InsulaTI - o Vulcano.

Esse framework provê uma arquitetura muito interessante e fornece um caminho que permite ao desenvolvedor contornar o famoso problema de LazyLoad do Hibernate ao carregar coleções de objetos em tempo de execução. Lembrando que esse problema não é exclusivo do Flex, mas sim de toda e qualquer camada de visão implementada sem os cuidados necessários, ou seja, pode acontecer com JSP (principalmente quando se usa ajax), em Swing (programas desktop), etc…

Bem, depois de alguns testes e altas horas da madruga encima do ambiente em Flex, ele matou a charada conseguindo fazer com que os objetos fossem carregados a medida que fosse necessário.

Oq falta para publicar? Tempo… tempo para testarmos outra implementação em que estou trabalhando agora.

Minha idéia é basicamente simples. Você vai marcar na sua classe AS (Actionscript) quais os atributos que representam uma coleção usando uma meta-tag personalizada [LazyLoad] e enviar seu objeto usando um LoadRemoteObject próprio herdado do <mx:RemoteObject> padrão. Dentro do LoadRemoteObject está a chave do sucesso, que vai verificar quais campos estão marcados e carregá-los somente quando o getter do atributo for requisitado… legal né?!

Falta fazer alguns testes mais profundos, como por exemplo carregar coleções que estejam dentro de outras coleções, e também verificar o consumo que isto gera no servidor.

No entanto, estou muito ansioso para nosso próximo encontro onde deveremos matar esse problema de vez.

Quem sabe essa semana já posto alguma novidade para vocês.

Abraços e t+.

Hello Blogworld!

18 de March de 2008

É.. não resisti! Depois de alguns amigos me pedirem tanto (Ebertom e tantos outros) criei meu blog e entrei nesse mundo.
O Blog terá como foco principal expor minhas experiências com o Java, Flex e a integração entre ambos. Ainda preciso acertar alguns detalhes como configurar categorias, achar um template legal… enfim, com o tempo espero q fique bom tanto quanto os outros blogs brasileiros sobre Java, Flex e tecnologia em geral.

Como esse é o primeiro post, então nada melhor q começar com o bom e velho:

System.out.print(”Hello BlogWorld”);

ou melhor…. trace(”Hello BlogWorld”);

Abraços.