




1°) Baixe o arquivo parallaxdb.jar
2°) copie para sua pasta lib e adicione o parallaxdb.jar ao seu projeto.
3°) Baixe o driver jdbc do seu banco de dados, ponha também na pasta lib e adiciona o jar do driver jdbc no projeto.
4°) Adicione o arquivo parallax.properties ao projeto (Veja mais na seção "Preparando o Ambiente").
Obs.: Existe o projeto ParallaxDBSecurityProperties, este projeto tem a função de criar o properties acima aplicando criptografia na senha, isso garante que não vão saber a senha do seu banco de dados.
== ATENÇÃO ==
Se for usar o Android: adicione o SQLDroid dentro da pasta libs do projeto Android (Arquivos: sqldroid-1.0.0RC1.jar e sqldroidsecompat-1.0.0RC1.jar) e não coloque o driver jdbc do SQLite (O SQLDroid subistitui o driver jdbc padrão, sendo feito exclusivamente Android) e no arquivo parallax.properties ponha o valor do "type.database=sqldroid".
== Agora é só utilizar ==
Vídeo (Ver. 1.0): [Parallax 3.0] ParallaxDB - Framework de persistencia Android.& Desktop
Vídeo (ver. 1.5): [ParallaxDB - Ver. 1.5] - Framework de persisntecia - Tutorial Android e Desktop
Apresentação (SlideShare): ParallaDB - Framework de Persistência Android e Desktop
Resumo DTO: É uma classe que representa uma tabela do banco de dados, assim como seus atributos representam as colunas da tabela.
Resumo DAO: É responsavel em gerenciar as ações que envolvem so dados do banco de dados e seus DTOs, por exemplo a inserção, atualização e deleção de registros do banco de dados, assim como a consulta do mesmo é de responsabilidade do DAO, entre outras tarefas ligadas ao banco.
@Table(name="cliente")
public class Cliente implements BaseDTO {
@Column(name="cliente_codigo", isId=true)
private int codigo;
@Column(name="cliente_ativo", isActive=true)
private int ativo;
@Column
private String nome;
}
@Table: Informações da Tabela . Abaixo veja a função dos parametros.
@Column: Informa o nome do campo, se é chave primaria e se é uma coluna "ativo/inativo". Abaixo veja a função dos parametros.
BaseDTO: É uma interface que força a implementação de dois outros metodos, os metodos são getId() e setId(int id), Base DTO é uma interface e não uma classe abstrata, pois uma classe ia gerar um acoplamento forte. Abaixo um exemplo de implementação baseado no 1° exemplo:
@Override
public int getId(){
return this.codigo;
}
@Override
public void setId(int id){
this.codigo = id;
}
Perceba que estes dois metedos recebem e retornam o valor do atributo que representa a chave primaria. Isso é um facilitador e um agilizador para o BaseDAO, sem isso esses metodos seriam chamados por Reflection, em N situações, requisitando um processamento extra e performance é um dos pontos chaves, já que a função primaria deste framework é trabalhar harmoniosamente e corretamente no Sistema Operacional Android. Lembrando que o "@Override" é uma anotação nativa do Java para indicar sobrescrita de metodo.
Uma boa pratica no DTO é sobreescrever os metodos hasCode(), equals() e toString(). Abaixo alguns modelos:
/**
* Metodo para a comparação entre dois objetos
*
* @param obj - Objeto para a comparação
* @return boolean - True=Objetos iguais | false=Objetos diferentes
*
*/
@Override
public boolean equals(Object obj) {
if ( this == obj ){
return true;
} else if ( this == null ){
return false;
} else if ( !(obj.getClass() == this.getClass()) ){
return false;
} else if ( ((BaseDTO)obj).getId() == this.getId()){
return true;
}
return false;
}
/**
* Metodo que ordena através de código hash
*
* @return int - Código hash
*/
@Override
public int hashCode() {
int hash = 1;
hash = hash * 31 + this.getId();
return hash;
}
/**
* Metodo que retorna um texto, quando chamam o objeto
* diretamente "new objeto()" ou "new objeto().toString()"
*
* @return String - Texto personalizado
*/
@Override
public String toString() {
return "id: " + this.getId();
}
Existe um classe abstrata no framework opcional chamada AbstractBaseDTO, ela já implementa os metodos hasCode(), equals() e toString(), além de já ter o "implements" para BaseDTO. Porém não aconselho a utilizar esta classe, pois gera o que chamamos de acoplamento forte, isso é uma pratica que devemos evitar, utilizar a interface é a melhor opção (Porém se ao analizar ver que ter as implementações dos três metodos acima compensa mais, então é só utilizar a mesma).
Atenção: Se herdader esta classe (extends AbstractBaseDTO), não é necessario implementar BaseDTO ("implements BaseDTO")
BaseDAO
dao.getList();
Observação: Repare na {}, ao fazer isso, se cria uma classe anonima que herda BaseDAO e ira utilizar o tipo generico Cliente indicado no código acima. Mas porque sou obrigado a fazer isso? Por que, o BaseDAO trabalha com reflection e ele utiliza o tipo generico para saber qual classe DTO ele esta trabalhando, então se passar o construtor normal "new BaseDAO
public class ClienteDAO extends BaseDAO
public ClienteDTO getMyMethod(int id){
List
try {
listDTO = this.getListCustomSQL("Select * from Cliente where"+this.getFieldId()+"=?", false, id);
if (listDTO!=null && listDTO.isEmpty()==false){
return listDTO.get(0);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
Observação: Uma boa pratica neste caso é aplicar Singleton no herdeiro do BaseDAO, na classe herdeira (Se não quiser usar o RegistryDAO), um exemplo seria por o código abaixo dentro da classe acima.
private static ClienteDAO instance;
// Método público estático de acesso único ao objeto!
public static synchronized ClienteDAO getInstance() {
if (instance == null) {
instance = new ClienteDAO();
}
return instance;
}
Primeiro lembre-se de ler o JavaDoc do projeto, todas as classes e metodos estão documentadas. Abaixo apenas um resumo dos metodos uteis pertencentes ao framework.
Essa classe utiliza um Designer Pattern chamado Registry, esse padrão de projeto é uma outra alternativa ao uso do padrão de projeto Singleton, porém me da a vantagem de adicionar e acessar de forma global os DAOs passados no seu metodo "add(...)" e recuperados no "get(...)", mantendo somente uma instancia de cada DAO vinculada a um DTO.
//Cria um objeto BaseDAO para tratar o DTO do tipo Cliente
RegistryDAO.add(new BaseDAO<Cliente>
//Acessando o DAO responsavel em manipular os objetos do tipo Cliente, passando apenas o class do DTO
List<Cliente> list = RegistryDAO.get(Cliente.class).getList();
Observação: Note que o Cliente.class é a chave para recuperar o BaseDAO, lembrando que o metodo addDAO(...) não insere dois objetos DAO que manipulem o mesmo tipo generico. Por exemplo:
RegistryDAO.add(new BaseDAO
//Ele NÃO vai adicionar este outro DAO, pois faz referencia a um DTO já existente (No exemplo o Cliente)
RegistryDAO.add(new BaseDAO
Quando trabalhamos com tabelas ou listas é comum querer pagina-las em algum momento. Porém o algoritomo para fazer isso costuma ser custoso, trabalhoso, dificil e ainda varia de base de dados para base de dados. Para resolver isso já foi implementado a paginação no proprio Framework. Abaixo alguns metodos de apoio.
1°) Antes de tudo informe no projeto principal o local onde se localiza o parallax.properties, abaixo um exemplo utilizando a LibGDX:
String filePath = Gdx.files.getLocalStoragePath() + "parallax.db";
InputStream fileProperties = Gdx.files.internal("data/parallax.properties").read();
Util.getInstance().loadGlobalProperties(fileProperties, filePath);
Onde "fileProperties" é onde localiza-se o arquivo properties, no exemplo acima ele esta em "assets/data/parallax.properties" (Seguindo o padrão da LibGDX). O "filePath" indica o local onde se localiza o banco de dados (Lembrando que este parametro é opcional, pois pode ser indicado no properties também, porém prevalece o valor indicado no properties caso ambos existam).
2°) Entendendo os parametros do parallax.properties.
- type.database (Obrigatorio): Indica qual banco de dados vai ser usado, abaixo os valores validos para o mesmo:
Atenção: Ao informar este atributo ele automaticamente carrega a url, urlPrefix e o classForName padrões para o tipo especificado.
- pagination.pagesize (Obrigatorio): Informa qual o numero de registros a serem exibidos por pagina.
Ex.: pagination.pagesize=5
- connection.classForName (Opcional): Informa o driver jdbc a ser usado.
Ex.: connection.classForName=org.sqlite.JDBC
- connection.urlPrefix (Opcional): Informa o prefixo da URL.
Ex.: connection.urlPrefix=jdbc:sqlite:
- connection.url (Opcional): Informa a url do banco de dados (Seu caminho completo)
Ex.: connection.url=c:\\Teste\\banco.db
- connection.user (Opcional): Informa o login de acesso do banco de dados.
Ex.: connection.user=parallax
- connection.password (Opcional): Informa a senha de acesso do banco de dados.
Ex.: connection.password=parallax123
- connection.password.crypt (Opcional): Informa se a senha informada no properties e criptografada, se for TRUE ele vai descriptografar a senha antes de checar a base de dados (Veja o modelo de criptografia aplicada no ConnectionFactory do projeto ParallaxDB).
Ex.: connection.password.crypt=false
Autor: Jeferson da Silva Januario
Vídeo: [Java Game Engine 2D] Parallax Project -Video 8: "Data Base Editor"
Curriculo Lattes: http://lattes.cnpq.br/1992863363156376
E-Mail: Este endereço de e-mail está protegido contra spambots. Você deve habilitar o JavaScript para visualizá-lo.
Antigamente o Parallax usava XML como base de Dados, recentemente na versão 2.0.0 isso foi mudado, onde agora ele usa banco de dados embarcado da Apache (Derby), com isso ficamos pendentes de entregar um editor de dados para que os desenvolvedores possam trabalhar em cima. Neste contexto que Jeferson Januario, se dispos a fazer este editor, ao qual agradecemos muito.
Caracteristicas do Editor:
- Para baixar va em nossa seção Downloads -> Projetos.
Obs.: Todos os links de download foram atualizados para a versão 2.0.0, incluso o mini-tutorial de instalação dos binarios para teste.


"Fala-se muito em processo de aprendizagem orientada para a autonomia intelectual do aluno, isto é, que proporcione estímulo à capacidade de raciocínio discente. Ora, isto exige a ampliação do espaço e do tempo destinados a provocar no estudante essa faculdade de pensar logicamente..." by CESUPA
Site Oficial: http://www.cesupa.br/
Hístoria: http://www.cesupa.br/ConhecaCesupa/histcesupa/histcesupa.asp
Informações Institucionais: http://www.cesupa.br/saibamais/normasacad/normasacad.asp
Objetivos e Metodologias: http://www.cesupa.br/ConhecaCesupa/objetmet/objetmet.asp
Site Oficial (Evento): http://www.acet.cesupa.br/compamostra/
Facebook (Evento): https://www.facebook.com/ViiCompAmostra
Projeto Parallax
Engine 2D para criação de Jogos em Java
Veja como é fácil criar um RPG 2D em Java usando esta engine nacional.
Apresentação: http://www.slideshare.net/MichelMontenegro/palestra-cesupa
- O foco da palestra foi explicar o raciocinio por tras da engine, o que levou a sua criação, os recursos já disponiveis na engine, quais tecnologias foram utilizadas e mercado de trabalho.
![]() |
![]() |
![]() |
![]() |
Pagina 4 de 15
Evite em uma iteração(For,While) alterar os dados da coleção em uso na iteração (Adicionar e Remover objetos). Isso pode gerar algum tipo de concorrencia, e nem tornando o metodo ou atributo sincronizado, vai resolver em alguns casos. |