O documento discute a modularização de aplicativos usando BPL (Borland Package Library) no Delphi, permitindo dividir um projeto grande em vários módulos menores com poucas dependências. A abordagem modular traz vantagens como melhor divisão de trabalho na equipe, escopo menor para cada desenvolvedor e possibilidade de atualizar partes do sistema separadamente.
PL/SQL developers (as well as DBAs and many others involved) typically are uncertain what SOA means to them. They feel overwhelmed by a avalanche of acronyms. Yet they see it coming and instead of being surprised or bypassed, this session allows them to start participating and benefiting themselves. This session introduces SOA and the Oracle SOA Suite 11g to the realm of the PL/SQL developer - from which it sometimes seems so far removed. What are the key SOA concepts and objectives - what's the buzz about? What is at the heart of SOA Suite 11g: Composite Applications, BPEL PM and the Mediator.
The presentation demonstrates how SOA Services can be leveraged from the database – from Triggers and PL/SQL applications and how the database can publish events to the Event Delivery Network. It demonstrates how the SOA infrastructure can access the database, primarily using the Database Adapter – and how database developers can be instrumental in efficiently doing so. It concludes with some hints for applying SOA concepts for 'normal' database development.
Security Best Practice: Oracle passwords, but secure!Stefan Oehrli
Authentication is an integral part of database security. If authentication or passwords are insufficient or inadequate, all further security measures are generally useless. But how do you ensure that passwords are complex and authentication is secure? In this presentation, the password hashes will be explained and it will be shown how to make sure passwords and authentication are state of the art. Focusing on the current versions of the Oracle database, the following topics will be discussed:
- Oracle database authentication
- Password verification and hashes
- Where can I find password hashes?
- Check and password hashes.
- Discussion of various risks related to authentication.
- Discussion of password policies and strong passwords.
- Customer Use Case in the DB Vault environment "ups we have forgotten the passwords".
The presentation will be supplemented by corresponding examples and live demos.
PL/SQL developers (as well as DBAs and many others involved) typically are uncertain what SOA means to them. They feel overwhelmed by a avalanche of acronyms. Yet they see it coming and instead of being surprised or bypassed, this session allows them to start participating and benefiting themselves. This session introduces SOA and the Oracle SOA Suite 11g to the realm of the PL/SQL developer - from which it sometimes seems so far removed. What are the key SOA concepts and objectives - what's the buzz about? What is at the heart of SOA Suite 11g: Composite Applications, BPEL PM and the Mediator.
The presentation demonstrates how SOA Services can be leveraged from the database – from Triggers and PL/SQL applications and how the database can publish events to the Event Delivery Network. It demonstrates how the SOA infrastructure can access the database, primarily using the Database Adapter – and how database developers can be instrumental in efficiently doing so. It concludes with some hints for applying SOA concepts for 'normal' database development.
Security Best Practice: Oracle passwords, but secure!Stefan Oehrli
Authentication is an integral part of database security. If authentication or passwords are insufficient or inadequate, all further security measures are generally useless. But how do you ensure that passwords are complex and authentication is secure? In this presentation, the password hashes will be explained and it will be shown how to make sure passwords and authentication are state of the art. Focusing on the current versions of the Oracle database, the following topics will be discussed:
- Oracle database authentication
- Password verification and hashes
- Where can I find password hashes?
- Check and password hashes.
- Discussion of various risks related to authentication.
- Discussion of password policies and strong passwords.
- Customer Use Case in the DB Vault environment "ups we have forgotten the passwords".
The presentation will be supplemented by corresponding examples and live demos.
Session aims at introducing less familiar audience to the Oracle database statistics concept, why statistics are necessary and how the Oracle Cost-Based Optimizer uses them
This guide helps you setting up the FSlogix Office 365 Container (ODFC). ODFC allows roaming the cache data on VDI/RDS of most Microsoft Office products on top of your existing profile solution. There is minimal impact to the rest of your infrastructure and after implementing caching can be enabled for Outlook, OneDrive, OneNote, Teams, ...
This solution also allows to roam the Outlook Search Index, even on RDS/XenApp!
Since the release of 17.05, Docker has introduced Multi-Stage Build for Docker Images for anyone who has struggled to optimize Dockerfiles while keeping them easy to read and maintain. This builder pattern will help anyone who would just like to have the runtime, configuration & application and doesn’t want to have compilers, debuggers, code, build, test logs etc.
Apache Ranger’s pluggable architecture allows centralized authoring of authorization policies and access audits—for Hadoop and non-Hadoop components. Authorization policy model is designed to capture and express complex authorization needs of component.
In this session, we will present two more key enhancements made to the policy model in the next release to make it richer and support advanced authorization needs of contemporary enterprise security infrastructure.
•Ranger service definition is enhanced to support specification of allowed accesses on a given resource. This specification is then utilized to present only valid accesses when authoring policy targeted for the resource.
•Ranger policy model is enhanced to support time-based policy that temporarily grants/denies access to a resource during specified time window. The time specification supports specification of a time zone which is enforced based on the time zone of the component where the Ranger plugin runs.
We will conclude by a demonstration of these new capabilities. ABHAY KULKARNI, Engineer, Hortonworks and RAMESH MANI, Staff Software Engineer, Hortonworks
How To Set Up SQL Load Balancing with HAProxy - SlidesSeveralnines
We continuously see great interest in MySQL load balancing and HAProxy, so we thought it was about time we organised a live webinar on the topic! Here is the replay of that webinar!
As most of you will know, database clusters and load balancing go hand in hand.
Once your data is distributed and replicated across multiple database nodes, a load balancing mechanism helps distribute database requests, and gives applications a single database endpoint to connect to.
Instance failures or maintenance operations like node additions/removals, reconfigurations or version upgrades can be masked behind a load balancer. This provides an efficient way of isolating changes in the database layer from the rest of the infrastructure.
In this webinar, we cover the concepts around the popular open-source HAProxy load balancer, and show you how to use it with your SQL-based database clusters. We also discuss HA strategies for HAProxy with Keepalived and Virtual IP.
Agenda:
* What is HAProxy?
* SQL Load balancing for MySQL
* Failure detection using MySQL health checks
* High Availability with Keepalived and Virtual IP
* Use cases: MySQL Cluster, Galera Cluster and MySQL Replication
* Alternative methods: Database drivers with inbuilt cluster support, MySQL proxy, MaxScale, ProxySQL
Developing Microservices with Apache CamelClaus Ibsen
Red Hat Microservices Architecture Day - New York, November 2015. Presented by Claus Ibsen.
Apache Camel is a very popular integration library that works very well with microservice architecture. This talk introduces you to Apache Camel and how you can easily get started with Camel on your computer. Then we cover how to create new Camel projects from scratch as microservices, which you can boot using Camel or Spring Boot, or other micro containers such as Jetty or fat JARs. We then take a look at what options you have for monitoring and managing your Camel microservices using tooling such as Jolokia, and hawtio web console.
Session aims at introducing less familiar audience to the Oracle database statistics concept, why statistics are necessary and how the Oracle Cost-Based Optimizer uses them
This guide helps you setting up the FSlogix Office 365 Container (ODFC). ODFC allows roaming the cache data on VDI/RDS of most Microsoft Office products on top of your existing profile solution. There is minimal impact to the rest of your infrastructure and after implementing caching can be enabled for Outlook, OneDrive, OneNote, Teams, ...
This solution also allows to roam the Outlook Search Index, even on RDS/XenApp!
Since the release of 17.05, Docker has introduced Multi-Stage Build for Docker Images for anyone who has struggled to optimize Dockerfiles while keeping them easy to read and maintain. This builder pattern will help anyone who would just like to have the runtime, configuration & application and doesn’t want to have compilers, debuggers, code, build, test logs etc.
Apache Ranger’s pluggable architecture allows centralized authoring of authorization policies and access audits—for Hadoop and non-Hadoop components. Authorization policy model is designed to capture and express complex authorization needs of component.
In this session, we will present two more key enhancements made to the policy model in the next release to make it richer and support advanced authorization needs of contemporary enterprise security infrastructure.
•Ranger service definition is enhanced to support specification of allowed accesses on a given resource. This specification is then utilized to present only valid accesses when authoring policy targeted for the resource.
•Ranger policy model is enhanced to support time-based policy that temporarily grants/denies access to a resource during specified time window. The time specification supports specification of a time zone which is enforced based on the time zone of the component where the Ranger plugin runs.
We will conclude by a demonstration of these new capabilities. ABHAY KULKARNI, Engineer, Hortonworks and RAMESH MANI, Staff Software Engineer, Hortonworks
How To Set Up SQL Load Balancing with HAProxy - SlidesSeveralnines
We continuously see great interest in MySQL load balancing and HAProxy, so we thought it was about time we organised a live webinar on the topic! Here is the replay of that webinar!
As most of you will know, database clusters and load balancing go hand in hand.
Once your data is distributed and replicated across multiple database nodes, a load balancing mechanism helps distribute database requests, and gives applications a single database endpoint to connect to.
Instance failures or maintenance operations like node additions/removals, reconfigurations or version upgrades can be masked behind a load balancer. This provides an efficient way of isolating changes in the database layer from the rest of the infrastructure.
In this webinar, we cover the concepts around the popular open-source HAProxy load balancer, and show you how to use it with your SQL-based database clusters. We also discuss HA strategies for HAProxy with Keepalived and Virtual IP.
Agenda:
* What is HAProxy?
* SQL Load balancing for MySQL
* Failure detection using MySQL health checks
* High Availability with Keepalived and Virtual IP
* Use cases: MySQL Cluster, Galera Cluster and MySQL Replication
* Alternative methods: Database drivers with inbuilt cluster support, MySQL proxy, MaxScale, ProxySQL
Developing Microservices with Apache CamelClaus Ibsen
Red Hat Microservices Architecture Day - New York, November 2015. Presented by Claus Ibsen.
Apache Camel is a very popular integration library that works very well with microservice architecture. This talk introduces you to Apache Camel and how you can easily get started with Camel on your computer. Then we cover how to create new Camel projects from scratch as microservices, which you can boot using Camel or Spring Boot, or other micro containers such as Jetty or fat JARs. We then take a look at what options you have for monitoring and managing your Camel microservices using tooling such as Jolokia, and hawtio web console.
Apresenta minimamente como funciona o docker e que instruções são utilizadas no dokerfile. No final tem uma lista de links para tutoriais e referências mais completas acerca do docker.
Usando Docker no desenvolvimento .NET - Exemplos da utilização de docker no desenvolvimento .NET com Visual Studio ou diretamente via linha de comando.
Escalando o ambiente de desenvolvimento com cli em rubyRadamés Roriz
Na Revelo tivemos rápido crescimento em um curto período de tempo, tornando processos que eram simples em tarefas que se estendiam por dias completamente improdutivos. Criar uma ferramenta que permita abstrair a arquitetura de serviços foi fundamental para aumentar o engajamento e a produtividade dos times. Uma ferramenta feita em Ruby e com abstrações do Docker permitiu que todos os times tivessem o mesmo ambiente de desenvolvimento, facilitando o onboarding. A ferramenta passou por evoluções como setup do ambiente, ambiente seletivo, comunicação entre serviços de dentro e de fora do Docker, autocomplete e auto update, evoluções que ajudam outros times a se preocupar menos com processo e mais com a evolução da plataforma.
Palestra realizada em abril de 2009 no FLISOL de Aracaju/Sergipe. O tema foi o framework orientado a objetos em PHP chamado Symfony.
Algumas de suas features:
- utiliza a arquitetura MVC (Model View Controller), isto é, separação das camadas de apresentação, controle e modelo.
- utiliza bastantes componentes independentes como o Doctrine e Propel (ORM), YML (arquivos de configuração) e outros. Que podem ser adotados em outros projetos que não utilizam o Symfony.
- possui geração automática de CRUD (create, retrieve, update, delete)
- possui uma documentação e comunidade muito grandes.
- geração automática de telas de administração
- ambiente de desenvolvimento com debug
- ambiente de teste
- integração com sincronizador de arquivos (para atualização do projeto na produção)
- separação de configuração para ambientes de teste, desenvolvimento e produção.
- e muito mais...
Zend Framework 2 - Desenvolvimento Ágil CompetenteMichael Cardoso
Essa apresentação faz parte do minicurso Zend Framework 2, onde apresentamos suas principais características e como fazer a instalação deste framework web de ponta.
Este artigo procurou avaliar o ambiente de programação Delphi uma IDE um ambiente integrado para desenvolvimento composto por compilador que desde o seu surgimento sofreu várias evoluções, agregando melhorias no “trabalho braçal” do programador com ferramentas do tipo RAD (Rapid Aplication Development) - significa "Ambiente Rápido de desenvolvimento”.
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
O objetivo desta palestra é mostrar como é possível evoluir e reescrever partes de uma aplicação legada com mais 5 anos em produção utilizando técnicas de uma parte Domain Driven Design conhecida como Strategic Design. É uma aplicação web escrita em Python e Django que suporta a operação de um grupo focado em medicina do trabalho, com clínicas espalhadas pelo país.
Nesta palestra vamos mostrar uma abordagem que pode ajudar times que precisam lidar com aplicações legadas grandes e complexas no caminho da modernização.
Fazendo barba, cabelo e bigode com REDISMario Guedes
REDIS é um poderoso "storage in-memory" que pode ser utilizado em diversas situações. O benefício mais evidente é o de liberar o banco de dados principal.
Nesta apresentação vemos três casos de uso:
- Cacheamento Lado Servidor
- Mensageria entre processos
- Dashboard em tempo real
O vídeo da apresentação está em: https://youtu.be/iyAoKLw1HbY
Quer aprender tudo sobre REDIS? Acesse nosso site: https://arrayof.io
Integrando-se à Blockchain da EthereumMario Guedes
Blockchain já passou pelo filtro do tempo. Nesta apresentação mostramos alguns conceitos relacionados à blockchain da Ethereum e as oportunidades que se descortinam.
Quando começamos a lidar com REST tudo parece meio mágico e ao mesmo tempo pesado.
Neste vídeo apresentamos alguns conceitos iniciais dos padrões REST sob a perspectiva do protocolo HTTP.
Geolocalização com Redis e Google MapsMario Guedes
Repetimos a palestra sobre Geolocalização no evento Passaporte Delphi 2019 do nosso amigo Thulio Bittencourt.
Aqui mostramos uma solução de geolocalização com Redis no backend e Google Maps no front end sendo os artefatos, aplicativo e servidor rest, desenvolvidos em Delphi.
Geolocalização com Redis e Google MapsMario Guedes
Palestra ministrada no Delphi Squad POA onde falamos de geolocalização utilizando Google Maps no Android e Redis no backend.
As aplicações atuais requer, cada vez mais, esta característica e surgem várias dúvidas de como resolver a questão.
Paralelismo na prática: Threads de uma vez por todas e sem medo!Mario Guedes
Por vezes considerado um recurso obscuro pelos desenvolvedores Delphi, esta apresentação visa mostrar situações cotidianas que podem ser otimizadas pela aplicação de threads no Delphi, as armadilhas e erros comuns na adoção do paralelismo, e as soluções para contornar estas situações .Podemos tornar nossos aplicativos mais fluídos bem como tornar o processamento de tarefas mais rápidos. Nesta palestra veremos algumas boas práticas acerca do assunto partindo da classe TThread chegando à recente PPL (Parallel Programming Library). É um recurso importante no desenvolvimento Win32, Mobile e backend nos ajudando a tornar as aplicações assíncronas e, portanto, escaláveis.
Apresentação na CodeRage Brasil 2019 sobre as possibilidades do Redis com o Delphi.
Vídeo para apresentação: https://youtu.be/WI7SAY_ds1s
Exemplos no GitHub: https://github.com/jmarioguedes/CodeRage2019_Redis.git
Material de apoio à palestra on-line sobre a utilização do Redis e NGINX com Delphi.
*Vídeo:* https://youtu.be/ckXnPngRu7A
*GitHub:* https://github.com/jmarioguedes/INTENSIVE_DELPHI_2018
TDCSP - 2018 - Possibilidades com o REDIS no DelphiMario Guedes
O REDIS é uma poderosa ferramenta que expande as possibilidades no lado servidor. Nesta palestra será mostrado as oportunidades que que o REDIS oferece:
~> Cacheamento lado servidor
~> Controle de sessão DataSnap
~> Mensageiria entre processos
~> Enfileiramento de processamento
~> Execução de código Lua
Data Science é uma realidade e não pode ser ignorada. A utilização de BOTs é umas das tendências que está se consolidando. Mostraremos como tirar proveito desta tecnologia permitindo que os usuários interajam com a aplicação da forma mais natural possível para o ser humano: conversando.
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Mario Guedes
Nessa palestra, José Mario Silva Guedes mostra a migração da abordagem Cliente Servidor para Multi Camadas passando pelo SOA (Soap) até chegar no ROA (Rest), por intermédio de uma linha do tempo do uso das linguagens VB, Delphi, Java chegando no Python, bem como, da evolução do banco de dados relacional para abordagem noSQL e suas variantes. Por fim, será abordado o cenário atual, mostrando a adoção de Machine Learning e tecnologias cognitivas, como por exemplo a adoção de Bots para o atendimento
Uma arquitetura que queira ser escalável e resiliente tem que lançar mão de conceitos e artefatos alinhados com estes objetivos.
A apresentação mostra uma proposta de arquitetura que atendam a estes dois objetivos.
2. Do que estamos falando?
• O resultado final do nosso trabalho é um grande executável: “.exe”
• Mas podemos quebrá-lo em partes menores: MÓDULOS
• A BPL - Borland Package Library, nos dá esta possibilidade.
O Delphi é um
ótimo exemplo de
aplicação modular.
3. Qual a diferença?
Seu
executável
BPL #1
Framework
Delphi
BPL #2
3os
Seu
Código
Você
Um grande projeto com
dezenas de dependências
Seu
executável
Vários pequenos
projetos com poucas
dependências
5. Motivação
Melhor divisão de responsabilidades entre a equipe.
Melhor aderência de um novato por não precisar lidar com
algo complexo imediatamente.
Menor escopo favorece maior domínio.
Permite que várias pessoas trabalhem em uma mesma
solução.
Permite a adoção de novas tecnologias sem refazer o sistema:
Exemplo: BDE dbExpress FireDAC ?
Aderência às metodologias ágeis.
6. E mais vantagens!
Facilita a personalização da solução para os clientes finais
(plug-ins).
Diminuição do tamanho dos artefatos (exe, dll e bpl).
Facilita a atualização do aplicativo, ficando quase tão
instantâneo quanto um aplicativo web.
Possibilidade de armazenar formulários, imagens,
resources strings para internacionalização, procedimentos,
enfim: uma biblioteca!
Interação com tipos do Delphi: classes, records,
enumerados, string e etc.
7. Quem ganha com a modularidade?
Você
– Passa a focar no real problema a ser resolvido e não na tecnologia em volta.
E volta mais cedo para casa.
Sua equipe
– Ninguém fica sobrecarregado. Ninguém fica ocioso.
Temos efetivamente uma equipe.
Sua empresa
– Custa caro manter um software “vivo”.
Seu cliente
– Obtêm respostas rápidas às demandas. Com qualidade e flexibilidade.
Seu consultor
– e-mail no penúltimo slide
8. Ressalvas
Um sistema desenvolvido em Delphi XE5 só carregará BPLs compiladas
em Delphi XE5. Conforme o Delphi avança cria-se incompatibilidades de
mapeamentos de tipos com o Delphi anterior.
Migração de Delphi exige um trabalho extra para as compatibilizações.
A carga da aplicação fica ligeiramente mais lenta, em especial se os
módulos estiverem “longe”. Em geral é um problema irrelevante.
Duas units com o mesmo nome não poderão ser carregadas pela
mesma aplicação. Utilize namespace para evitar ambiguidades.
Na primeira instalação será descarregado muito mais conteúdo do que
se espera (BPLs do Delphi e de componentes de terceiros).
9. Redistribuição
Um problema inicial é a redistribuição das BPLs das quais o seu sistema
depende.
Cuidado com componentes de terceiros mal projetados: o correto é ter
uma BPL de “design time” e outra de “run time”, esta última será
redistribuída.
Sugere-se não colocá-las no system32, mas sim criar um diretório
específico e colocar este diretório na variável de ambiente PATH.
Os arquivos do Delphi permitidos para redistribuição estão em:
EmbarcaderoRAD Studio12.0Redist
Para gerar uma lista das dependências estáticas (BPLs e DLLs) sugere-se
o aplicativo Dependency Walker:
http://www.dependencywalker.com/
10. Ortogonalidade
Ortogonalidade, em sistemas, refere-se ao nível de independência que um
módulo tem em relação a outro módulo.
Quanto mais independente mais ortogonal.
Exemplo: Devemos conseguir mudar de gerenciador de banco de dados sem
afetar as telas do front-end e vice versa.
•
•
•
•
Delphi forever.
Utilize frameworks de boa reputação.
Crie seu próprio framework.
Crie as soluções finais em cima do
seu framework.
Delphi
Frameworks de terceiros
Seu framework
Solução
12. Conceitos que irão ajudar
•
•
•
•
•
•
•
•
•
OOP
Padrões de Projetos
Interfaces
RTTI e Generics
ORM
DDD
Geradores automáticos de código
OTA
Integração contínua
13. OOP e Padrões de Projeto
•
Um maior domínio sobre a OOP é importante para termos um real
proveito de todo o poder que o Delphi oferece.
•
Um tema que deve ser continuamente estudado é Padrões de Projeto.
•
Alguns padrões que são aderentes:
– Singleton: Instância única de uma classe.
– Factory: Classes abstratas e classes concretas.
– Façade: Fachada de facilidades.
•
A utilização de Interfaces é uma forma de abstrair as classes concretas.
•
A RTTI dá mais poder à abstração.
14. Aplique o MVC
• Model View Control é um padrão de projeto que propõe
separar a regra de negócio da regra de visualização.
• É de extrema importância para dar vida longa ao seu
aplicativo, pois o mundo é cada vez mais “poliglota”:
desktop, web, mobile, SQL, noSQL etc, etc e etc.
• Isole as regras de negócio:
A interface muda constantemente e coexistem por um
longo tempo:
WinXP, Aero, Ribbon, Metropolis UI, Web, Mobile e etc.
As regras de negócio são perenes.
15. Arquivos DPK, DCP & BPL
•
Um projeto de pacote Delphi é encabeçado por um arquivo DPK –
Delphi Package - e não por um arquivo DPR.
•
Um DCP - Delphi Compiled Package - é um mapeamento de uma BPL e
só tem serventia para a IDE do Delphi.
•
Não é o diretório da BPL que deve ir para a Library Path do Delphi, e sim
o diretório do DCP.
•
Separe as suas BPLs das do Delphi e componentes de terceiros.
•
Sugere-se criar um diretório específico para as saídas do DCP e outro
específico para a BPL.
•
O diretório de saída das BPLs podem ir para a variável de ambiente
PATH.
16. Configurações de um Projeto DPK
• É muito importante configurar consistentemente as
saídas dos artefatos produzidos pela compilação.
• Evite conflitos com os seus colegas usando variáveis
de ambiente.
Diretório onde será
gerado o DCP
Diretório onde
será gerado a
BPL
Diretório onde
serão gerados os
DCUs
17. Configurações de um Projeto DPK
Defina o aplicativo que
será utilizado para a
depuração
Cuidado! Muitas
configurações são por
plataforma
A Descrição poderá ser
recuperada posteriormente
Esta informação vai para o
nome do arquivo, facilitando
a identificação da versão.
Definir como run-time
retira código
desnecessário
18. Estrutura e gerenciamento de um DPK
Faça uso do
namespace
Diretivas de compilação
Nome do
DCP
Requires: Pacotes do qual este pacote depende
Contains: Unidades que pertencem a este pacote
Diretórios que
serão considerados
19. Adicionando dependências
• Deve-se ficar muito atento às dependências e evitar a
importação implícita.
• Em geral o Delphi detecta e sugere a adição das
dependências. Mas isso não acontece para os pacotes
que ele não conhece.
20. Executável fachada
•
Deve-se criar um executável preparado para lidar com as
BPLs.
•
Temos dois modos de dependência: estática e dinâmica.
Esta opção indica ao Delphi para gerar
o executável dependente das BPLs ao
invés de incluir estaticamente as
units/dcu no exe final
Aqui vai a lista de BPLs que o
executável carregará estaticamente. O
que não estiver na lista fará parte do
executável
21. Carga estática
• As BPLs são associadas estaticamente ao executável.
• Na prática o compilador irá escrever no cabeçalho
do executável o nome das dependências.
• O Windows, ao carregar este executável, tomará
conhecimento das dependências e carregará os
módulos acoplando ao processo.
• Isso implica que o executável não irá carregar se as
dependências não forem atendidas.
22. PATH
• O Windows procura os módulos estáticos nos seguintes
locais:
http://msdn.microsoft.com/pt-br/library/7d83bc18(v=vs.90).aspx
Diretório do aplicativo.
Diretório corrente.
Diretório de sistema: WindowsSystem32.
Diretório do Windows: Windows.
Diretórios listados na variável de ambiente PATH
(da esquerda para direita).
• É aqui que a BPL Hell se manifesta!
23. Carga dinâmica
•
A carga dinâmica lhe dá maior flexibilidade de distribuição das BPLs
podendo-se efetivamente adotar o conceito de plug-ins.
•
Mas tira a fluidez na hora de codificar, pois o Delphi não conhece a BPL
em questão e portanto não consegue oferecer os métodos,
parâmetros, tipos e etc que estão contidos na BPL.
•
O requisito mínimo é exportar um ou mais procedimentos. Perceba que
é case sensitive.
•
Sugere-se então que exporte uma função que retorne uma interface ou
objeto que consiga ser manipulado pelo executável fachada.
•
Aqui também entra o Padrão de Projeto “Factory”, pois uma BPL poderá
conter a classe abstrata e outras conterão as classes concretas. Do
ponto de vista do executável só se conhecerá a classe abstrata.
24. Carga dinâmica - Comandos
• Em System.SysUtils temos algumas rotinas para
lidar com as BPLs:
•
LoadPackage: Carrega a BPL.
•
UnloadPackage: Descarrega a BPL.
•
GetPackageDescription: Retorna a descrição de uma
BPL.
•
GetPackageInfo: Retorna diversas informações sobre a
BPL, como o número da versão.
25. Comandos para interagir com a BPL
• Para lidar com os recursos oferecidos pela BPL
podemos usar alguns comandos
(Winapi.Windows):
• GetProcAddress: Retorna o ponteiro de um
método.
• GetClass: Retorna uma referência de classe,
permitindo instanciar objetos.
27. Proposta dos exemplos
• Evoluiremos o exemplo entre os seguintes cenários:
– Aplicação Win32 monolítica
– Aplicação Win32 modular
– Aplicação DataSnapREST modular
• Será utilizado um exemplo didático de “Olá Mundo”.
• Baixe os exemplos de:
https://github.com/jmarioguedes/DC2013_BPL
28. Links
O formato PE
Vovó Vicki
http://www.numaboa.com.br/informatica/oraculo/230-formatos/1096-formato-pe
Advanced Dynamic Packages
Vino Rodrigues
http://delphi.cz/img/packages/advanced.pdf
Modularização de Aplicações
Álvaro Esteves Alves
http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=719
BPLs no Delphi
Paulo Quicoli
http://www.devmedia.com.br/websys.5/webreader.asp?cat=3&artigo=4709&revista=clubedelphi_142#a-4709
Pacotes em Delphi (Modulos)
Rafael Ferreira
http://www.portaldaprogramacao.com/artigos2.asp?n=882
Biblioteca (Computação)
Wikipédia
http://technet.microsoft.com/en-us/sysinternals/bb842062