SlideShare a Scribd company logo
1 of 25
- 1 -
ANÁLISE COMPARATIVA DE PERSISTÊNCIA DE DADOS ENTRE HIBERNATE E
NHIBERNATE
Artigo TCC - 2016
RINCO, Ricardo Antonio. Programador de Programas de Computador. Labsoft
Tecnologia. Rua Vig. João José Rodrigues, 905 – 7ª Andar, Centro, Jundiaí – SP, CEP
13201-001, 0xx11 4817-3625, ricardo.rinco@hotmail.com.
JANDL, Peter Junior. Mestre em Educação (USF), Engenheiro de Eletrônica
(Unicamp), Professor de cursos de Graduação, Pós-Graduação e Extensão do Centro
Universitário Padre Anchieta. Campus Prof. Pedro C. Fornari. Av. Dr. Adoniro Ladeira,
94, Jundiaí – SP, CEP 13210-800, 0xx11 4588-4445, pjandl@anchieta.br.
- 2 -
ANÁLISE COMPARATIVA DE PERSISTÊNCIA DE DADOS ENTRE HIBERNATE E
NHIBERNATE
Ricardo Antonio Rinco1
Peter Jandl Junior2
RESUMO
Este trabalho pretende, com o desenvolvimento de software, realizar a comparação entre
dois frameworks de Mapeamento Objeto-Relacional (ORM), Hibernate escrito em Java e
a sua versão portada para .Net, o NHibernate. Estes frameworks têm o objetivo de
diminuir a complexidade entre os softwares desenvolvidos que utilizam orientação a
objetos e que necessitam de uma base de dados modelo relacional. Foram
desenvolvidas duas aplicações semelhantes, uma utilizando o framework Hibernate e a
outra NHibernate, cujo as aplicações puderam ser comparadas e submetidas a testes de
desempenho.
Palavras-Chave: framework, Hibernate, NHibernate, Mapeamento Objeto-Relacional,
Desenvolvimento de Software.
ABSTRACT
This article intends with a software development compare two frameworks Object-
Relational Mapping (ORM), Hibernate wrote in Java and it’s a ported version to .Net,
NHibernate. These frameworks have the objective to reduce the complexity between
software developed that use the object-oriented and require a relational model database.
Two similar applications have been developed, a use of the Hibernate and another
NHibernate, whose applications can be compared and submitted to performance tests.
Keywords: framework, Hibernate, Nhibernate, Object-Relational Mapping, Software
Development.
1 Programador de Programas de Computador. Labsoft Tecnologia.
2 Mestre em Educação (USF) e Engenheiro de Eletrônica (Unicamp). Professor de cursos de
Graduação, Pós-Graduação e Extensão do Centro Universitário Padre Anchieta.
- 3 -
1. INTRODUÇÃO
Desenvolver uma aplicação orientada a objetos utilizando banco de dados
relacional pode ser um trabalho árduo. ZYL, KOURIE E BOAKE (2006) citam um problema
bem conhecido na persistência de dados entre objetos e base de dados relacional, o
qual é chamado de conflito de impedância. Segundo MACORATTI (2008) “Isso ocorre
porque os objetos de negócio podem ser representados de forma diferente em um
banco relacional”. A solução que tem sido utilizada com muita frequência são os
frameworks Object-Relational Mapping (ORM), que realizam a abstração do banco de
dados, o que torna a persistência dos objetos mais dinâmica, simples e fácil. Com um
ORM o trabalho do desenvolvedor passa a ser a definição de como e quais os objetos
serão mapeados pelo framework, sendo assim sua preocupação maior torna-se a
camada de negócio de sua aplicação, e não mais com o banco de dados e a
persistência da aplicação.
Em uma pesquisa realizada em outubro/2016 pela TIOBE, as linguagens Java e
C# estão entre as cincos principais linguagens de programação utilizadas no mundo,
Java se mantém na primeira colocação e C# ocupa a quarta colocação na pesquisa,
visto que a linguagem da Microsoft vem conquistando mais espaço no mercado ano
após ano. Com base nesta pesquisa, é nítido que as linguagens que possuem suporte
à programação orientada a objeto têm ganhado mais adeptos ao passar do tempo, com
isso a utilização de frameworks ORM também tem obtido um alto índice de utilização.
Hoje existem diversos frameworks disponíveis para a persistência de dados, tanto
para a plataforma Java quanto C#, mas estas plataformas possuem um framework em
comum, Hibernate disponível para a plataforma Java e a sua versão portada para o C#,
o NHibernate.
No desenvolvimento deste trabalho, foram utilizados autores como BAUER, KING e
CHATEKAR, fornecendo ao desenvolvimento conceitos de boas práticas de arquitetura,
- 4 -
auxiliando no entendimento das ferramentas, de maneira que o código tenha um
excelente desempenho.
Este trabalho, apresenta de forma simples e abrangente, uma análise destes
frameworks, comparando seus elementos comuns, particularidades e diferenciais. A
estrutura de organização dos tópicos assim como a apresentação dos testes teve como
base o trabalho realizado por ANGOTTI E CÂMARA.
Para a realização desta comparação serão desenvolvidos dois softwares, na
plataforma Java e o outro na plataforma C#, onde o conteúdo de cada sistema será
idêntico, ou seja, sem alterações. Encerrando o presente trabalho, as considerações
finais referenciam o framework que obteve melhores resultados no processo de
desenvolvimento e no desempenho da aplicação.
2. OBJECT-RELATIONAL MAPPING (ORM)
Object-relational Mapping ou Mapeamento Objeto-Relacional consiste em um
framework que tem como maior objetivo eliminar as desigualdades entre a
programação orientada a objetos e o modelo entidade-relacional, criando uma ligação
(mapeamento) entre os dois modelos, focando da melhor forma a produtividade e
visando aproveitar ao máximo o conceito de orientação a objetos. Esse framework fica
localizado em uma camada intermediária, entre a lógica da aplicação e o Sistema de
Gerenciamento de Banco de Dados (SGBD).
O principal conceito do ORM é o mapeamento dos elementos do banco de dados
relacional para a aplicação orientada a objetos. Além disso, temos a questão da
abstração da base de dados de forma que nossa aplicação persista e recupere dados
sem saber exatamente que tipo de SGBD está sendo utilizado. (COELHO, 2011)
Na parte relacional da aplicação prevalecem os princípios do SGBD com a
finalidade de armazenar e gerenciar corretamente os registros de forma segura e
eficaz. Na parte orientada a objetos trabalhamos com classes e métodos, ou seja,
- 5 -
mantemos os fundamentados da engenharia de software e seus princípios de como
fazer.
Figura 1 - Ilustração do relacionamento entre Objetos, ORM e Base de Dados.
Um ORM possui diversas características básicas, entre elas existem métodos que
irão realizar a interação entre a aplicação e o banco de dados, como representado no
diagrama da figura 1. O framework assumi algumas responsabilidades como, por
exemplo, o CRUD (Create, Read, Update e Delete), que nada mais é que as operações
de Inserção, Leitura, Atualização e Exclusão dos registros de uma base de dados.
Com a utilização de um ORM para a persistência de dados a necessidade de
escrever códigos de conexão com a base de dados e queries Structured Query
Language (SQL), são reduzidas de forma significativa, deixando o desenvolvimento
mais rápido, gerando códigos mais simples e ampliando a facilidade de possíveis
manutenções na aplicação.
É sempre bom lembrar que a utilização de um framework deste tipo não elimina
totalmente a necessidade de utilização de queries no desenvolvimento da aplicação,
mesmo que o ORM esteja englobando as técnicas principais de interação com a base
de dados. Em alguns casos haverá a necessidade da realização de consultas mais
customizadas, que neste caso, deverão ser realizadas através de queries.
- 6 -
3. HIBERNATE
Hibernate é um framework open-source, licenciado sob a LGPL 2.1 (GNU Lesser
General Public License), sendo desenvolvido para mapeamento objeto-relacional
escrito na linguagem Java. É considerado uma ferramenta de alto desempenho e uma
das soluções ORM mais flexíveis e poderosas do mercado. Segundo a sua própria
documentação “Ele não cuida apenas do mapeamento, mas também proporciona a
consulta de dados e facilidade de recuperação que podem significativamente reduzir o
tempo de desenvolvimento. Do contrário, o tempo seria consumido com a execução
manual de dados, executados em SQL e JDBC”.
Atualmente a ferramenta está na versão 5.2, lançada em outubro/2016, porém a
versão com maior índice de utilização por sua estabilidade é a 4.3.0, lançada no final
de 2013. O framework surgiu em 2001, por iniciativa de Gavin King, e logo se tornou
amplamente utilizado devido a uma grande diversidade de recursos para mapeamento
objeto-relacional. Um dos principais objetivos de Gavin ao criar o projeto era resolver
seus problemas referentes à persistência causados pelo Entreprise JavaBeans (EJB)
2.0, o qual considerava muito complexo. King utilizava seu tempo livre para que
pudesse resolver problemas identificados pelos usuários do Hibernate, e com um
escopo vasto o projeto tornou-se inviável de ser mantido apenas nos tempos livres,
assim King aceitou entrar para o JBoss Group, o que lhe permitiu dedicação completa
ao framework. (PRIMO, 2012).
A meta do Hibernate é aliviar o desenvolvedor em até 95% das tarefas comuns de
programação referente à persistência de dados (HIBERNATE, 2004).
A arquitetura em camadas é onde são definidas as interfaces entre os códigos
que implementam os vários objetos, permitindo uma mudança na maneira de instanciar
uma classe, sem a interrupção ao código nas demais camadas (BAUER E KING, 2005),
como ilustra a figura 2.
- 7 -
Figura 2 - Arquitetura Hibernate.
Fonte: baseado em (JBOSS, 2015)
4. NHIBERNATE
O NHibernate é uma ferramenta ORM open-source, mantida por uma comunidade
de desenvolvedores, NHibernate Community, licenciada sob a GNU Lesser General
Public License (LGPL), que surgiu através do Hibernate sendo totalmente portada para
o .Net Framework. O NHibernate manipula os objetos de persistência em .Net para
uma base de dados relacional, assim como feito na versão para Java. Seguindo uma
descrição XML de suas entidades e relacionamentos, o framework gera
automaticamente as queries SQL para carregar e armazenar os objetos.
Com suporte a persistência transparente suas classes não precisam seguir um
modelo de programação restritivo, os objetos persistentes não precisam implementar
nenhuma interface ou herdar de uma classe base especial, isso torna possível projetar
aplicações de negócios usando objetos simples do .Net (CHATEKAR, 2015).
Originalmente o NHibernate é um porte da versão 2.1 do framework disponível para
Java, sua versão mais recente é a 4.0.4, lançada em agosto/2015.
- 8 -
Utilizando a mesma estrutura de arquitetura, o framework da versão .Net é muito
semelhante ao Hibernate, sendo que todo o conhecimento e técnicas adquiridos
durante o desenvolvimento de aplicações que utilizam Hibernate são diretamente
aplicáveis ao NHibernate, inclusive a documentação existente pode ser utilizada para
as duas ferramentas.
Figura 3 - Arquitetura NHibernate.
Fonte: baseado em (HIBERNATE, 2016).
5. ARQUITETURA
As arquiteturas dos frameworks funcionam de maneira igual, na aplicação é
realizada a persistência dos objetos através do mapeamento XML, onde os frameworks
irão validar a sua estrutura, relacionando as tabelas da base de dados com as classes
e atributos da aplicação. Esses arquivos possuem as informações necessárias para a
comparação da estrutura de cada arquivo, após a realização da verificação das
estruturas o framework inicializa a transação na base de dados persistindo as
informações solicitadas. Além de que tanto o Hibernate quanto o NHibernate não se
limitam a buscar os objetos e todas as suas referências de uma só vez, pois após o
- 9 -
objeto e suas referências terem sido salvas na base de dados, pode-se buscar apenas
o objeto desejado e caso seja necessário é feita a busca por referência.
As arquiteturas dos frameworks foram divididas em camadas, conforme ilustrado
nas figuras 2 e 3, seguindo o mesmo padrão de divisão.
 Primeira Camada - Aplicação: aqui temos a representação da aplicação,
nele temos todas as classes e atributos que serão mapeadas.
 Segunda Camada - Framework ORM: representação das classes de
gerenciamento de sessão e conexão. Nesta camada o framework não
acessa diretamente a base de dados, fazendo uso da terceira camada.
 Terceira Camada - Acesso a Dados: esta camada representa as
abstrações de acesso a dados, cada framework utiliza as interfaces
disponíveis em sua respectiva linguagem de programação.
 Quarta Camada - Base de Dados: aqui sendo o banco de dados, onde
serão persistidos todos os dados.
5.1. Classes Hibernate e NHibernate
Os frameworks possuem objetos com definições especificas, que são
responsáveis pela comunicação da aplicação com o banco de dados, na tabela 1 é
exibido uma lista contendo as classes e suas descrições.
Tabela 1 - Descrição das classes dos frameworks Hibernate e NHibernate (JBoss, 2015).
Framework Classes Descrição
Hibernate SessionFactory
Cachê imutável composto de mapeamentos compilados para
um único banco de dados. Uma fábrica para Session e um
cliente de ConnectionProvider, SessionFactory pode conter
um cachê opcional de dados (segundo nível) reutilizáveis
entre transações, no nível de processo ou cluster.
NHibernate ISessionFactory
Hibernate
Objetos persistentes e
coleções
Objetos, de vida curta, single-threaded contendo estado
persistente e função de negócios. Esses podem ser
POJOs/POCOs, onde a única coisa especial sobre eles é que
são associados a exatamente uma Session. Quando a
Session é fechada, eles são separados e liberados para
serem usados dentro de qualquer camada da aplicação.NHibernate
- 10 -
Hibernate
Objetos e coleções
desanexados e
transientes
Instâncias de classes persistentes que ainda não estão
associadas a uma Session. Eles podem ter sido instanciados
pela aplicação e não persistidos ainda ou eles foram
instanciados por uma Session encerrada.
NHibernate
Hibernate Session
Objeto single-threaded, de vida curta, representa uma
conversação entre o aplicativo e o armazenamento
persistente. Cria uma camada sobre uma conexão
JDBC/ADO.Net. É uma fabrica de Transaction. A Session
possui um cachê obrigatório (primeiro nível) de objetos
persistentes, usado para navegação nos gráficos de objetos e
pesquisa de objetos pelo identificador.
NHibernate ISession
Hibernate Transaction
(Opcional) Objeto de vida curta, single-threaded, usado pela
aplicação para especificar unidades atômicas de trabalho.
Abstrai o aplicativo das transações JDBC/ADO.Net
adjacentes. Uma Session pode, em alguns casos, iniciar
várias Transactions. Entretanto, a demarcação da transação,
mesmo utilizando API ou Transaction subjacentes, nunca é
opcional.
NHibernate ITransaction
Hibernate ConnectionProvider
(Opcional) Uma fábrica de pool de conexões JDBC/ADO.Net.
Abstrai a aplicação do DataSource ou DriverManager
adjacentes. Não exposto para a aplicação, mas pode ser
implementado ou estendido pelo programador.NHibernate IConnectionProvider
Hibernate TransactionFactory
(Opcional) Uma fábrica para instâncias de Transaction. Não
exposta à aplicação, mas pode ser estendida ou
implementada pelo programador.
NHibernate ITransactionFactory
6. QUESTÃO PROBLEMA
Levando em consideração as possíveis diferenças entre cada framework, foi
realizada uma comparação para identificar a forma de implementação de cada
ferramenta e como cada uma delas se comporta diante de uma aplicação real. Para tal
análise foram desenvolvidas duas aplicações, uma desenvolvida utilizando a linguagem
de programação Java e seu respectivo framework, o Hibernate; e a aplicação com base
em .Net, foi desenvolvida com a linguagem C# e utilizando a implementação da versão
portada do Hibernate, o NHibernate.
As aplicações receberam as mesmas classes e atributos, sendo que os objetos
foram mapeados através de arquivos XML. As aplicações conectam à uma mesma
base de dados proporcionando, desta forma, um local único de armazenamento de
informações para a realização das operações.
- 11 -
7. ESPECIFICAÇÃO DO SISTEMA
Para a arquitetura Java, foi desenvolvida uma aplicação console onde foi utilizado
como software de desenvolvimento o Eclipse, versão Neon - Release 4.6.1, com a
utilização do framework Hibernate versão 4.3.0, onde sua estrutura pode ser vista na
ao lado esquerdo da figura 4.
Na implementação do NHibernate versão 4.0.4, foi desenvolvida uma aplicação
console, com base na linguagem C#, tendo como interface de desenvolvimento o
Visual Studio Community 2015, estruturada como mostra a figura 4 do lado direito.
Figura 4 - Estruturas das aplicações.
- 12 -
Para o gerenciamento de banco de dados foram selecionados dois dos mais
utilizados sistemas do mercado, MySQL Community Server versão 5.6.25 e o SQL
Server 2014 Express Edition. As duas bases de dados possuem as mesmas tabelas e
propriedades alocadas, e ambos os SGBD possuem apenas conexão local com cada
aplicação.
A arquitetura utilizada nas aplicações segue a técnica de desenvolvimento em
camadas, como mostra a figura 4, onde as classes podem ser divididas e visualizadas
em camadas, sendo uma excelente forma de organizar as classes que fazem parte da
aplicação com a principal finalidade de obter agilidade e facilidade em futuras
modificações em quaisquer camadas, não gerando grandes impactos as demais
classes (ROCHA, 2009).
7.1. Modelo de Dados
O modelo de dados, apresentado na figura 5, foi gerado a partir das tabelas
criadas na base de dados que são consumidas pelas aplicações.
Figura 5 - Modelo de Dados.
- 13 -
7.2. Diagrama de Classes
O diagrama de classes das aplicações desenvolvidas segue a mesma estrutura
de objetos, classes e atributos, ou seja, foram mantidos os mesmos padrões.
Figura 6 - Diagrama de Classe da aplicação Java.
Figura 7 - Diagrama de Classe da aplicação C#.
- 14 -
Os diagramas de classes exibidos nas figuras 6 e 7, possuem as mesmas
propriedades que foram apresentadas no modelo de dados, figura 5, onde a
semelhança é notada de forma clara, por exemplo a classe Instructor possui as
mesmas propriedades, (Id, Identification e Courses), seja na base de dados ou em uma
das aplicações, sendo uma forma de manter o padrão da estrutura do projeto. Os
diagramas também exibem as classes de Data Access Object (DAO), conhecidas por
padronizar a persistência de dados, separando as regras de negócio das regras de
acesso a base de dados.
8. PROTÓTIPOS DE TELA
Os protótipos demonstram as telas desenhadas em Console Application, também
conhecidas como Aplicação Console, são aplicações sem interface gráfica, sendo que
este tipo de aplicação executa os procedimentos através da linha de comando, com
entradas e saídas de informações. As informações são gravadas e lidas a partir da
janela de console (AÉCE, 2010), na figura 8 é mostrado o formato de exibição das telas
da aplicação Hibernate.
Figura 8 - Tela de exibição da aplicação Hibernate.
- 15 -
Na figura 9, são exibidas as telas da aplicação desenvolvida em C#, utilizando o
NHibernate. As telas foram desenvolvidas seguindo os mesmos padrões, com
pequenas variações de acordo com a linguagem utilizada.
Figura 9 - Tela de exibição da aplicação NHibernate.
9. TESTES DAS APLICAÇÕES
Durante os testes das aplicações foi utilizada a metodologia de teste Caixa-
Branca, também chamada de Teste Estrutural, que avalia o comportamento interno dos
componentes do software. Essa técnica trabalha diretamente sobre o código-fonte para
avaliar aspectos tais como: teste de condição, testes de fluxo de dados, testes de ciclos
e testes de caminhos lógicos (TOZELLI, 2008).
Também durante este processo foram realizados Testes de Integração, tal qual o
objetivo é encontrar falhas da integração das aplicações com as duas bases de dados.
Outro ponto importante a salientar, que impacta diretamente na realização dos
testes, é a máquina utilizada para tal finalidade, possuindo a seguinte configuração:
 Processador Intel® Core i7-3632QM CPU @ 2.20GHz.
 8gb de memória RAM Dual Channel.
 HD 1TB 5400RPM 8MB de Cache, 6.0Gb/s.
 Sistema Operacional Microsoft Windows® 10 de 64bits.
- 16 -
9.1. Cenário de Testes
As aplicações desenvolvidas foram submetidas aos mesmos testes e
comparações, assim podendo obter um resultado mais justo.
 Inclusão de registros: para a inclusão de informações nas bases de dados,
foi desenvolvida uma função para a integração de arquivo .csv (comma-
separated values), onde cada aplicação antes das inserções das
informações verifica a existência de cada registro na base de dados. Essa
integração pode ser realizada com diversos arquivos contendo inúmeros
registros.
 Seleção de registros: criadas diversas funções para a seleção dos registros
de cada tabela, assim como a junção de uma ou mais tabelas. Os retornos
dessas pesquisas podem variar de acordo com a quantidade de registros
que a base de dados possui.
 Alteração de registro: desenvolvida uma função para alteração de todos os
registros de uma determinada tabela, o número de alterações pode variar
de acordo com os registros alocados na base de dados.
 Exclusão de registros: assim como para os demais casos, uma função
específica foi desenvolvida para eliminar registros da base de dados,
também levando em consideração para exclusão a quantidade registros
disponíveis.
9.2. Comparações
Durante a implementação de cada aplicação utilizando os frameworks escolhidos,
nota-se uma semelhança muita grande entre elas, não apenas na arquitetura, como já
abordado, mas também na forma de codificar. Os arquivos XML, por exemplo,
possuem exatamente a mesma estrutura, tendo apenas uma pequena diferença por
- 17 -
conta da organização dos packages (Java) e namespaces (C#), sendo esta uma
peculiaridade de cada linguagem, como exibido na figura 10.
Figura 10 - Diferenças no mapeamento dos frameworks.
Na declaração das propriedades das classes, surge uma diferença entre os
frameworks, na versão Hibernate os atributos podem ser declarados de forma padrão,
porém na versão NHiberante os atributos que serão utilizados pelos frameworks
precisam ser declarados de forma virtual. A palavra-chave virtual é usada para
modificar a declaração da propriedade e permitir que ela seja substituída em uma
classe derivada (MSDN, 2015), nenhum dos dois frameworks obriga a declaração de
um construtor e ambos permitem a utilização de tipos de dados customizados.
Outra diferença no desenvolvimento das aplicações foi em relação ao arquivo de
configuração, “NomeArquivo.cfg.xml”, na ferramenta Hibernate é necessário declarar
as classes que o framework irá mapear, ou seja, caso uma classe esteja ausente nesta
propriedade o framework não irá mapear, e caso esta classe possua herança a
aplicação irá falhar em sua execução. Na aplicação desenvolvida em C# esta mesma
configuração é efetuada de maneira diferente, as classes a serem mapeadas devem
ser declaradas no atributo do SessionFactory, outra diferença é que neste caso basta
declarar as classes que possuem ligações, ou seja, classes filhas são mapeadas
automaticamente pela ferramenta.
Para ambos os frameworks foi necessário desenvolver uma classe para a criação
da SessionFactory, que como citado é a “fábrica de sessões”, as classes recebem
basicamente as mesmas funções, apenas sendo diferentes de acordo com cada
- 18 -
linguagem. O único diferencial entre elas é que esta classe na versão Hibernate torna
obrigatória a declaração de um construtor padrão.
Os repositórios das aplicações possuem inúmeras implementações semelhantes,
como por exemplo a função Save que mantém uma facilidade devido à utilização dos
frameworks, com esta função é possível realizar uma inserção e também efetuar a
atualização de um registro, está é uma característica das ferramentas de ORM.
Um fator muito importante para melhora no desempenho das aplicações é a
opção Lazy Loading (carregamento preguiçoso), opção ativada nas configurações
XML, esta opção faz com que determinados objetos não sejam carregados do banco
até que você precise deles, ou seja, são carregados apenas quando a aplicação
solicitar o carregamento destes (LANHELLAS, 2010), nesta opção os dois frameworks se
comportam da mesma forma, sendo necessário a definição nas configurações das
queries que irão utilizar este recurso quando solicitar os dados.
Eager Loading (carregamento ávido), função disponível em ambas as
ferramentas, porém sua implementação não foi abordada devido ao fato de ser um
método não recomendado por desenvolvedores, sendo considerada uma prática ruim.
Ainda nas classes de repositórios, uma das poucas diferenças entre os
frameworks é na realização da seleção de registros específicos, ou seja, colunas da
tabela.
Figura 11 - Diferença na seleção de registros únicos.
- 19 -
Como a figura 11 exibe, a diferença na implementação é a existência da
setProjection na versão Hibernate, através desta propriedade é possível selecionar
apenas os campos que serão retornados, já em C# isso é possível apenas com a
declaração da propriedade que deseja que seja retornada, tornando sua
implementação mais simples em relação a versão Java.
As demais similaridades são todas ligadas à seleção de dados, na
implementação de queries com a utilização do famoso Hibernate Query Language
(HQL), uma poderosa linguagem de consulta, que é muito parecida com o SQL padrão,
segundo ANGOTTI E CÂMARA o HQL ”Possibilita realizar consultas de maneira mais
rápida e assertiva, utilizando as entidades mapeadas”. No entanto, comparado com o
SQL, o HQL é totalmente orientado a objetos (JBOSS, 2015), as duas ferramentas se
comportam exatamente da mesma maneira, o único detalhe é que o HQL depende da
linguagem SQL, isso significa que qualquer implementação exclusiva de apenas um
SGBD torna a troca da base de dados mais complexa. As queries criadas com a
utilização do createCriteria, um dos métodos mais utilizados, se comportam da mesma
maneira, tanto na execução do comando quanto na implementação do código.
9.3. Testes de Desempenho
Foram realizados testes de desempenho em cada uma das aplicações, os testes
foram efetuados para comparar o desempenho das duas ferramentas, operando nos
dois bancos de dados disponíveis. Para cada aplicação foi implementado um contador,
onde é inicializado no momento da operação e paralisado ao seu término, é importante
dizer que não está sendo incluído nos testes o tempo que cada aplicação leva para
exibir os resultados na tela, na figura 12 é exibido exatamente a forma como é
demonstrado ao usuário o desempenho da operação.
- 20 -
Figura 12 - Exemplo de exibição do desempenho na aplicação Java.
Figura 13 - Exemplo de exibição do desempenho na aplicação C#.
A figura 13 também mostra a forma como é exibida as informações de
desempenho ao usuário, neste caso utilizando a aplicação C#.
Para melhor visualização do desempenho de cada ferramenta, todos os valores
obtidos foram inseridos em um gráfico, sendo mais fácil a comparação dos frameworks.
Foram realizados diversos testes de inserção, atualização, exclusão e seleção de
dados, sendo realizados nas duas bases de dados, MySQL e SQL Server. A figura 14
exibe o resultado do desempenho da aplicação com o framework Hibernate.
Figura 14 - Gráfico de desempenho do Hibernate.
- 21 -
A figura 15 ilustra o gráfico de desempenho da aplicação desenvolvida em C#, a
qual utiliza o framework NHibernate.
Figura 15 - Gráfico de desempenho do NHibernate.
As aplicações desenvolvidas receberam diversos pacotes de dados, sendo
divididos em lotes de 50 mil, 10 mil, cinco mil, um mil, 500 e 100 registros, onde são
efetuadas as inserções, alterações, atualizações e exclusões dos dados.
Durante os testes foi possível observar que as duas aplicações obtiveram um
ótimo resultado nas operações as quais foram submetidas. A estabilidade obtida nas
duas ferramentas durante os testes é um outro ponto interessante, mesmo alterando os
bancos constantemente, a duas aplicações mantiveram-se estável e confiável,
mantendo o desempenho de acordo com o apresentado nas figuras 14 e 15.
Todos os tempos obtidos ficaram abaixo do esperado, exceto quando a aplicação
C# foi submetida a uma carga de alterações de cinquenta mil registros conectada à
base de dados MySQL, o tempo para a realização desta operação completa chegou
próximo aos 1:50min, sendo a operação com maior tempo de execução registrado. Em
- 22 -
contrapartida a mesma operação utilizando a base de dados SQL Server obteve um
resultado impressionante, ficando abaixo, por exemplo, da operação de inserção, que
recebeu a mesma carga de registros. A Figura 16 exibe o gráfico com os desempenhos
das duas aplicações.
Figura 16 - Gráfico de desempenho do Hibernate e NHibernate.
10. CONCLUSÕES
O objetivo deste trabalho foi alcançado, isto é, com o desenvolvimento das duas
aplicações, cada uma utilizando um framework especifico, foi possível mensurar a
dificuldade de implementação de cada ferramenta. Um fato é que tanto o Hibernate
quanto o NHibernate possuem uma alta curva de aprendizado, porém a sua
implementação é semelhante em ambas as linguagens de programação, sendo
possível quase que “migrar” o código de uma linguagem para a outra, levando em
consideração que tanto Java quanto C# também possuem muitas sintaxes em comum.
Um ponto importante é que qualquer programador com bons conhecimentos em um
- 23 -
destes frameworks, terá facilidade de implementação do outro, seja Hibernate ou
NHibernate.
Quanto aos testes é nítido que o desempenho de ambas as ferramentas é similar,
com diferenças pequenas entre um banco e outro. Por exemplo, o framework Hibernate
possui um desempenho melhor quando conectado à uma base de dados MySQL. Na
versão portada para .Net, o framework obteve bons resultados, um pouco inferior ao
Hibernate, porém nesta ferramenta o SGBD com melhor desempenho é o SQL Server,
sendo que seu desempenho chega a ser superior ao próprio SQL Server implementado
com NHibernate.
Resumindo, ambas as ferramentas obtiveram um excelente desempenho
principalmente nos pacotes abaixo de dez mil registros. Através do cenário
apresentado a combinação com melhor desempenho, com base nos gráficos da figura
16, é a seguinte estrutura.
 Hibernate - SGBD com melhor desempenho: MySQL.
 NHibernate - SGBD com melhor desempenho: SQL Server.
O trabalho desenvolvido apresentou de maneira objetiva a implementação,
utilização e desempenho das ferramentas Hibernate e NHiberante, efetuando a
comparação entre as duas principais ferramentas de cada linguagem de programação.
11. REFERÊNCIAS BIBLIOGRÁFICAS
AÉSE, Juliano. Desenvolvendo Aplicações Console, 2010. Disponível em:
https://msdn.microsoft.com/pt-br/library/gg454568.aspx, recuperado em
25/11/2016.
ANGOTTI, Daniel José, CÂMARA, Carlos Eduardo. Comparação Entre os Frameworks
de Desenvolvimento de Software ‘Entity Framework’ e ‘Nhibernate’: Estudo de
Caso em um Sistema. Revista Engenho, São Paulo, dez. 2015. Disponível em:
- 24 -
http://www.portal.anchieta.br/revistas-e-
livros/engenho/pdf/revista_engenho_vol11_5.pdf, recuperado em 10/09/2016.
BAUER, Christian; KING, Gavin. Hibernate in Action. Greenwich: Manning, 2005. 394p.
CHATEKAR, Suhas. Learning NHibernate 4. Birmingham: Packt Publishing, 2015.
376p.
COELHO, Ricardo da Silva; NHibernate: Arquitetura, fundamentos e recursos, 2011.
Disponível em: http://www.devmedia.com.br/nhibernate-arquitetura-fundamentos-
e-recursos-revista-net-magazine-102/26942, recuperado em 15/10/2016.
ECLIPSE NEON. Download Eclipse Technology that is right for you, 2016. Disponível
em: https://www.eclipse.org/downloads/, recuperado em 26/11/2016.
HIBERNATE, Community Documentation: Preface, 2004. Disponível em:
https://docs.jboss.org/hibernate/orm/3.5/reference/en-US/html/preface.html,
recuperado em 24/09/2016.
JBOSS, Developer. Hibernate ORM Documentation (4.3), 2015. Disponível em:
http://hibernate.org/orm/documentation/4.3/, recuperado em 24/09/2016.
LANHELLAS, Ronaldo. Lazy e Eager Loading com Hibernate, 2010. Disponível em:
http://www.devmedia.com.br/lazy-e-eager-loading-com-hibernate/29554,
recuperado em 04/11/2016.
MACORATTI, José Carlos. VB.NET – Usando o NHibernate no VB 2008, 2008.
Disponível em: http://www.macoratti.net/08/12/vbn_hib1.htm, recuperado em
01/10/2016.
MSDN, Microsoft. virtual (Referência de C#), 2015. Disponível em:
https://msdn.microsoft.com/pt-br/library/9fkccyh4.aspx, recuperado em
06/11/2016.
MYSQL. Download MySQL Community Server, 2016. Disponível em:
https://dev.mysql.com/downloads/mysql, recuperado em 26/11/2016.
- 25 -
PRIMO, Izalmo. Desenvolvendo com Hibernate, 2012. Disponível em:
http://www.devmedia.com.br/artigo-java-magazine-73-desenvolvendo-com-
hibernate/14756, recuperado em 01/10/2016.
ROCHA, Gabriel. FILHO, Hildebrando. JURITY, Rutemberg. Camada de Persistência
de Dados para Aplicações Java: O Hibernate. Instituto de Matemática -
Universidade Federal da Bahia (UFBA), 2009. Disponível em:
http://coint.cm.utfpr.edu.br/Members/lgvalent/2009-2/banco-de-dados-ii-ne3a/17-
11-2009-material-inicial-sobre-hibernate/at_download/file, recuperado em
20/08/2016.
SQL SERVER. Microsoft® SQL Server® 2016 Express, 2016. Disponível em:
https://www.microsoft.com/pt-br/download/details.aspx?id=42299, recuperado em
26/11/2016.
TIOBE, Software BV. TIOBE Index for October 2016. Disponível em:
http://www.tiobe.com/tiobe-index/, recuperado em 05/11/2016.
TOZELLI, Paulo, Teste de Software, 2008. Disponível em:
http://imasters.com.br/artigo/9572/software/teste-de-
software?trace=1519021197&source=single, recuperado em: 06/11/2016.
VISUAL STUDIO COMMUNITY. Download Visual Studio Community, Free IDE and
Tools. 2016. Disponível em: https://www.visualstudio.com/vs/community/,
recuperado em 26/11/2016.
ZYL, Pieter Van; KOURIE, Derrick G; BOAKE, Andrew, Comparing the Performance of
Object Database and ORM Tool, 2006. Disponível em: http://www.odbms.org/wp-
content/uploads/2013/11/027.01-Zyl-Comparing-the-Performance-of-Object-
Databases-and-ORM-Tools-September-2006.pdf, recuperado em 01/10/2016.

More Related Content

Viewers also liked

TCC - Arthur Barbosa de Lira
TCC - Arthur Barbosa de LiraTCC - Arthur Barbosa de Lira
TCC - Arthur Barbosa de Lira
Arthur Lira
 
Cdi digital universal inteligente de competição multscan r$ 150,00 no merca...
Cdi digital universal inteligente de competição multscan   r$ 150,00 no merca...Cdi digital universal inteligente de competição multscan   r$ 150,00 no merca...
Cdi digital universal inteligente de competição multscan r$ 150,00 no merca...
Bittec Eletrônica
 

Viewers also liked (20)

Manual de serviço cg150 titan ks es esd indice
Manual de serviço cg150 titan ks es esd indiceManual de serviço cg150 titan ks es esd indice
Manual de serviço cg150 titan ks es esd indice
 
Pesquisa Medialogue Politico Digital 2016
Pesquisa Medialogue Politico Digital   2016Pesquisa Medialogue Politico Digital   2016
Pesquisa Medialogue Politico Digital 2016
 
Político 2.0 – Congresso na web (2011)
Político 2.0 – Congresso na web (2011)Político 2.0 – Congresso na web (2011)
Político 2.0 – Congresso na web (2011)
 
Político 2.0 – O mapa do poder digital (2014)
Político 2.0 – O mapa do poder digital (2014)Político 2.0 – O mapa do poder digital (2014)
Político 2.0 – O mapa do poder digital (2014)
 
Data Analytics no Governo
Data Analytics no GovernoData Analytics no Governo
Data Analytics no Governo
 
Cidades Conectadas – Santa Catarina
Cidades Conectadas – Santa CatarinaCidades Conectadas – Santa Catarina
Cidades Conectadas – Santa Catarina
 
Político 2.0 – Congresso na web (2011)
Político 2.0 – Congresso na web (2011)Político 2.0 – Congresso na web (2011)
Político 2.0 – Congresso na web (2011)
 
Conjuntura Digital
Conjuntura DigitalConjuntura Digital
Conjuntura Digital
 
Resum Tallers
Resum TallersResum Tallers
Resum Tallers
 
Segredos do you tube
Segredos do you tubeSegredos do you tube
Segredos do you tube
 
Demoiselle e o novo paradigma HTML5 Restful
Demoiselle e o novo paradigma HTML5 RestfulDemoiselle e o novo paradigma HTML5 Restful
Demoiselle e o novo paradigma HTML5 Restful
 
TCC - Arthur Barbosa de Lira
TCC - Arthur Barbosa de LiraTCC - Arthur Barbosa de Lira
TCC - Arthur Barbosa de Lira
 
Roadmap Demoiselle Framework v3
Roadmap Demoiselle Framework v3Roadmap Demoiselle Framework v3
Roadmap Demoiselle Framework v3
 
Manual de serviço nx 4 falc rodadian
Manual de serviço nx 4 falc rodadianManual de serviço nx 4 falc rodadian
Manual de serviço nx 4 falc rodadian
 
Apres_Lares_EC_PT
Apres_Lares_EC_PTApres_Lares_EC_PT
Apres_Lares_EC_PT
 
Análise da obra Sentimentos do mundo de Carlos Drummond de Andrade
Análise da obra Sentimentos do mundo de Carlos Drummond de AndradeAnálise da obra Sentimentos do mundo de Carlos Drummond de Andrade
Análise da obra Sentimentos do mundo de Carlos Drummond de Andrade
 
Revista MT - Feira MT
Revista MT - Feira MTRevista MT - Feira MT
Revista MT - Feira MT
 
Sociedad digital
Sociedad digitalSociedad digital
Sociedad digital
 
O CEO nas mídias sociais
O CEO nas mídias sociaisO CEO nas mídias sociais
O CEO nas mídias sociais
 
Cdi digital universal inteligente de competição multscan r$ 150,00 no merca...
Cdi digital universal inteligente de competição multscan   r$ 150,00 no merca...Cdi digital universal inteligente de competição multscan   r$ 150,00 no merca...
Cdi digital universal inteligente de competição multscan r$ 150,00 no merca...
 

Similar to Análise Comparativa de Persistência de Dados Entre Hibernate e NHibernate

Cobo, Cristiane Brandão. Especialização Banco de Dados
Cobo, Cristiane Brandão. Especialização Banco de DadosCobo, Cristiane Brandão. Especialização Banco de Dados
Cobo, Cristiane Brandão. Especialização Banco de Dados
cris.finholdt
 
Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernate
Agenor Neto
 

Similar to Análise Comparativa de Persistência de Dados Entre Hibernate e NHibernate (20)

BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
 
Oficina cake php
Oficina cake phpOficina cake php
Oficina cake php
 
Artigo oo em bd
Artigo   oo em bdArtigo   oo em bd
Artigo oo em bd
 
Projeto de Banco de Dados - Capítulo 1
Projeto de Banco de Dados - Capítulo 1Projeto de Banco de Dados - Capítulo 1
Projeto de Banco de Dados - Capítulo 1
 
WDES 2014 paper: SECOView: Uma Abordagem Baseada em Visões para Apoiar a Gove...
WDES 2014 paper: SECOView: Uma Abordagem Baseada em Visões para Apoiar a Gove...WDES 2014 paper: SECOView: Uma Abordagem Baseada em Visões para Apoiar a Gove...
WDES 2014 paper: SECOView: Uma Abordagem Baseada em Visões para Apoiar a Gove...
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
Implementing Product Line Variabilities - Presentation
Implementing Product Line Variabilities - PresentationImplementing Product Line Variabilities - Presentation
Implementing Product Line Variabilities - Presentation
 
RAD
RADRAD
RAD
 
Cp25540549
Cp25540549Cp25540549
Cp25540549
 
Cobo, Cristiane Brandão. Especialização Banco de Dados
Cobo, Cristiane Brandão. Especialização Banco de DadosCobo, Cristiane Brandão. Especialização Banco de Dados
Cobo, Cristiane Brandão. Especialização Banco de Dados
 
Corbawebserves
CorbawebservesCorbawebserves
Corbawebserves
 
Slide db4 o
Slide db4 oSlide db4 o
Slide db4 o
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetos
 
Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernate
 
Banco de dados orientado a objetos
Banco de dados orientado a objetosBanco de dados orientado a objetos
Banco de dados orientado a objetos
 
Merlinferramentassbc2006 Revisado Em6paginas
Merlinferramentassbc2006 Revisado Em6paginasMerlinferramentassbc2006 Revisado Em6paginas
Merlinferramentassbc2006 Revisado Em6paginas
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
Net uma revisão sobre a programação orientada a objetos
Net   uma revisão sobre a programação orientada a objetosNet   uma revisão sobre a programação orientada a objetos
Net uma revisão sobre a programação orientada a objetos
 

Recently uploaded

421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
LeloIurk1
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
LeloIurk1
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
HELENO FAVACHO
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
TailsonSantos1
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 

Recently uploaded (20)

PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 

Análise Comparativa de Persistência de Dados Entre Hibernate e NHibernate

  • 1. - 1 - ANÁLISE COMPARATIVA DE PERSISTÊNCIA DE DADOS ENTRE HIBERNATE E NHIBERNATE Artigo TCC - 2016 RINCO, Ricardo Antonio. Programador de Programas de Computador. Labsoft Tecnologia. Rua Vig. João José Rodrigues, 905 – 7ª Andar, Centro, Jundiaí – SP, CEP 13201-001, 0xx11 4817-3625, ricardo.rinco@hotmail.com. JANDL, Peter Junior. Mestre em Educação (USF), Engenheiro de Eletrônica (Unicamp), Professor de cursos de Graduação, Pós-Graduação e Extensão do Centro Universitário Padre Anchieta. Campus Prof. Pedro C. Fornari. Av. Dr. Adoniro Ladeira, 94, Jundiaí – SP, CEP 13210-800, 0xx11 4588-4445, pjandl@anchieta.br.
  • 2. - 2 - ANÁLISE COMPARATIVA DE PERSISTÊNCIA DE DADOS ENTRE HIBERNATE E NHIBERNATE Ricardo Antonio Rinco1 Peter Jandl Junior2 RESUMO Este trabalho pretende, com o desenvolvimento de software, realizar a comparação entre dois frameworks de Mapeamento Objeto-Relacional (ORM), Hibernate escrito em Java e a sua versão portada para .Net, o NHibernate. Estes frameworks têm o objetivo de diminuir a complexidade entre os softwares desenvolvidos que utilizam orientação a objetos e que necessitam de uma base de dados modelo relacional. Foram desenvolvidas duas aplicações semelhantes, uma utilizando o framework Hibernate e a outra NHibernate, cujo as aplicações puderam ser comparadas e submetidas a testes de desempenho. Palavras-Chave: framework, Hibernate, NHibernate, Mapeamento Objeto-Relacional, Desenvolvimento de Software. ABSTRACT This article intends with a software development compare two frameworks Object- Relational Mapping (ORM), Hibernate wrote in Java and it’s a ported version to .Net, NHibernate. These frameworks have the objective to reduce the complexity between software developed that use the object-oriented and require a relational model database. Two similar applications have been developed, a use of the Hibernate and another NHibernate, whose applications can be compared and submitted to performance tests. Keywords: framework, Hibernate, Nhibernate, Object-Relational Mapping, Software Development. 1 Programador de Programas de Computador. Labsoft Tecnologia. 2 Mestre em Educação (USF) e Engenheiro de Eletrônica (Unicamp). Professor de cursos de Graduação, Pós-Graduação e Extensão do Centro Universitário Padre Anchieta.
  • 3. - 3 - 1. INTRODUÇÃO Desenvolver uma aplicação orientada a objetos utilizando banco de dados relacional pode ser um trabalho árduo. ZYL, KOURIE E BOAKE (2006) citam um problema bem conhecido na persistência de dados entre objetos e base de dados relacional, o qual é chamado de conflito de impedância. Segundo MACORATTI (2008) “Isso ocorre porque os objetos de negócio podem ser representados de forma diferente em um banco relacional”. A solução que tem sido utilizada com muita frequência são os frameworks Object-Relational Mapping (ORM), que realizam a abstração do banco de dados, o que torna a persistência dos objetos mais dinâmica, simples e fácil. Com um ORM o trabalho do desenvolvedor passa a ser a definição de como e quais os objetos serão mapeados pelo framework, sendo assim sua preocupação maior torna-se a camada de negócio de sua aplicação, e não mais com o banco de dados e a persistência da aplicação. Em uma pesquisa realizada em outubro/2016 pela TIOBE, as linguagens Java e C# estão entre as cincos principais linguagens de programação utilizadas no mundo, Java se mantém na primeira colocação e C# ocupa a quarta colocação na pesquisa, visto que a linguagem da Microsoft vem conquistando mais espaço no mercado ano após ano. Com base nesta pesquisa, é nítido que as linguagens que possuem suporte à programação orientada a objeto têm ganhado mais adeptos ao passar do tempo, com isso a utilização de frameworks ORM também tem obtido um alto índice de utilização. Hoje existem diversos frameworks disponíveis para a persistência de dados, tanto para a plataforma Java quanto C#, mas estas plataformas possuem um framework em comum, Hibernate disponível para a plataforma Java e a sua versão portada para o C#, o NHibernate. No desenvolvimento deste trabalho, foram utilizados autores como BAUER, KING e CHATEKAR, fornecendo ao desenvolvimento conceitos de boas práticas de arquitetura,
  • 4. - 4 - auxiliando no entendimento das ferramentas, de maneira que o código tenha um excelente desempenho. Este trabalho, apresenta de forma simples e abrangente, uma análise destes frameworks, comparando seus elementos comuns, particularidades e diferenciais. A estrutura de organização dos tópicos assim como a apresentação dos testes teve como base o trabalho realizado por ANGOTTI E CÂMARA. Para a realização desta comparação serão desenvolvidos dois softwares, na plataforma Java e o outro na plataforma C#, onde o conteúdo de cada sistema será idêntico, ou seja, sem alterações. Encerrando o presente trabalho, as considerações finais referenciam o framework que obteve melhores resultados no processo de desenvolvimento e no desempenho da aplicação. 2. OBJECT-RELATIONAL MAPPING (ORM) Object-relational Mapping ou Mapeamento Objeto-Relacional consiste em um framework que tem como maior objetivo eliminar as desigualdades entre a programação orientada a objetos e o modelo entidade-relacional, criando uma ligação (mapeamento) entre os dois modelos, focando da melhor forma a produtividade e visando aproveitar ao máximo o conceito de orientação a objetos. Esse framework fica localizado em uma camada intermediária, entre a lógica da aplicação e o Sistema de Gerenciamento de Banco de Dados (SGBD). O principal conceito do ORM é o mapeamento dos elementos do banco de dados relacional para a aplicação orientada a objetos. Além disso, temos a questão da abstração da base de dados de forma que nossa aplicação persista e recupere dados sem saber exatamente que tipo de SGBD está sendo utilizado. (COELHO, 2011) Na parte relacional da aplicação prevalecem os princípios do SGBD com a finalidade de armazenar e gerenciar corretamente os registros de forma segura e eficaz. Na parte orientada a objetos trabalhamos com classes e métodos, ou seja,
  • 5. - 5 - mantemos os fundamentados da engenharia de software e seus princípios de como fazer. Figura 1 - Ilustração do relacionamento entre Objetos, ORM e Base de Dados. Um ORM possui diversas características básicas, entre elas existem métodos que irão realizar a interação entre a aplicação e o banco de dados, como representado no diagrama da figura 1. O framework assumi algumas responsabilidades como, por exemplo, o CRUD (Create, Read, Update e Delete), que nada mais é que as operações de Inserção, Leitura, Atualização e Exclusão dos registros de uma base de dados. Com a utilização de um ORM para a persistência de dados a necessidade de escrever códigos de conexão com a base de dados e queries Structured Query Language (SQL), são reduzidas de forma significativa, deixando o desenvolvimento mais rápido, gerando códigos mais simples e ampliando a facilidade de possíveis manutenções na aplicação. É sempre bom lembrar que a utilização de um framework deste tipo não elimina totalmente a necessidade de utilização de queries no desenvolvimento da aplicação, mesmo que o ORM esteja englobando as técnicas principais de interação com a base de dados. Em alguns casos haverá a necessidade da realização de consultas mais customizadas, que neste caso, deverão ser realizadas através de queries.
  • 6. - 6 - 3. HIBERNATE Hibernate é um framework open-source, licenciado sob a LGPL 2.1 (GNU Lesser General Public License), sendo desenvolvido para mapeamento objeto-relacional escrito na linguagem Java. É considerado uma ferramenta de alto desempenho e uma das soluções ORM mais flexíveis e poderosas do mercado. Segundo a sua própria documentação “Ele não cuida apenas do mapeamento, mas também proporciona a consulta de dados e facilidade de recuperação que podem significativamente reduzir o tempo de desenvolvimento. Do contrário, o tempo seria consumido com a execução manual de dados, executados em SQL e JDBC”. Atualmente a ferramenta está na versão 5.2, lançada em outubro/2016, porém a versão com maior índice de utilização por sua estabilidade é a 4.3.0, lançada no final de 2013. O framework surgiu em 2001, por iniciativa de Gavin King, e logo se tornou amplamente utilizado devido a uma grande diversidade de recursos para mapeamento objeto-relacional. Um dos principais objetivos de Gavin ao criar o projeto era resolver seus problemas referentes à persistência causados pelo Entreprise JavaBeans (EJB) 2.0, o qual considerava muito complexo. King utilizava seu tempo livre para que pudesse resolver problemas identificados pelos usuários do Hibernate, e com um escopo vasto o projeto tornou-se inviável de ser mantido apenas nos tempos livres, assim King aceitou entrar para o JBoss Group, o que lhe permitiu dedicação completa ao framework. (PRIMO, 2012). A meta do Hibernate é aliviar o desenvolvedor em até 95% das tarefas comuns de programação referente à persistência de dados (HIBERNATE, 2004). A arquitetura em camadas é onde são definidas as interfaces entre os códigos que implementam os vários objetos, permitindo uma mudança na maneira de instanciar uma classe, sem a interrupção ao código nas demais camadas (BAUER E KING, 2005), como ilustra a figura 2.
  • 7. - 7 - Figura 2 - Arquitetura Hibernate. Fonte: baseado em (JBOSS, 2015) 4. NHIBERNATE O NHibernate é uma ferramenta ORM open-source, mantida por uma comunidade de desenvolvedores, NHibernate Community, licenciada sob a GNU Lesser General Public License (LGPL), que surgiu através do Hibernate sendo totalmente portada para o .Net Framework. O NHibernate manipula os objetos de persistência em .Net para uma base de dados relacional, assim como feito na versão para Java. Seguindo uma descrição XML de suas entidades e relacionamentos, o framework gera automaticamente as queries SQL para carregar e armazenar os objetos. Com suporte a persistência transparente suas classes não precisam seguir um modelo de programação restritivo, os objetos persistentes não precisam implementar nenhuma interface ou herdar de uma classe base especial, isso torna possível projetar aplicações de negócios usando objetos simples do .Net (CHATEKAR, 2015). Originalmente o NHibernate é um porte da versão 2.1 do framework disponível para Java, sua versão mais recente é a 4.0.4, lançada em agosto/2015.
  • 8. - 8 - Utilizando a mesma estrutura de arquitetura, o framework da versão .Net é muito semelhante ao Hibernate, sendo que todo o conhecimento e técnicas adquiridos durante o desenvolvimento de aplicações que utilizam Hibernate são diretamente aplicáveis ao NHibernate, inclusive a documentação existente pode ser utilizada para as duas ferramentas. Figura 3 - Arquitetura NHibernate. Fonte: baseado em (HIBERNATE, 2016). 5. ARQUITETURA As arquiteturas dos frameworks funcionam de maneira igual, na aplicação é realizada a persistência dos objetos através do mapeamento XML, onde os frameworks irão validar a sua estrutura, relacionando as tabelas da base de dados com as classes e atributos da aplicação. Esses arquivos possuem as informações necessárias para a comparação da estrutura de cada arquivo, após a realização da verificação das estruturas o framework inicializa a transação na base de dados persistindo as informações solicitadas. Além de que tanto o Hibernate quanto o NHibernate não se limitam a buscar os objetos e todas as suas referências de uma só vez, pois após o
  • 9. - 9 - objeto e suas referências terem sido salvas na base de dados, pode-se buscar apenas o objeto desejado e caso seja necessário é feita a busca por referência. As arquiteturas dos frameworks foram divididas em camadas, conforme ilustrado nas figuras 2 e 3, seguindo o mesmo padrão de divisão.  Primeira Camada - Aplicação: aqui temos a representação da aplicação, nele temos todas as classes e atributos que serão mapeadas.  Segunda Camada - Framework ORM: representação das classes de gerenciamento de sessão e conexão. Nesta camada o framework não acessa diretamente a base de dados, fazendo uso da terceira camada.  Terceira Camada - Acesso a Dados: esta camada representa as abstrações de acesso a dados, cada framework utiliza as interfaces disponíveis em sua respectiva linguagem de programação.  Quarta Camada - Base de Dados: aqui sendo o banco de dados, onde serão persistidos todos os dados. 5.1. Classes Hibernate e NHibernate Os frameworks possuem objetos com definições especificas, que são responsáveis pela comunicação da aplicação com o banco de dados, na tabela 1 é exibido uma lista contendo as classes e suas descrições. Tabela 1 - Descrição das classes dos frameworks Hibernate e NHibernate (JBoss, 2015). Framework Classes Descrição Hibernate SessionFactory Cachê imutável composto de mapeamentos compilados para um único banco de dados. Uma fábrica para Session e um cliente de ConnectionProvider, SessionFactory pode conter um cachê opcional de dados (segundo nível) reutilizáveis entre transações, no nível de processo ou cluster. NHibernate ISessionFactory Hibernate Objetos persistentes e coleções Objetos, de vida curta, single-threaded contendo estado persistente e função de negócios. Esses podem ser POJOs/POCOs, onde a única coisa especial sobre eles é que são associados a exatamente uma Session. Quando a Session é fechada, eles são separados e liberados para serem usados dentro de qualquer camada da aplicação.NHibernate
  • 10. - 10 - Hibernate Objetos e coleções desanexados e transientes Instâncias de classes persistentes que ainda não estão associadas a uma Session. Eles podem ter sido instanciados pela aplicação e não persistidos ainda ou eles foram instanciados por uma Session encerrada. NHibernate Hibernate Session Objeto single-threaded, de vida curta, representa uma conversação entre o aplicativo e o armazenamento persistente. Cria uma camada sobre uma conexão JDBC/ADO.Net. É uma fabrica de Transaction. A Session possui um cachê obrigatório (primeiro nível) de objetos persistentes, usado para navegação nos gráficos de objetos e pesquisa de objetos pelo identificador. NHibernate ISession Hibernate Transaction (Opcional) Objeto de vida curta, single-threaded, usado pela aplicação para especificar unidades atômicas de trabalho. Abstrai o aplicativo das transações JDBC/ADO.Net adjacentes. Uma Session pode, em alguns casos, iniciar várias Transactions. Entretanto, a demarcação da transação, mesmo utilizando API ou Transaction subjacentes, nunca é opcional. NHibernate ITransaction Hibernate ConnectionProvider (Opcional) Uma fábrica de pool de conexões JDBC/ADO.Net. Abstrai a aplicação do DataSource ou DriverManager adjacentes. Não exposto para a aplicação, mas pode ser implementado ou estendido pelo programador.NHibernate IConnectionProvider Hibernate TransactionFactory (Opcional) Uma fábrica para instâncias de Transaction. Não exposta à aplicação, mas pode ser estendida ou implementada pelo programador. NHibernate ITransactionFactory 6. QUESTÃO PROBLEMA Levando em consideração as possíveis diferenças entre cada framework, foi realizada uma comparação para identificar a forma de implementação de cada ferramenta e como cada uma delas se comporta diante de uma aplicação real. Para tal análise foram desenvolvidas duas aplicações, uma desenvolvida utilizando a linguagem de programação Java e seu respectivo framework, o Hibernate; e a aplicação com base em .Net, foi desenvolvida com a linguagem C# e utilizando a implementação da versão portada do Hibernate, o NHibernate. As aplicações receberam as mesmas classes e atributos, sendo que os objetos foram mapeados através de arquivos XML. As aplicações conectam à uma mesma base de dados proporcionando, desta forma, um local único de armazenamento de informações para a realização das operações.
  • 11. - 11 - 7. ESPECIFICAÇÃO DO SISTEMA Para a arquitetura Java, foi desenvolvida uma aplicação console onde foi utilizado como software de desenvolvimento o Eclipse, versão Neon - Release 4.6.1, com a utilização do framework Hibernate versão 4.3.0, onde sua estrutura pode ser vista na ao lado esquerdo da figura 4. Na implementação do NHibernate versão 4.0.4, foi desenvolvida uma aplicação console, com base na linguagem C#, tendo como interface de desenvolvimento o Visual Studio Community 2015, estruturada como mostra a figura 4 do lado direito. Figura 4 - Estruturas das aplicações.
  • 12. - 12 - Para o gerenciamento de banco de dados foram selecionados dois dos mais utilizados sistemas do mercado, MySQL Community Server versão 5.6.25 e o SQL Server 2014 Express Edition. As duas bases de dados possuem as mesmas tabelas e propriedades alocadas, e ambos os SGBD possuem apenas conexão local com cada aplicação. A arquitetura utilizada nas aplicações segue a técnica de desenvolvimento em camadas, como mostra a figura 4, onde as classes podem ser divididas e visualizadas em camadas, sendo uma excelente forma de organizar as classes que fazem parte da aplicação com a principal finalidade de obter agilidade e facilidade em futuras modificações em quaisquer camadas, não gerando grandes impactos as demais classes (ROCHA, 2009). 7.1. Modelo de Dados O modelo de dados, apresentado na figura 5, foi gerado a partir das tabelas criadas na base de dados que são consumidas pelas aplicações. Figura 5 - Modelo de Dados.
  • 13. - 13 - 7.2. Diagrama de Classes O diagrama de classes das aplicações desenvolvidas segue a mesma estrutura de objetos, classes e atributos, ou seja, foram mantidos os mesmos padrões. Figura 6 - Diagrama de Classe da aplicação Java. Figura 7 - Diagrama de Classe da aplicação C#.
  • 14. - 14 - Os diagramas de classes exibidos nas figuras 6 e 7, possuem as mesmas propriedades que foram apresentadas no modelo de dados, figura 5, onde a semelhança é notada de forma clara, por exemplo a classe Instructor possui as mesmas propriedades, (Id, Identification e Courses), seja na base de dados ou em uma das aplicações, sendo uma forma de manter o padrão da estrutura do projeto. Os diagramas também exibem as classes de Data Access Object (DAO), conhecidas por padronizar a persistência de dados, separando as regras de negócio das regras de acesso a base de dados. 8. PROTÓTIPOS DE TELA Os protótipos demonstram as telas desenhadas em Console Application, também conhecidas como Aplicação Console, são aplicações sem interface gráfica, sendo que este tipo de aplicação executa os procedimentos através da linha de comando, com entradas e saídas de informações. As informações são gravadas e lidas a partir da janela de console (AÉCE, 2010), na figura 8 é mostrado o formato de exibição das telas da aplicação Hibernate. Figura 8 - Tela de exibição da aplicação Hibernate.
  • 15. - 15 - Na figura 9, são exibidas as telas da aplicação desenvolvida em C#, utilizando o NHibernate. As telas foram desenvolvidas seguindo os mesmos padrões, com pequenas variações de acordo com a linguagem utilizada. Figura 9 - Tela de exibição da aplicação NHibernate. 9. TESTES DAS APLICAÇÕES Durante os testes das aplicações foi utilizada a metodologia de teste Caixa- Branca, também chamada de Teste Estrutural, que avalia o comportamento interno dos componentes do software. Essa técnica trabalha diretamente sobre o código-fonte para avaliar aspectos tais como: teste de condição, testes de fluxo de dados, testes de ciclos e testes de caminhos lógicos (TOZELLI, 2008). Também durante este processo foram realizados Testes de Integração, tal qual o objetivo é encontrar falhas da integração das aplicações com as duas bases de dados. Outro ponto importante a salientar, que impacta diretamente na realização dos testes, é a máquina utilizada para tal finalidade, possuindo a seguinte configuração:  Processador Intel® Core i7-3632QM CPU @ 2.20GHz.  8gb de memória RAM Dual Channel.  HD 1TB 5400RPM 8MB de Cache, 6.0Gb/s.  Sistema Operacional Microsoft Windows® 10 de 64bits.
  • 16. - 16 - 9.1. Cenário de Testes As aplicações desenvolvidas foram submetidas aos mesmos testes e comparações, assim podendo obter um resultado mais justo.  Inclusão de registros: para a inclusão de informações nas bases de dados, foi desenvolvida uma função para a integração de arquivo .csv (comma- separated values), onde cada aplicação antes das inserções das informações verifica a existência de cada registro na base de dados. Essa integração pode ser realizada com diversos arquivos contendo inúmeros registros.  Seleção de registros: criadas diversas funções para a seleção dos registros de cada tabela, assim como a junção de uma ou mais tabelas. Os retornos dessas pesquisas podem variar de acordo com a quantidade de registros que a base de dados possui.  Alteração de registro: desenvolvida uma função para alteração de todos os registros de uma determinada tabela, o número de alterações pode variar de acordo com os registros alocados na base de dados.  Exclusão de registros: assim como para os demais casos, uma função específica foi desenvolvida para eliminar registros da base de dados, também levando em consideração para exclusão a quantidade registros disponíveis. 9.2. Comparações Durante a implementação de cada aplicação utilizando os frameworks escolhidos, nota-se uma semelhança muita grande entre elas, não apenas na arquitetura, como já abordado, mas também na forma de codificar. Os arquivos XML, por exemplo, possuem exatamente a mesma estrutura, tendo apenas uma pequena diferença por
  • 17. - 17 - conta da organização dos packages (Java) e namespaces (C#), sendo esta uma peculiaridade de cada linguagem, como exibido na figura 10. Figura 10 - Diferenças no mapeamento dos frameworks. Na declaração das propriedades das classes, surge uma diferença entre os frameworks, na versão Hibernate os atributos podem ser declarados de forma padrão, porém na versão NHiberante os atributos que serão utilizados pelos frameworks precisam ser declarados de forma virtual. A palavra-chave virtual é usada para modificar a declaração da propriedade e permitir que ela seja substituída em uma classe derivada (MSDN, 2015), nenhum dos dois frameworks obriga a declaração de um construtor e ambos permitem a utilização de tipos de dados customizados. Outra diferença no desenvolvimento das aplicações foi em relação ao arquivo de configuração, “NomeArquivo.cfg.xml”, na ferramenta Hibernate é necessário declarar as classes que o framework irá mapear, ou seja, caso uma classe esteja ausente nesta propriedade o framework não irá mapear, e caso esta classe possua herança a aplicação irá falhar em sua execução. Na aplicação desenvolvida em C# esta mesma configuração é efetuada de maneira diferente, as classes a serem mapeadas devem ser declaradas no atributo do SessionFactory, outra diferença é que neste caso basta declarar as classes que possuem ligações, ou seja, classes filhas são mapeadas automaticamente pela ferramenta. Para ambos os frameworks foi necessário desenvolver uma classe para a criação da SessionFactory, que como citado é a “fábrica de sessões”, as classes recebem basicamente as mesmas funções, apenas sendo diferentes de acordo com cada
  • 18. - 18 - linguagem. O único diferencial entre elas é que esta classe na versão Hibernate torna obrigatória a declaração de um construtor padrão. Os repositórios das aplicações possuem inúmeras implementações semelhantes, como por exemplo a função Save que mantém uma facilidade devido à utilização dos frameworks, com esta função é possível realizar uma inserção e também efetuar a atualização de um registro, está é uma característica das ferramentas de ORM. Um fator muito importante para melhora no desempenho das aplicações é a opção Lazy Loading (carregamento preguiçoso), opção ativada nas configurações XML, esta opção faz com que determinados objetos não sejam carregados do banco até que você precise deles, ou seja, são carregados apenas quando a aplicação solicitar o carregamento destes (LANHELLAS, 2010), nesta opção os dois frameworks se comportam da mesma forma, sendo necessário a definição nas configurações das queries que irão utilizar este recurso quando solicitar os dados. Eager Loading (carregamento ávido), função disponível em ambas as ferramentas, porém sua implementação não foi abordada devido ao fato de ser um método não recomendado por desenvolvedores, sendo considerada uma prática ruim. Ainda nas classes de repositórios, uma das poucas diferenças entre os frameworks é na realização da seleção de registros específicos, ou seja, colunas da tabela. Figura 11 - Diferença na seleção de registros únicos.
  • 19. - 19 - Como a figura 11 exibe, a diferença na implementação é a existência da setProjection na versão Hibernate, através desta propriedade é possível selecionar apenas os campos que serão retornados, já em C# isso é possível apenas com a declaração da propriedade que deseja que seja retornada, tornando sua implementação mais simples em relação a versão Java. As demais similaridades são todas ligadas à seleção de dados, na implementação de queries com a utilização do famoso Hibernate Query Language (HQL), uma poderosa linguagem de consulta, que é muito parecida com o SQL padrão, segundo ANGOTTI E CÂMARA o HQL ”Possibilita realizar consultas de maneira mais rápida e assertiva, utilizando as entidades mapeadas”. No entanto, comparado com o SQL, o HQL é totalmente orientado a objetos (JBOSS, 2015), as duas ferramentas se comportam exatamente da mesma maneira, o único detalhe é que o HQL depende da linguagem SQL, isso significa que qualquer implementação exclusiva de apenas um SGBD torna a troca da base de dados mais complexa. As queries criadas com a utilização do createCriteria, um dos métodos mais utilizados, se comportam da mesma maneira, tanto na execução do comando quanto na implementação do código. 9.3. Testes de Desempenho Foram realizados testes de desempenho em cada uma das aplicações, os testes foram efetuados para comparar o desempenho das duas ferramentas, operando nos dois bancos de dados disponíveis. Para cada aplicação foi implementado um contador, onde é inicializado no momento da operação e paralisado ao seu término, é importante dizer que não está sendo incluído nos testes o tempo que cada aplicação leva para exibir os resultados na tela, na figura 12 é exibido exatamente a forma como é demonstrado ao usuário o desempenho da operação.
  • 20. - 20 - Figura 12 - Exemplo de exibição do desempenho na aplicação Java. Figura 13 - Exemplo de exibição do desempenho na aplicação C#. A figura 13 também mostra a forma como é exibida as informações de desempenho ao usuário, neste caso utilizando a aplicação C#. Para melhor visualização do desempenho de cada ferramenta, todos os valores obtidos foram inseridos em um gráfico, sendo mais fácil a comparação dos frameworks. Foram realizados diversos testes de inserção, atualização, exclusão e seleção de dados, sendo realizados nas duas bases de dados, MySQL e SQL Server. A figura 14 exibe o resultado do desempenho da aplicação com o framework Hibernate. Figura 14 - Gráfico de desempenho do Hibernate.
  • 21. - 21 - A figura 15 ilustra o gráfico de desempenho da aplicação desenvolvida em C#, a qual utiliza o framework NHibernate. Figura 15 - Gráfico de desempenho do NHibernate. As aplicações desenvolvidas receberam diversos pacotes de dados, sendo divididos em lotes de 50 mil, 10 mil, cinco mil, um mil, 500 e 100 registros, onde são efetuadas as inserções, alterações, atualizações e exclusões dos dados. Durante os testes foi possível observar que as duas aplicações obtiveram um ótimo resultado nas operações as quais foram submetidas. A estabilidade obtida nas duas ferramentas durante os testes é um outro ponto interessante, mesmo alterando os bancos constantemente, a duas aplicações mantiveram-se estável e confiável, mantendo o desempenho de acordo com o apresentado nas figuras 14 e 15. Todos os tempos obtidos ficaram abaixo do esperado, exceto quando a aplicação C# foi submetida a uma carga de alterações de cinquenta mil registros conectada à base de dados MySQL, o tempo para a realização desta operação completa chegou próximo aos 1:50min, sendo a operação com maior tempo de execução registrado. Em
  • 22. - 22 - contrapartida a mesma operação utilizando a base de dados SQL Server obteve um resultado impressionante, ficando abaixo, por exemplo, da operação de inserção, que recebeu a mesma carga de registros. A Figura 16 exibe o gráfico com os desempenhos das duas aplicações. Figura 16 - Gráfico de desempenho do Hibernate e NHibernate. 10. CONCLUSÕES O objetivo deste trabalho foi alcançado, isto é, com o desenvolvimento das duas aplicações, cada uma utilizando um framework especifico, foi possível mensurar a dificuldade de implementação de cada ferramenta. Um fato é que tanto o Hibernate quanto o NHibernate possuem uma alta curva de aprendizado, porém a sua implementação é semelhante em ambas as linguagens de programação, sendo possível quase que “migrar” o código de uma linguagem para a outra, levando em consideração que tanto Java quanto C# também possuem muitas sintaxes em comum. Um ponto importante é que qualquer programador com bons conhecimentos em um
  • 23. - 23 - destes frameworks, terá facilidade de implementação do outro, seja Hibernate ou NHibernate. Quanto aos testes é nítido que o desempenho de ambas as ferramentas é similar, com diferenças pequenas entre um banco e outro. Por exemplo, o framework Hibernate possui um desempenho melhor quando conectado à uma base de dados MySQL. Na versão portada para .Net, o framework obteve bons resultados, um pouco inferior ao Hibernate, porém nesta ferramenta o SGBD com melhor desempenho é o SQL Server, sendo que seu desempenho chega a ser superior ao próprio SQL Server implementado com NHibernate. Resumindo, ambas as ferramentas obtiveram um excelente desempenho principalmente nos pacotes abaixo de dez mil registros. Através do cenário apresentado a combinação com melhor desempenho, com base nos gráficos da figura 16, é a seguinte estrutura.  Hibernate - SGBD com melhor desempenho: MySQL.  NHibernate - SGBD com melhor desempenho: SQL Server. O trabalho desenvolvido apresentou de maneira objetiva a implementação, utilização e desempenho das ferramentas Hibernate e NHiberante, efetuando a comparação entre as duas principais ferramentas de cada linguagem de programação. 11. REFERÊNCIAS BIBLIOGRÁFICAS AÉSE, Juliano. Desenvolvendo Aplicações Console, 2010. Disponível em: https://msdn.microsoft.com/pt-br/library/gg454568.aspx, recuperado em 25/11/2016. ANGOTTI, Daniel José, CÂMARA, Carlos Eduardo. Comparação Entre os Frameworks de Desenvolvimento de Software ‘Entity Framework’ e ‘Nhibernate’: Estudo de Caso em um Sistema. Revista Engenho, São Paulo, dez. 2015. Disponível em:
  • 24. - 24 - http://www.portal.anchieta.br/revistas-e- livros/engenho/pdf/revista_engenho_vol11_5.pdf, recuperado em 10/09/2016. BAUER, Christian; KING, Gavin. Hibernate in Action. Greenwich: Manning, 2005. 394p. CHATEKAR, Suhas. Learning NHibernate 4. Birmingham: Packt Publishing, 2015. 376p. COELHO, Ricardo da Silva; NHibernate: Arquitetura, fundamentos e recursos, 2011. Disponível em: http://www.devmedia.com.br/nhibernate-arquitetura-fundamentos- e-recursos-revista-net-magazine-102/26942, recuperado em 15/10/2016. ECLIPSE NEON. Download Eclipse Technology that is right for you, 2016. Disponível em: https://www.eclipse.org/downloads/, recuperado em 26/11/2016. HIBERNATE, Community Documentation: Preface, 2004. Disponível em: https://docs.jboss.org/hibernate/orm/3.5/reference/en-US/html/preface.html, recuperado em 24/09/2016. JBOSS, Developer. Hibernate ORM Documentation (4.3), 2015. Disponível em: http://hibernate.org/orm/documentation/4.3/, recuperado em 24/09/2016. LANHELLAS, Ronaldo. Lazy e Eager Loading com Hibernate, 2010. Disponível em: http://www.devmedia.com.br/lazy-e-eager-loading-com-hibernate/29554, recuperado em 04/11/2016. MACORATTI, José Carlos. VB.NET – Usando o NHibernate no VB 2008, 2008. Disponível em: http://www.macoratti.net/08/12/vbn_hib1.htm, recuperado em 01/10/2016. MSDN, Microsoft. virtual (Referência de C#), 2015. Disponível em: https://msdn.microsoft.com/pt-br/library/9fkccyh4.aspx, recuperado em 06/11/2016. MYSQL. Download MySQL Community Server, 2016. Disponível em: https://dev.mysql.com/downloads/mysql, recuperado em 26/11/2016.
  • 25. - 25 - PRIMO, Izalmo. Desenvolvendo com Hibernate, 2012. Disponível em: http://www.devmedia.com.br/artigo-java-magazine-73-desenvolvendo-com- hibernate/14756, recuperado em 01/10/2016. ROCHA, Gabriel. FILHO, Hildebrando. JURITY, Rutemberg. Camada de Persistência de Dados para Aplicações Java: O Hibernate. Instituto de Matemática - Universidade Federal da Bahia (UFBA), 2009. Disponível em: http://coint.cm.utfpr.edu.br/Members/lgvalent/2009-2/banco-de-dados-ii-ne3a/17- 11-2009-material-inicial-sobre-hibernate/at_download/file, recuperado em 20/08/2016. SQL SERVER. Microsoft® SQL Server® 2016 Express, 2016. Disponível em: https://www.microsoft.com/pt-br/download/details.aspx?id=42299, recuperado em 26/11/2016. TIOBE, Software BV. TIOBE Index for October 2016. Disponível em: http://www.tiobe.com/tiobe-index/, recuperado em 05/11/2016. TOZELLI, Paulo, Teste de Software, 2008. Disponível em: http://imasters.com.br/artigo/9572/software/teste-de- software?trace=1519021197&source=single, recuperado em: 06/11/2016. VISUAL STUDIO COMMUNITY. Download Visual Studio Community, Free IDE and Tools. 2016. Disponível em: https://www.visualstudio.com/vs/community/, recuperado em 26/11/2016. ZYL, Pieter Van; KOURIE, Derrick G; BOAKE, Andrew, Comparing the Performance of Object Database and ORM Tool, 2006. Disponível em: http://www.odbms.org/wp- content/uploads/2013/11/027.01-Zyl-Comparing-the-Performance-of-Object- Databases-and-ORM-Tools-September-2006.pdf, recuperado em 01/10/2016.