• Nenhum resultado encontrado

Hibernate e Hibernate Spatial

No documento Gis solution for energy & utilities (páginas 53-55)

O Hibernate é uma framework ORM (Object Relational Mapping) para Java que permite a ligação entre as classes que compõem a aplicação e a base de dados. Esta abordagem consiste numa alternativa ao uso da API JBDC (Java Database Connectivity), que apresenta vantagens ao nível da portabilidade (não são necessários drivers específicos para cada base de dados) e permite mapear facilmente o estado de objetos Java em linhas de uma tabela na base de dados.

Para fazer o mapeamento Objeto/Relacional, o Hibernate recorre à JPA (Java

Persistance API) e às suas anotações. A declaração de uma classe persistente é feita com

recurso à anotação @Entity, e adicionalmente – no caso do nome da classe ser diferente do nome da tabela – com a anotação @Table, onde se indica o nome da tabela na base de dados a que a classe se refere. Outras anotações são a @Column para indicar que um atributo corresponde a uma coluna da tabela e a @Id para indicar que se trata de uma chave primária. O mapeamento pode ser completamente feito num ficheiro XML, em vez de se utilizarem anotações, no entanto as anotações são muitas vezes preferíveis pela sua concisão e por serem verificadas em tempo de compilação [34].

A JPA permite a persistência de objetos, ou seja, permite persistir na base de dados qualquer alteração sobre a instância de um objeto durante a execução da aplicação. A classe responsável pela gestão de uma entidade é a EntityManager, sobre a qual são invocados todos os métodos que acedem à base de dados:

i) persist(Object entity) que faz a persistência de um objeto na tabela da entidade;

36

ii) remove(Object entity) que remove um objeto da tabela;

iii) getReference(Class<T> entityClass, Object primaryKey) e

find(Class<T> entityClass, Object primaryKey) que devolvem um objeto cuja chave primária é indicada no parâmetro primaryKey.

É ainda possível declarar interrogações manualmente recorrendo à linguagem do Hibernate HQL (Hibernate Query Language) ou mesmo ao típico SQL. A principal diferença entre o HQL e o SQL é que o primeiro abrange noções específicas do paradigma OO (Object-oriented) como herança, polimorfismo e associações [35].

Alternativamente à JPA, o Hibernate implementa outra solução para garantir a persistência de objetos, que consiste no uso da classe Session (e SessionFactory). No entanto, considera-se preferível a implementação da JPA por se tratar de um standard, este apresenta vantagens ao nível da portabilidade, sendo facilmente substituída a implementação do Hibernate por qualquer outra, sem a necessidade de alterar código.

O Hibernate Spatial é uma extensão do Hibernate que usa o JTS (Java Topology

Suite) como modelo de geometria. O JTS é uma implementação da especificação Simple Features for SQL do OGC. Deste modo, o Hibernate Spatial permite o tratamento de

dados geográficos ao nível do Java [36, 37].

JavaServer Faces e PrimeFaces

O JSF (JavaServer Faces) é uma framework baseada em componentes para a construção de páginas web com recurso ao Java de forma ágil. Com o JSF é possível apresentar, por exemplo, uma tabela gerada dinamicamente com valores de atributos de um objeto.

Para fazer uso do JSF, são necessários dois tipos de ficheiros diferentes: Beans, e páginas XHTML. Um Bean é uma classe Java que expõe propriedades de uma framework [38], para isso devem ser anotados com @ManagedBean ou @Named. Na verdade, esta última anotação refere-se a CDI Beans (Contexts and Dependency Injection Beans). A diferença entre estes e os Beans tradicionais é que os CDI Beans estão associados a um contexto e permitem a invocação de métodos de outros Beans. Para além de declarar uma classe como um Bean é necessário atribuir-lhe um âmbito (ou âmbito), definindo uma validade para o seu tempo de vida. Alguns dos âmbito mais usados são:

 @SessionScoped: Indica que o Bean mantém o contexto desde o início da sessão até o seu término. Tipicamente as sessões são iniciadas após uma ação de login, e terminam quando é feito logout ou quando a janela do browser é fechada. A grande maioria dos Beans da aplicação tem este âmbito.

 @RequestScoped: O Bean só guarda o contexto desde o momento em que é submetido um formulário até que ser recebida uma resposta do servidor.

37

 @ViewScoped: É guardado o contexto do Bean enquanto a mesma página estiver visível.

 @ApplicationScoped: O Bean existe durante todo o período em que a aplicação está a ser executada. Isto é particularmente útil quando existe um

Bean que tem de ser partilhando por todas as sessões.

Os Beans são invocados em páginas XHTML (Extensible Hypertext Markup

Language). Uma página XHTML é semelhante a uma página HTML, no entanto em vez

de se declararem as tags habituais do HTML, declaram-se os componentes do JSF e de quaisquer outras bibliotecas que estendam a framework (é no entanto possível usar tags HTML em páginas XHTML). O JSF faz uso da linguagem Facelets para a declaração de vistas, de forma a definir o layout das páginas XHTML. Deste modo é possível definir elementos comuns a várias páginas web, como o cabeçalho, o rodapé, ou uma barra que deve sempre ser mostrada em todas as páginas. Relativamente aos Beans, estes são sempre invocados através da EL (Expression Language), por exemplo para popular um componente como uma dataTable.

O PrimeFaces é uma biblioteca da framework JSF, composta por mais de 100 componentes que permite a construção de interfaces gráficas. Alguns destes componentes são extensões dos componentes base do JSF mas com os estilos definidos pelo PrimeFaces, outros são componentes únicos da biblioteca. O PrimeFaces disponibiliza cerca de 30 temas, prontos a serem usados nas aplicações web. Outras possibilidades passam pela definição de novos temas ou pela modificação dos existentes [39, 40].

Tanto o PrimeFaces como o JSF suportam AJAX para pedidos assíncronos ao servidor, estes dispõem de mecanismos de validação e conversão de dados, e permitem ainda o tratamento de eventos. Tudo isto com um nível de abstração suficientemente alto que dispensa o programador de conceitos demasiado técnicos relacionados com as tecnologias subjacentes, ficando assim unicamente focado na lógica aplicacional.

No contexto da solução georreferenciada, o PrimeFaces é, a par do OpenLayers, uma peça fundamental na interface web.

No documento Gis solution for energy & utilities (páginas 53-55)