Com o objetivo de demonstrar o JBC, será apresentado neste tópico dois
exemplos de implementação da regra de negócio em Java, conforme as
arquiteturas apresentadas na Figura 1.
Figura 1 - Modelo de implementação JBC
No primeiro exemplo será apresentado o Modelo Tradicional e o segundo exemplo, usando o Modelo utilizando o Framework JBC, para isso será usado como base a implementação de uma entidade simples, vamos chama-la de Pessoa. Esta entidade terá apenas dois atributos, id e nome, e como vamos utilizar o framework Hibernate, vamos declarar a classe seguido de suas anotações.
@Entity
public class Pessoa implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ID")
private int id;
@Column(name="NOME", length=50, nullable=false)
private String nome;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
Consequentemente se utilizamos Hibernate, precisamos adicionar as bibliotecas do Framework, como também o drive de conexão com o MySql, como na Figura 2.
Figura 2 - Importação das bibliotecas
Os seguintes Jars foram adicionados:
Figura 3 - Detalhamento das bibliotecas
Temos que utilizar por padrão os Jars da versão 3 do Hibernate, que é a mesma versão utilizada no desenvolvimento do JBC.
Se utilizamos anotações, precisamos ter o arquivo de configuração do Hibernate, que por padrão deve ficar na raiz do código fonte do projeto, como na Figura 4
.
Figura 4 - Arquivo de Configuração Hibernate na Raiz do Projeto
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/nomedabasededados</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.pool_size">1</property>
<mapping class="nomedopacote.Pessoa"/>
</session-factory>
</hibernate-configuration>
No arquivo de configuração acima, devem ser ajustado o nome da base de dados e o nome do pacote Java onde se encontra a classe Pessoa. Vale também lembrar, que precisamos criar a base de dados no MySql.
Os procedimentos realizados até aqui são necessários para os dois exemplos de arquitetura, tanto o Modelo Tradicional, quanto o Modelo JBC. Daqui pra frente, teremos as implementações individuais para cada Modelo.
Vale lembrar que o Modelo Tradicional é uma das formas de implementar MVC, existem várias outras alternativas no mercado. O objetivo deste exemplo não é dizer o que é certo, ou o que é errado, apenas apresentar o JBC
Modelo tradicional
No Modelo de desenvolvimento Tradicional MVC (Imagem 1), precisamos definir as seguintes entidade: Dao, Facade e Controller, como vemos a seguir:
Levando em consideração que precisamos ter também uma classe utilitária Transaction, para controle de transação.
Consequemente, o código para inserir a Pessoa:
O Modelo Tradicional pode ser baixado aqui.
Modelo JBC
Neste segundo exemplo, iremos criar a outra aplicação, o Modelo JBC, que será definido a classe Pessoa e suas anotações, juntamente com o arquivo de configuração do Hibernate, como já vimos anteriormente, ou seja, todo o código mostrado no Modelo Tradicional é desnecessário. Com a aplicação criada, precisamos adicionar o JAR JBC na aplicação, que pode ser baixado aqui. Então para realizar a inserção do registro, não precisamos de nenhum dos códigos declarados na apresentação do Modelo Tradicional, basta utilizar uma instância da classe br.com.jbc.controller.Controller, e definir o tipo genérico como sendo a classe Pessoa, em seguida, chamar o método de acesso ao banco de dados necessário, neste caso o insert. Como no exemplo abaixo:
O Modelo JBC pode ser baixado aqui.
Conclusão
Para desenvolver um sistema por completo, necessitamos de uma infinidade de operações de transação e consulta na camada de negócio, então imagine ter que desenvolver todas estas operações para cada entidade do seu negócio. Realmente é o que acontece em nosso meio, então a ideia do JBC foi generalizar todas essas operações através de um Framework que desse suporte para todo e qualquer tipo de negócio, indiferente de funcionalidades e regras, deixando com que o desenvolvedor dedique a maior parte de seu tempo com o desenvolvimento da camada de visualização, implementação que requer mais atenção e que tem grande variedade entre um sistema e outro.
Os procedimentos realizados até aqui são necessários para os dois exemplos de arquitetura, tanto o Modelo Tradicional, quanto o Modelo JBC. Daqui pra frente, teremos as implementações individuais para cada Modelo.
Vale lembrar que o Modelo Tradicional é uma das formas de implementar MVC, existem várias outras alternativas no mercado. O objetivo deste exemplo não é dizer o que é certo, ou o que é errado, apenas apresentar o JBC
Modelo tradicional
No Modelo de desenvolvimento Tradicional MVC (Imagem 1), precisamos definir as seguintes entidade: Dao, Facade e Controller, como vemos a seguir:
import org.hibernate.Session;
import java.io.Serializable;
public class PessoaDao implements Serializable {
private final Session session;
public PessoaDao(Session session) {
this.session = session;
}
public Boolean insert(Pessoa p) {
this.session.merge(p);
this.session.flush();
this.session.evict(p);
return true;
}
}
import java.io.Serializable;
public class PessoaFacade implements Serializable {
private Transaction factory;
private PessoaDao dao;
public PessoaFacade() {
factory = Transaction.getInstance();
dao = new PessoaDao(factory.getSession());
}
public Boolean insert(Pessoa p) {
if (factory.hasTransaction()) {
return dao.insert(p);
} else {
return false;
}
}
}
import java.io.Serializable;
public class PessoaController implements Serializable {
private PessoaFacade facade;
public PessoaController() {
this.facade = new PessoaFacade();
}
public PessoaFacade getFacade() {
return facade;
}
public Boolean insert(Pessoa p) throws Exception {
try {
Transaction.getInstance().beginTransaction();
if (this.facade.insert(p)) {
Transaction.getInstance().commit();
return true;
} else {
Transaction.getInstance().rollback();
return false;
}
} catch (Exception e) {
Transaction.getInstance().rollback();
throw e;
}
}
}
Levando em consideração que precisamos ter também uma classe utilitária Transaction, para controle de transação.
Consequemente, o código para inserir a Pessoa:
public class Main {
public static void main(String[] args) {
PessoaController controller = new PessoaController();
Pessoa p = new Pessoa();
p.setNome("Rodrigo Marconato");
try {
controller.insert(p);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
O Modelo Tradicional pode ser baixado aqui.
Modelo JBC
Neste segundo exemplo, iremos criar a outra aplicação, o Modelo JBC, que será definido a classe Pessoa e suas anotações, juntamente com o arquivo de configuração do Hibernate, como já vimos anteriormente, ou seja, todo o código mostrado no Modelo Tradicional é desnecessário. Com a aplicação criada, precisamos adicionar o JAR JBC na aplicação, que pode ser baixado aqui. Então para realizar a inserção do registro, não precisamos de nenhum dos códigos declarados na apresentação do Modelo Tradicional, basta utilizar uma instância da classe br.com.jbc.controller.Controller, e definir o tipo genérico como sendo a classe Pessoa, em seguida, chamar o método de acesso ao banco de dados necessário, neste caso o insert. Como no exemplo abaixo:
import br.com.jbc.controller.Controller;
public class Main {
public static void main(String[] args) {
Controller<Pessoa> controller = new Controller<Pessoa>();
try {
Pessoa p = new Pessoa();
p.setNome("Rodrigo Marconato");
controller.insert(p);
} catch (Exception e) {
e.printStackTrace();
}
}
}
O Modelo JBC pode ser baixado aqui.
Conclusão
Para desenvolver um sistema por completo, necessitamos de uma infinidade de operações de transação e consulta na camada de negócio, então imagine ter que desenvolver todas estas operações para cada entidade do seu negócio. Realmente é o que acontece em nosso meio, então a ideia do JBC foi generalizar todas essas operações através de um Framework que desse suporte para todo e qualquer tipo de negócio, indiferente de funcionalidades e regras, deixando com que o desenvolvedor dedique a maior parte de seu tempo com o desenvolvimento da camada de visualização, implementação que requer mais atenção e que tem grande variedade entre um sistema e outro.
O código fonte dos dois exemplos podem ser baixados aqui
O JBC exige que alguns requisitos sejam cumpridos, veja quais são eles
O JBC exige que alguns requisitos sejam cumpridos, veja quais são eles

Nenhum comentário:
Postar um comentário
Muito obrigado por contribuir com o JBC!