Arquitetura de Aplicação

Maio 28, 2007

- camada UI(User Interface): Nesta camada vc implementa a interface com usuário. Ex: formulario Cliente, formulario Contas, etc…

- camada de comunicação: Aqui, é implementado a comunicação com as outras camadas do sistema. Por exemplo vc pode definir um ValueObject( objeto genérico que conterá os dados da interface gráfica) que será utilizado pela camada de acesso aos dados. o Value Object pode ser uma interface e pode ser definido uma implementação para cada formulario q vc tenha.

- camada de negocios Nesta camada vc implementa os objetos que encapsularão os dados que serão persistentes(gravados/recuperados do BD). Ex: Cliente, Conta.

- Camada de Acesso aos dados: nesta camada vc implementa os DAOs, que tem a resposabilidade de se comunicar com o banco de dados, através das ‘querys’. Ex: DaoCliente, DaoConta, etc…


Na epoca estavam discutindo que a MVC implementa 1 camada (e não 3….). Eu entendi o conceito (camada de apresentação=MVC) mas como os padrões mudam e hoje existe camada pra tudo queria saber como isso está hoje??… eu li muito sobre o assunto e minha opinião é mais o menos o que essa figura diz…

0
- Camadas == Layers
O padrão que descreve a separação do sistema em camadas é o Layers, publicado em [Busch98] (referências no final). Este padrão mostra uma divisão do sistema em camadas, onde idealmente uma camada conhece e acessa apenas a camada imediatamente inferior, ou no máximo as camadas adjacentes.

- MVC = Model-View-Controller
Padrão usado na implementação do toolkit gráfico do Smalltalk. Uma descrição pode ser encontrada aqui.

Eu acredito que a confusão existe por causa da correspondência numérica que muitas vezes ocorre entre os padrões: MVC e Apresentação/Negócio/Persistência. Então, muitos acham que é a mesma coisa, o que não é verdade.

O padrão MVC, como implementado no Swing, funciona da seguinte maneira:
O componente recebe o input do usuário, interpertando-as; este componente envia ao modelo as alterações causadas pelo input; se o modelo for alterado, este envia uma notificação às views (que também são componentes), que por sua vez solicitam ao modelo os novos dados, para que possam se atualizar. Aqui pode se notar um triângulo, Controlador -> Modelo -> Visualização -> Controlador. Assim, o conceito de separação em camadas não é válido, pois a vizualização acessa diretamente o modelo (isto é, não existe a separação estrita em camadas).

Idealmente, acredito que o MVC faz parte da camada de apresentação (como era no conceito original), e não como divisor de camadas (o que deturpa o conceito de MVC e confunde a separação correta em camadas).

A minha concepção ainda é semelhante (MVC é parte da camada de apresentação), embora o modelo, como dito na discussão, pode ter conceitos distintos.
Acho que o seu diagrama simplifica um pouco o paradigma de arquitetura, e assim sendo, deveria distribuir melhor os componentes de negócio.

Um exemplo é que um web service não concentra suas atividades no modelo de negócio.
É mais uma interface de comunicação com outros sistemas e portanto, faria parte de uma camada chamada “integração”.
O mesmo se daria com códigos como RMI, ou CORBA por exemplo.
DAO’s fariam parte da camada de persistência.
Session Beans fariam parte da camada de negócio, assim como os DTO’s (que fariam parte do Model do MVC).
Porém, Entity Beans fazem parte da camada de persistência. Assim como outras alternativas como LDAP.

Certo?

Arquitetura de sistemas muitas vezes é semelhante a um jogo de xadrez: possui certo nível de subjetividade e muitas vezes, um mesmo problema pode ter diversas soluções com arquiteturas bem distintas e igualmente eficazes. 


Gerando JPA com myEclipse

Maio 27, 2007

1. Myeclipse JPA Tutorial.

Precisei alterar o código gerado para incluir o controle de transação para efetivamente ocorrer as atualizações no BD.

public void save(Counselors transientInstance) {
EntityManagerHelper.log(“saving Counselors instance”, Level.INFO, null);
try {

            EntityManagerHelper.beginTransaction();
getEntityManager().persist(transientInstance);
    EntityManagerHelper.commit();
EntityManagerHelper.log(“save successful”, Level.INFO, null);
} catch (RuntimeException re) {
EntityManagerHelper.log(“save failed”, Level.SEVERE, re);
throw re;
}
}

public void delete(Counselors persistentInstance) {
EntityManagerHelper.log(“deleting Counselors instance”, Level.INFO,
null);
try {
            EntityManagerHelper.beginTransaction();
getEntityManager().remove(persistentInstance);
       EntityManagerHelper.commit();
EntityManagerHelper.log(“delete successful”, Level.INFO, null);
} catch (RuntimeException re) {
EntityManagerHelper.log(“delete failed”, Level.SEVERE, re);
throw re;
}
}

public Counselors update(Counselors detachedInstance) {
EntityManagerHelper.log(“updating Counselors instance”, Level.INFO,
null);
try {
EntityManagerHelper.beginTransaction();
Counselors result = getEntityManager().merge(detachedInstance);
   EntityManagerHelper.commit();
EntityManagerHelper.log(“update successful”, Level.INFO, null);
return result;
} catch (RuntimeException re) {
EntityManagerHelper.log(“update failed”, Level.SEVERE, re);
throw re;
}
}


DDD

Maio 19, 2007

http://fragmental.com.br/wiki/index.php?title=Evitando_VOs_e_BOs


Links NetBeans

Maio 17, 2007

Geração de Entities JPA pelo NetBeans (New Entitiy Classes From Database…)

Maio 16, 2007

Precisei alterar o código gerado no seguinte :

Incluir o import : import javax.persistence.CascadeType;

Alterar o cascade: @OneToMany(cascade = CascadeType.ALL, mappedBy = “customerId”)


Criando uma biblioteca de classes Hibernate

Maio 13, 2007

Você começa esse tutorial fazendo o download dos arquivos de biblioteca do Hibernate e usando a ferramenta Gerenciador de bibliotecas a fim de disponibilizar para o IDE as bibliotecas do Hibernate.

  1. Faça o download de hibernate-3.2.2.ga.zip em www.hibernate.org e extraia os arquivos. Observação: Neste tutorial, os exemplos usam o Hibernate 3.2.2 e os arquivos JAR associados oferecidos com esta versão. Se você estiver usando outra versão, os números de versão e os nomes de bibliotecas do JAR podem variar. Além disso, a lista de bibliotecas JAR para adição pode ser diferente.
  2. No IDE, escolha Ferramentas > Gerenciador de bibliotecas no menu principal.
  3. Clique em Nova biblioteca, digite Hibernate322 no campo Nome da biblioteca e clique em OK.
  4. Clique em Adicionar JAR/Pasta e vá ao diretório no qual extraiu os arquivos do Hibernate.
  5. Selecione hibernate3.jar e pressione Enter.
  6. Clique em Adicionar JAR/Pasta novamente e vá até o subdiretório lib.
  7. Use Ctrl-clique para selecionar os 10 arquivos JAR seguintes e pressione Enter. Se não estiver usando a versão 3.2.2, consulte o site do Hibernate para determinar que arquivos JAR devem ser selecionados.
    • ant-1.6.5.jar
    • antlr-2.7.6.jar
    • asm-attrs.jar
    • asm.jar
    • cglib-2.1.3.jar
    • commons-logging-1.00,4.jar
    • commons-collections-2.1.1.jar
    • dom4j-1.6.1.jar
    • ehcache-1.2.3.jar
    • jdbc2_0-stdext.jar

    A figura abaixo ilustra a biblioteca do Hibernate na janela Gerenciador de bibliotecas.

    Janela Gerenciador de bibliotecas exibindo a biblioteca do Hibernate
    Figura 1: Janela Gerenciador de bibliotecas exibindo a biblioteca do Hibernate

  8. Se estiver implantando o aplicativo no servidor Tomcat, você deve adicionar também o jta.jar do diretório lib do Hibernate.
  9. Para tornar o Javadoc do Hibernate disponível no Editor Java, selecione a guia Javadoc, clique em Adicionar ZIP/Pasta, vá até o diretório no qual extraiu os arquivos do Hibernate, selecione o subdiretório doc/api e pressione Enter.
  10. (Opcional) Se quiser realizar a depuração total das classes Hibernate durante a sessão de depuração, clique na guia Fontes, clique em Adicionar ZIP/Pasta, vá até o diretório no qual extraiu os arquivos do Hibernate, selecione o subdiretório src e pressione Enter.
  11. Clique em OK para fechar o Gerenciador de bibliotecas.

Links de JPA

Maio 13, 2007

An Introduction to Java Persistence for Client-Side Developers

http://today.java.net/pub/a/today/2006/05/23/ejb3-persistence-api-for-client-side-developer.html


Links jasperReports/Ireport

Maio 8, 2007

Java – Ambiente de Desenvolvimento

Maio 8, 2007

Banco de Dados

  1. MySQL
  2. SQL Server 2005 Express

DAL – Data Access Layer

  1. Hibernate/Spring
  2. JPA

IDE

  1. NetBeans – GUI
  2. Eclipse -Web GUI

Geração de Relatórios

  1. JasperReports/IReport

Fixed problem with burning programs based on GearASPI layer (e.g. iTunes)

Maio 8, 2007

http://www.disc-tools.com/download/sptdbeta

 SPTD stands for SCSI Pass Through Direct layer. Basically SPTD is similar to other access layers used by other programs who provide access to storage devices but it has a lot more features that make this interface unique. SPTD v1.45 (32 bit) is public beta version. Duplex Secure team (http://www.duplexsecure.com/) would appreciate your comments and questions regarding use of SPTD v1.45 at Duplex Secure support forum: http://forum.duplexsecure.com/

To address issues reported in 1.43 Duplex Secure provided a hotfix version 1.45.
Once all affected users confirm success we’ll encourage all vendors to replace 1.43 with 1.45.

Issues addressed:
- Fixed problem with burning programs based on GearASPI layer (e.g. iTunes)
- Fixed long delay problem in some programs, e.g. Ashampoo Burning Studio
- Fixed crash issue with WinAmp
- Fixed issues with some software tools like Exact Audio Copy, Nero and other programs using SPTI-based ASPI layer