Manual de Tecnologia Caché

Propaganda
Manual de Tecnologia Caché
®
Índice
Introdução
1
Capítulo 1
MODELAGEM DE DADOS – ACESSO RELACIONAL OU POR OBJETO
4
Tecnologia Relacional
5
Tecnologia de Objeto e de Base de Dados de Objeto
Acesso Relacional vs. Acesso a Objeto
6
6
Panorama do Modelo de Dados de Objetos do Caché e da
Programação Orientada a Objetos
Conceitos-Chave de Objeto
Por que escolher Objetos para o seu Modelo de Dados?
Armazenamento de Objetos & Acesso Relacional
6
8
9
9
SERVIDOR DE DADOS MULTIDIMENSIONAL DO CACHÉ
10
Capítulo 2
Acesso Integrado a Bases de Dados
Modelo de Dados Multidimensional
Acesso SQL
Objetos do Caché
Busca de Texto com Reconhecimento de Palavras
Indexação de Bit-Map Transacional
Enterprise Caché Protocol para Sistemas Distribuídos
Tolerância a Erros
Modelo de Segurança
10
11
14
16
18
20
22
24
27
Capítulo 3
SERVIDOR DE APLICAÇÕES CACHÉ
A Máquina Virtual Caché e Linguagens de Script
Caché ObjectScript
Basic
MVBasic
C++
Java
Caché & Jalapeño
Caché & .Net
Caché & XML
Caché & Web Services
Caché & Multivalue 30
30
32
38
40
40
40
42
44
45
46
47
Capítulo 4
CRIAÇÃO RÁPIDA DE APLICAÇÕES DE ALTA PERFORMANCE WEB COM
CACHÉ SERVER PAGES (CSP)
O Modelo Caché Server Pages
Arquitetura de Classe de Páginas Web
Estratégias Múltiplas de Desenvolvimento
Arquivos CSP
Hipereventos (Hyper-Events)
Intersystems Zen & Web Pages Baseada em Componentes
50
52
54
54
55
56
58
Introdução
ALÉM DO BANCO DE DADOS RELACIONAL
Há 30 anos, bases de dados relacionais eram aclamadas como uma grande inovação. Ao invés de
monolíticas bases de dados legadas, cada qual com seu esquema de dados único, as informações
passariam a ser armazenadas em formato tabulado
e estariam acessíveis a qualquer um que conhecesse SQL. Os bancos de dados relacionais tiveram
grande sucesso e o SQL tornou-se o padrão
comum de acesso à base de dados. Entretanto,
como é comum no caso de tecnologias mais
antigas, essas bases possuem limitações que reduzem seu uso no mundo atual: primordialmente
no que diz respeito ao desempenho/escalabilidade, facilidade de uso e adaptação às tecnologias
de desenvolvimento atuais.
O uso e a complexidade das aplicações tecnológicas estão aumentando de forma explosiva.
Os sistemas de hoje em dia, cada vez mais,
apresentam necessidades de processamento que
superam as capacidades da tecnologia relacional.
Muitos dos aplicações-chave que demandam alto desempenho e escalabilidade nunca realizaram
a transição para bases de dados relacionais e, atualmente, até mesmo aplicações simples começam
a se aproximar dos limites da tecnologia relacional tradicional.
“Problemas de impedância (impedance mismatch)” entre bancos de dados relacionais e as tecnologias de desenvolvimento atuais passaram a ser um sério problema, tornando o desenvolvimento
mais complexo e as chances de falha maiores. Se por um lado a simplicidade de estruturas tabulares suporta uma linguagem de consulta estruturada (SQL) elegante, por outro, é difícil decompor
estruturas de dados do mundo real em linhas e colunas tão simplistas. O resultado é um enorme
número de tabelas com inter-relações que são difíceis de lembrar e usar – linhas e colunas são simples, mas a necessidade universal de se programar left outerjoins, stored procedures e triggers não.
Aplicações modernas são normalmente escritas usando tecnologia objeto, a qual permite uma
maneira mais rápida e intuitiva de se descrever e usar informações. O desenvolvimento torna-se
mais veloz e a confiabilidade aumenta. Infelizmente, objetos não são compatíveis de modo nativo
com bases de dados relacionais. As vantagens da tecnologia objeto tornam-se moderadas quando
os objetos resultantes são introduzidos.
Os atuais aplicações de processamento transacionais possuem requerimentos que extrapolam as
capacidades da tecnologia relacional – eles precisam funcionar em grandes redes, servir a milhares
de clientes, mas ainda assim, apresentar um desempenho excelente, compatibilidade com a web, bem
como operações simples e com baixo custo. E eles devem ser desenvolvidos rapidamente!
1
Introduzindo o Caché
O Caché® da InterSystems é uma nova geração da tecnologia de banco de dados de desempenho
ultra elevado. Ele combina uma base de dados objeto, SQL de alta performance e acesso poderoso
a dados multidimensionais – todos podendo acessar simultaneamente os mesmos dados. A informação é descrita somente uma vez em um dicionário de dados único integrado e fica instantaneamente
disponível através de todos os métodos de acesso. O Caché supre níveis de desempenho, escalabilidade, programação rápida e facilidade de uso que são inatingíveis através de tecnologia relacional.
O Caché é, no entanto, muito mais do que um banco de dados. Ele possui também um servidor
de aplicações com capacidade avançada de programação de objetos, a habilidade de se integrar
facilmente com uma ampla variedade de tecnologias, além de um ambiente de execução de alto
desempenho com tecnologia única de caching de dados (data caching).
O Caché vem com várias linguagens de script embutidas: Caché ObjectScript (uma poderosa
linguagem de programação orientada a objetos e ainda assim, simples de aprender); Caché Basic
(um conjunto de Basic – linguagem de programação amplamente difundida –, o qual inclui
extensões para acesso de dados e tecnologia de objetos eficientes); e o Caché MVBasic (uma
variante do Basic utilizado por aplicações MultiValue, também conhecidos como aplicações Pick).
Outras linguagens, tais como Java, C# e C++, são suportadas através de chamadas diretas ou
através de outras interfaces, incluindo ODBC, JDBC, .NET, bem como uma interface de objetos
fornecida pelo Caché e que permite acessar a base de dados Caché e outras de suas facilidades
como propriedades e métodos.
O Caché também vai além das bases de dados tradicionais ao incorporar um rico ambiente para
desenvolvimento de aplicações sofisticados baseados em browser (web). A tecnologia Caché
Server Pages (CSP) permite o desenvolvimento e a execução rápida de páginas web gerada de
forma dinâmica. Milhares de usuários web simultâneos podem acessar aplicações, mesmo através
de hardware de baixo custo.
Para aplicações que não sejam baseados em browser, a interface de usuário é geralmente programada em uma das tecnologias de interface populares, como Java, .NET, Delphi, C# ou C++.
Os melhores resultados (programação mais rápida, melhor desempenho e menor manutenção)
são geralmente obtidos ao se realizar o resto do desenvolvimento dentro do próprio Caché.
Entretanto, o Caché também fornece níveis de interoperabilidade extremamente elevados com
outras tecnologias e suporta todas as ferramentas de desenvolvimento mais comumente utilizadas,
de modo que uma ampla gama de metodologias de desenvolvimento está disponível.
2
Capítulo 1
Capítulo 1: Modelagem de Dados – Acesso Relacional ou por Objetos
No início do processo de design de uma nova aplicação, os desenvolvedores devem decidir qual
será sua abordagem no que diz respeito à modelagem de dados. Na maioria dos casos, esta é
uma decisão que se resume entre a modelagem tradicional de dados como tabelas relacionais ou
a abordagem mais recente de modelagem de dados como objetos. Frente à necessidade de lidar
com dados complexos, muitos desenvolvedores acreditam que a modelagem em objetos é uma
abordagem mais eficiente.
Naturalmente, quando se move uma aplicação já existente para o Caché, o primeiro passo
necessário é migrar o modelo de dados existente. Há modos simples de se importar modelos
de dados de várias representações relacionais ou de objetos, tal que o resultado seja uma definição
padrão de dados Caché. Uma vez que tenham sido migrados para o Caché, os dados podem ser
simultaneamente acessados como objetos, tabelas relacionais e arrays multidimensionais.
O Caché suporta tanto acesso SQL quanto objetos de dados nos momentos apropriados. Para
entendermos os usos de cada um destes acessos e o porquê da modelagem de dados em objetos
ser normalmente preferido pelos desenvolvedores atuais é útil que se compreenda como e por que
cada método foi desenvolvido.
4
TECNOLOGIA RELACIONAL
Nos primórdios da informática, o processamento de informações era realizado em sistemas
mainframe gigantescos e o acesso a dados era em grande parte limitado a profissionais de TI.
As bases de dados tendiam a ser criadas internamente e a recuperação de dados exigia conhecimento completo do banco de dados. Se os usuários quisessem um relatório especial, eles geralmente tinham que solicitar a funcionários sobrecarregados que o preparassem, de forma que
geralmente não estavam prontos a tempo de influenciar na tomada de decisões.
Embora a tecnologia relacional tenha sido originalmente desenvolvida no mainframe na década
de 70, ela prosseguiu em grande medida como um projeto de pesquisa até começar a aparecer
em mini-computadores nos anos 80. Com o advento do PC, o mundo entrou em uma era de
informática mais centrada no usuário e de geradores de relatórios mais amigáveis, baseados em
SQL – a linguagem de busca introduzida pela tecnologia relacional. Os usuários puderam a partir
de então gerar seus próprios relatórios e realizar buscas com finalidades específicas (ad hoc) na
base de dados, e assim o uso relacional se expandiu exponencialmente.
O SQL permite o uso de uma linguagem consistente na realização de consultas a uma
variedade ampla de dados. O SQL funciona pela visualização de todos os dados em
um formato muito simples e padronizado – uma tabela bidimensional com linhas e
colunas. Se por um lado este modelo simplificado de dados permitiu a construção de
uma linguagem elegante de consulta através da qual se deva questionar informações,
por outro ele foi criado a um alto custo. A complexidade inerente às relações de dados
do mundo real não se encaixa naturalmente em simples linhas e colunas, de tal forma
que os dados são freqüentemente fragmentados em tabelas múltiplas que devem ser
“unidas” para que até tarefas simples possam ser completadas. Isso resulta em dois
problemas: a) consultas podem se tornar extremamente difíceis de serem escritas, dada
a necessidade
de se “unir” muitas tabelas (freqüentemente com complexos outerjoints –
junções externas); e b) quando bases de dados relacionais têm de lidar com dados
complexos, a quantidade de processamento necessário para o código adicional pode ser
enorme.
O SQL tornou-se um padrão para interoperabilidade dos bancos de dados
e de ferramentas de relatório. No entanto, é importante compreender que
enquanto o SQL cresceu a partir dos bancos de dados relacionais, ele não
precisa estar restrito a eles. O Caché suporta o SQL padrão como uma linguagem de
consulta e atualização, utilizando uma tecnologia de base de dados multidimensional
muito mais potente e que é ampliada para incluir capacidades de orientação a objetos.
5
Capítulo 1
TECNOLOGIA DE OBJETOS E DE BASE DE DADOS DE OBJETOS
Programação orientada a objetos e bancos de dados orientados a objetos são o resultado prático
de trabalhos para simular as complexas atividades do cérebro. Observou-se que o cérebro é capaz
de guardar dados muito complexos e de tipos diferentes e, assim mesmo, ainda pode manipular
informação aparentemente diversas de modo simples. Para suportar esta simulação, comportamentos muito complexos precisavam ser implementados a programas, ao mesmo tempo em que
se escondia esta complexidade – suportando uma lógica mais simples, generalizada e abrangente
com um conjunto com funcionalidades reutilizáveis e adaptáveis. Obviamente, estas características
são também verdadeiras para os mais avançados aplicações da atualidade e, uma tecnologia que
permita aos desenvolvedores trabalhar em uma maneira natural e que seja similar ao modo como
os seres humanos pensam é de grande vantagem.
ACESSO RELACIONAL VS. ACESSO POR OBJETOS
Na tecnologia a objetos, a complexidade dos dados está contida dentro do objeto e os dados são
acessados através de uma interface simples e consistente. Por outro lado, a tecnologia relacional
também apresenta uma interface simples e consistente, porém, dado o fato de que ela não faz
nada para gerenciar a complexidade de dados do mundo real, as informações ficam dispersas entre
múltiplas tabelas – o usuário ou programador é responsável por lidar constantemente com esta
complexidade.
Considerando que objetos podem modelar dados complexos de forma simples, a programação
em objetos é a melhor escolha para aplicações complexos. De forma similar, acesso a objetos pelo
banco de dados é a melhor escolha para se inserir e atualizar informações na base de dados (como
exemplo, para processamento transacional).
O Caché complementa o acesso a objetos com uma linguagem de consulta SQL estendida
a objetos. O SQL é uma linguagem eficiente para realizar buscas em uma base de dados e é muito
utilizada por ferramentas de relatório. Acreditamos, no entanto, que o SQL é mais apropriado
para esse propósito – consultas e relatórios –, do que para processamento transacional (para
o qual é incômodo e muitas vezes ineficiente). As extensões de objetos do SQL no Caché eliminam muito da incômoda sintaxe de joins, tornando o SQL ainda mais fácil de utilizar.
PANORAMA DO MODELO DE DADOS POR OBJETOS DO CACHÉ E DA
PROGRAMAÇÃO ORIENTADA A OBJETOS
O modelo de objetos do Caché é baseado no padrão ODMG (Object Database Management
Group) e suporta muitos recursos avançados, incluindo herança múltipla.
A tecnologia de objetos tenta espelhar a maneira como os humanos realmente pensam e usam
informações. Diferentemente de tabelas relacionais, objetos formam pacotes que contêm tanto
dados quanto códigos. Por exemplo, um objeto de Nota Fiscal pode conter dados, como número
de NF e valor total, e códigos como Print().
Conceitualmente, um objeto é um pacote, que inclui valores de dados daquele objeto (“propriedades”) e uma cópia de todo o seu código (“métodos”). Os métodos de um objeto enviam
mensagens para se comunicar com outros métodos. Para reduzir armazenamento, é comum que
objetos da mesma classe compartilhem a mesma cópia de código (ex., não seria realista que cada
objeto de NF possuísse sua própria cópia de código particular). Além disso, no Caché, chamadas de métodos geralmente resultam em chamadas de função eficientes, ao invés de persistir com
processamento extra de mensagens em trânsito. Entretanto, estas implementações técnicas estão escondidas do programador. É sempre correto pensar em termos de objetos passando as mensagens.
6
Qual a diferença entre um objeto e uma classe? Uma classe é a estrutura de definição
e o código fornecido pelo programador. Ela inclui a descrição da natureza dos dados
(seu “tipo”) e como ele é armazenado, assim como todo o código do objeto. Todavia,
ela não inclui nenhum dado. Já um objeto, é uma “instância” específica de uma classe.
Por exemplo, a nota fiscal nº123456 é um objeto da classe de Notas Fiscais.
A tecnologia de objetos promove também uma visualização natural dos dados através
da não restrição de propriedades a tipos de dados simples e centrado no computer.
Objetos podem incluir outros objetos ou referências a outros objetos, o que torna fácil
construir modelos de dados úteis e significativos. Eis um exemplo simples de um
objeto Cliente:
(Nome) Name:
Os dados são armazenados
utilizando um tipo de Nomes
(CPF) SSN:
Os dados podem ser um tipo
simples, como um integral,
ou um tipo mais complexo
definido pelo programador,
como uma seqüência de 9
dígitos (N.: 11 dígitos no
Brasil), seguindo o padrão:
NNN-NNN-NNN-NN (no
Brasil).
(Rep Conta) Account Rep:
RepConta é uma propriedade
que conecta um Cliente a um
objeto RepConta numa relação
de muitos-para-um (muitos
clientes para um Representante
de Conta). Ao contrário de um
objeto embutido, o objeto relacionado tem seu próprio identificador (ID) de base de dados e é
guardado separado usando aquele
ID. O ID pode ser usado para
acessar aquele RepConta diretamente, sem acessar o Cliente. No
Caché a sintaxe para acessar um
objeto embutido ou relacionado é
a mesma (ex. Cliente .Endereço.
Cidade e Cliente.RepConta.Nome
usam a mesma “sintaxe-ponto”).
(Endereço) Address:
Este é um exemplo de
como objetos podem ser
embutidos em outros
objetos. Neste exemplo,
Endereço é um objeto
embutido, que contém as
propriedades Rua e Cidade.
(Notas Fiscais) Invoices:
Um Cliente possui um conjunto
de NFs, cada uma das quais
é um objeto complexo armazenado
separadamente com seu
próprio ID de base de dados.
Neste exemplo, há uma relação
de um-para-muitos entre Clientes
e NFs (um Cliente para
muitas NF) usando uma relação
pai-filho (NF não podem
existir sem um Cliente, mas um
Cliente pode existir sem NF).
Um conjunto de objetos embutidos
também é possível.
7
Capítulo 1
CONCEITOS-BÁSICOS DE OBJETOS
Herança é a possibilidade de se derivar uma classe de objetos a partir de outra. A nova classe
(uma subclasse) contém todas as propriedades e métodos de sua superclasse, bem como propriedades adicionais e métodos exclusivos dela. Pode-se pensar em objetos da subclasse como tendo
uma relação de “ser um(a)” com sua superclasse. Por exemplo, um cão “é um” mamífero, portanto faz sentido que a classe Cão herde todas as propriedades e métodos da classe Mamíferos, além
de possuir propriedades e métodos adicionais, tais como NumColeiraCao. Uma subclasse pode
também desativar uma definição herdada (ex. o método Print() para uma subclasse da classe Nota
Fiscal pode ser diferente do método Print() de Nota Fiscal). A herança promove a reutilização do
código e torna mais fácil a introdução de grandes melhorias.
Herança múltipla significa que uma subclasse pode ser derivada de mais de uma superclasse.
Por exemplo, um cão “é um” mamífero e “é um” animal de estimação, portanto a classe de
objetos “Cão” pode herdar as propriedades e métodos de ambas as classes “Mamíferos” e
“Animais de Estimação”.
Encapsulamento significa que os objetos podem ser vistos como “caixas-pretas”. Propriedades
e métodos públicos podem ser acessados por métodos de qualquer classe, ao passo que propriedades e métodos particulares só podem ser acessados por aqueles da mesma classe. Portanto,
o aplicação não precisa conhecer o funcionamento interno de um objeto – ele só lida com as
propriedades e métodos públicos. A força do encapsulamento está no fato de programadores
poderem melhorar o funcionamento interno de uma classe sem afetar o resto do aplicação.
Polimorfismo refere-se ao fato de métodos utilizados em várias classes poderem compartilhar
uma interface comum, mesmo quando a implementação subjacente for diferente. Por exemplo,
suponha que as classes Carta, Etiqueta Postal e Crachá contenham um método chamado Print().
Para imprimir, um aplicação não precisa saber que tipo de objeto ele está acessando – ele simplesmente chama o método Print() do objeto.
A VANTAGEM DO CACHÉ
O Caché é completamente habilitado para o uso de objetos, disponibilizando toda a
força da tecnologia de objetos para desenvolvedores de aplicações de processamento
transacional de alto desempenho.
Modelagem Intuitiva de Dados: A tecnologia de objetos permite aos desenvolvedores
pensar e utilizar informação – mesmo informação extremamente complexa – de formas
simples e realista, acelerando assim, o processo de desenvolvimento de aplicações.
Desenvolvimento Rápido de Aplicações: Os conceitos de encapsulamento, herança e
polimorfismo de objetos permitem a reutilização de classes com novos propósitos e de
forma compartilhada entre aplicações, permitindo aos programadores alavancarem seus
trabalhos em vários projetos.
8
POR QUE ESCOLHER OBJETOS PARA SEU MODELO DE DADOS?
Para novas aplicações, a maioria dos desenvolvedores optam por utilizar tecnologia de objetos,
pois assim podem desenvolver aplicações complexas mais rapidamente, além de poder modificá-las
com maior facilidade posteriormente. A tecnologia de objetos oferece muitos benefícios:
<Objetos suportam uma estrutura de dados mais rica e que descreve informação do mundo real mais naturalmente.
<Programação mais simples – é mais fácil saber o que você está fazendo e o que você está manipulando.
<Versões customizadas de classes podem facilmente substituir versões padronizadas,
tornando mais fácil customizar um aplicação.
<A abordagem caixa-preta de encapsulamento proporciona aos programadores a habilidade de melhorar o funcionamento interno de objetos sem afetar o restante do aplicação.
<Objetos proporcionam um modo simples de conectar diferentes tecnologias e aplicações.
<A tecnologia de objetos é um par natural de interfaces gráficas de usuário.
<Diversas novas ferramentas pressupõem tecnologia de objetos.
<Os objetos proporcionam uma boa independência entre a interface de usuário e o
restante do aplicação. Assim, quando se tornar necessário adotar uma nova tecnologia de interface de usuário (talvez uma tecnologia futura ainda desconhecida), você poderá reuti-
lizar a maior parte do seu código.
ARMAZENAMENTO DE OBJETOS…
Infelizmente, apesar de muitos aplicações serem atualmente escritos em linguagens de
programação de objetos, eles freqüentemente tentam formatar forçosamente objetos em
tabelas relacionais. Isto diminui significativamente as vantagens da tecnologia de objetos.
O Caché possui uma estrutura de dados multidimensional que armazena naturalmente dados de objetos. O resultado disso é o rápido acesso a dados e uma programação mais ágil.
... & ACESSO RELACIONAL
Certamente, muitas ferramentas (tais como geradores de relatórios) utilizam SQL, e não tecnologia de objeto, para o acesso a dados.
O Caché possui um recurso exclusivo através do qual quando uma classe é definida, ele fornece
automaticamente acesso SQL completo àqueles dados. Assim, ferramentas baseadas em SQL
passam a funcionar imediatamente com os dados Caché sem trabalho adicional nenhum – e até
mesmo estas ferramentas passarão a se beneficiar da vantagem proporcionada pelo alto desempenho do Servidor de Dados Multidimensional do Caché.
O recurso funciona também na direção contrária. Quando uma definição DDL de uma base
de dados relacional é importada, o Caché gera automaticamente uma descrição de objetos dos
dados, possibilitando a eles o acesso imediato na forma de objetos e também na forma de SQL.
A Arquitetura Unificada de Dados do Caché (Caché Unified Data Architecture) mantém estes
caminhos de acesso sincronizados – ficando assim, somente uma descrição de dados para ser editada.
9
Capítulo 2
Capítulo 2: Servidor de Dados Multidimensional do Caché
A base de dados de alta performance do Caché utiliza um engine de dados multidimensional
que possibilita o armazenamento eficiente e compacto de informações em uma rica estrutura
de dados. Objetos e SQL são implementados especificando um dicionário unificado de dados,
o qual define as classes e tabelas, bem como realiza um mapeamento das estruturas multidimensionais – um mapa que pode ser gerado automaticamente.
Acesso Multimensional
ACESSO INTEGRADO À BASE DE DADOS
O Caché dá aos programadores a liberdade de armazenarem
e acessarem dados através de objetos, SQL ou acesso direto
a estruturas multidimensionais.
Não obstante o método de acesso, todos os dados contidos na
base de dados do Caché ficam armazenados nos arrays multidimensionais dele.
Uma vez armazenados os dados, todos os três métodos de
acesso podem ser utilizados simultaneamente e em completa
concomitância em um mesmo dado.
A Arquitetura de Dados Unificado é um recurso exclusivo
do Caché. Quando uma classe de objetos de base de dados
é definida, o Caché gera de forma automática uma SQL-ready,
descrição relacional dos dados. De forma semelhante, se uma
descrição DDL de uma base de dados relacional é importada
para o Dicionário de Dados, o Caché gera automaticamente
tanto uma descrição de objeto quanto uma descrição relacional dos dados, possibilitando o acesso
imediato na forma de objetos. O Caché mantém estas descrições coordenadas, há somente uma
definição de dados para ser editada. O programador pode editar e visualizar o dicionário a partir
de uma perspectiva de objeto e de uma tabela relacional.
O Caché automaticamente mapeia o modo como objetos e tabelas estão armazenados nas estruturas multidimensionais, ou permite ao programador controlar de forma explícita o mapeamento.
A VANTAGEM DO CACHÉ
Flexibilidade: Os modos de acesso a dados do Caché – Objeto, SQL e multidimensional
– podem ser usados concomitantemente em um mesmo dado. Esta flexibilidade dá aos
programadores a liberdade de pensar nos dados do modo que faça mais sentido, utilizando o método de acesso que melhor se adéqüe às necessidades de cada programa.
Menos Trabalho: A Arquitetura de dados Unificado do Caché descreve automaticamente os dados tanto como objetos quanto como tabelas, com uma única definição.
Não há necessidade de codificar transformações, permitindo assim que aplicações
possam ser desenvolvidos e mantidos mais facilmente.
Alavanque Habilidades e Aplicações Já Existentes: Os programadores podem alavancar
habilidades relacionais existentes e introduzir gradualmente capacidades de objeto
a aplicações já existentes conforme sua evolução.
10
MODELO DE DADOS MULTIDIMENSIONAL
Em seu núcleo, a base de dados Caché é alimentada por um engine de dados multidimensional
extremamente eficiente. As linguagens de script integradas ao Caché suportam acesso direto
às estruturas multidimensionais – oferecendo o mais alto desempenho e o maior número de
possibilidades de armazenamento. Ademais, muitas aplicações são implementados inteiramente
a partir da utilização direta deste engine. “Acesso direto a globais” direto é particularmente
comum nos casos de estruturas muito especializadas ou incomuns, além da ausência de necessidade em se prover acesso de objeto ou via SQL a elas, ou ainda quando o mais alto desempenho
possível é necessário.
Não há dicionário de dados e, portanto, nenhuma definição de dados para o engine de dados
multidimensional.
Rica Estrutura de Dados Multidimensionais
Os arrays multidimensionais do Caché são chamados de “globais”. Os dados podem ser armazenados em uma global com qualquer quantidade de subscripts. Mais do que isso – os
subscripts não possuem um formato/tipo específico e podem conter qualquer espécie de dados.
Um subscript poderia ser um número integral – como 34 –, enquanto outro pode ser um nome
com significado, como “ItensDeLinha” (“LineItems”) – ainda que no mesmo nível de subscript.
Por exemplo, um aplicação de inventário de estoque que fornece informações sobre itens, tamanhos, cores e estampas pode ter uma estrutura como esta:
^Estoque(ítem,tamanho,cor,estampa) = quantidade
Eis alguns exemplos de dados:
^Estoque(“vestido verão”,m,”azul”,”floral”)=3
Com esta estrutura, é muito fácil determinar se há algum vestido tipo verão, no tamanho médio
(m), com cor azul e estampa floral – e tudo isso simplesmente através do acesso àquele nós de
dados. Se uma cliente quer um vestido de verão tamanho médio, mas não tem certeza sobre
qual cor ou estampa deseja, é fácil exibir uma lista de todos aqueles, passando por todos os nós
de dado abaixo:
^Estoque(“vestido verão”,m).
Neste exemplo, todos os nós de dados possuíam uma forma similar (eles armazenavam quantidade), além disso, todos estavam armazenados no mesmo nível de subscript (quatro subscripts)
com subscripts semelhantes (o terceiro subscript era sempre texto designando uma cor). Entretanto, não é necessário que sempre seja assim. Os nós de dados podem ter números ou tipos
diferentes de subscript e eles podem conter tipos diferentes de dados.
Aqui está um exemplo mais complexo de global com dados de uma nota fiscal que possue tipos
diversos de dados armazenados em níveis diferentes de subscript:
^NF(nf
^NF(nf
^NF(nf
^NF(nf
^NF(nf
^NF(nf
^NF(nf
etc.
#,”Cliente”) = Informações do Cliente
#,”Data”) = Data da NF
#,”Ítens”) = Número Ítens da NF
#,”Ítens”,1,”Partes”) = Número de Partes do Ítem 1
#,”Ítens”,1,”Quantidade”) = Quantidade do Ítem 1
#,”Ítens”,1,”Preço”) = Preço do Ítem 1
#,”Ítens”,2,”Partes”) = Número de Partes do Ítem 2
11
Capítulo 2
Múltiplos Elementos de Dados Por Nó
Muitas vezes somente um único elemento de dados é armazenado em um nó, tal como uma data
ou quantidade, mas ocasionalmente, pode ser útil armazenar múltiplos elementos de dados juntos
em um único nó. Isto é especialmente útil quando há um conjunto de dados relacionados que são
freqüentemente acessados juntos. Isto também pode melhorar o desempenho, uma vez que requer
menos acessos à base de dados.
Por exemplo, na nota fiscal acima, cada item incluía um número de partes, quantidade e preços,
todos armazenados em nós separados, porém eles poderiam ser armazenados como uma lista de
elementos em um único nó:
^NF(nf #,”ÍtensDeLinha”,ítem #).
Para tornar isto simples, o Caché apresenta uma função chamada $list(), que pode agregar múltiplos elementos de dados em uma seqüência de bytes de tamanho determinado e desagregá-los
novamente em outro momento. Os elementos, por sua vez, podem conter sub-elementos, etc.
Bloqueio Lógico Promove Alta Concorrência
Em sistemas com milhares de usuários, reduzir conflitos entre processos concorrentes é crítico para
que se obtenha uma alta produtividade. Um dos maiores conflitos é entre transações que tentam
acessar os mesmos dados.
Os processos do Caché não bloqueiam páginas de dados inteiras enquanto realizam atualizações.
Ao contrário, uma vez que transações precisam de freqüente acesso ou modificações para pequenas
quantidades de dados, o bloqueio da base de dados no Caché é feito em um nível de lógica.
Conflitos de base de dados são reduzidos ainda mais através da utilização de operações atômicas
de adição e subtração, as quais não necessitam de bloqueio. (Estas operações são especialmente
úteis no aumento de contadores utilizados para alocar números de identificação e na modificação
de contadores de estatísticas).
Com Caché, transações individuais rodam mais rápido, e mais transações podem rodar ao mesmo
tempo.
Dados de largura Variável em Arrays Esparsos
Porque os dados no Caché são inerentemente de largura variável e são armazenados em arrays
esparsos, o Caché normalmente necessita menos da metade do espaço requerido por um banco
relacional. Além de reduzir os requisitos de disco, o armazenamento de dados compactados melhora o desempenho, uma vez que mais dados podem ser lidos ou gravados com uma única operação
I/O (N.: operação de entrada-saída) e os dados podem serutilizados em memória cache de modo
mais eficiente.
Declarações e Definições Não São Necessárias
Os arrays multidimensionais do Caché não possuem um tipo/forma inerentes, ambos em seus
dados e em seus subscripts. Não é necessária nenhuma declaração, definição ou alocações de
armazenamento. Dados de globais simplesmente são gerados conforme a informação é inserida.
Namespaces
12
No Caché, os dados e códigos são armazenados em arquivos de disco com o nome CACHE.DAT
(somente um por diretório). Cada um desses arquivos contém várias “globais” (arrays multidimensionais). Dentro de um arquivo, o nome de cada global deve ser único, entretanto, arquivos
diferentes podem conter o mesmo nome de global. Pode-se pensar de forma liberal nestes arquivos
como sendo bases de dados.
Ao invés de especificar qual arquivo de base de dados utilizar, cada processo do Caché usa um
“namespace” para acessar os dados. Um namespace é um mapa lógico que mapeia os nomes de
arrays globais multidimensionais e codifica para bases de dados. Se uma base de dados é transferida de um drive ou de um computador para outro, só o mapa de namespace precisa ser atualizado.
O aplicação em si continua sem mudanças.
Normalmente, a não ser por alguma informação de sistema, todos os dados para um namespace são
armazenados em uma única base de dados. Contudo, os namespaces oferecem uma estrutura flexível
que permite o mapeamento arbitrário e, sendo assim, não é incomum que um namespace mapeie
o conteúdo de várias bases de dados, inclusive algumas que estejam em outros computadores.
A VANTAGEM DO CACHÉ
Desempenho: Ao utilizar modelo de dados multidimensional eficiente com técnicas
de armazenamento disperso, ao invés de um labirinto complicado de tabelas bidimensionais, o acesso e a atualização de dados são obtidos com menos operações de I/O
de disco. Menos I/O significa que os aplicações rodam mais rápido.
Escalabilidade: O modelo transacional de dados multidimensionais permite que aplicações baseados em Caché tenham sua escala de uso ampliada para vários milhares de
clientes sem comprometer o alto desempenho. Isto é porque o acesso a dados em um
modelo multidimensional não é significativamente afetado pelo tamanho e complexidade da base de dados em comparação a modelos relacionais. As transações podem
acessar os dados de que necessitam sem realizar junções complicadas ou ficar pulando
de tabela em tabela.
O uso de locks pelo Caché para atualizações, ao invés do bloqueio de páginas físicas
é outra contribuição importante para a concomitância. Do mesmo modo, outra
contribuição importante para este fim é o sofisticado caching de dados do Caché
através de redes.
Desenvolvimento Rápido: O desenvolvimento ocorre muito mais rápido com o
Caché, pois a estrutura de dados oferece um armazenamento natural e de fácil
entendimento a dados complexos, e não requere definições e declarações detalhadas
ou complicadas. O acesso direto a globais é muito simples, permitindo a mesma
sintaxe de linguagem utilizada no acesso a Arrays locais.
Custo-Efetividade: Comparados a aplicações relacionais de porte semelhante,
os aplicações baseados em Caché requerem significativamente menos hardware
e não necessitam de administradores de base de dados. A gestão do sistema e suas
operações são simples.
13
Capítulo 2
ACESSO SQL
SQL é a linguagem de consultas do Caché. Ela é suportada por um conjunto completo de capacidades de banco de dados relacional – incluindo DDL, transações, integridade referencial, triggers,
stored procedures e mais. O Caché suporta acesso através de ODBC e JDBC (usando um driver
baseado em Java puro). Os comandos e consultas SQL também podem ser embutidos no Caché
ObjectScript e dentro de métodos de objetos.
O SQL acessa dados visualizados na forma de tabelas com linhas e colunas. Como os dados do
Caché são, na realidade, armazenados em estruturas multidimensionais eficientes, os aplicações
que utilizam SQL obtêm melhor desempenho com o Caché do que com bases tradicionais de
dados relacionais.
Além da sintaxe SQL padrão, o Caché suporta várias das extensões mais comumente utilizadas
em outros bancos de dados. Sendo assim, muitos dos aplicações baseados em SQL podem rodar
no Caché sem modificações – especialmente aqueles escritos com ferramentas independentes
de banco de dados. Entretanto, store procedure que sejam específicos de certos fornecedores
demandarão algum trabalho e a InterSystems possui tradutores para auxiliar nesta tarefa.
O Caché SQL inclui melhorias de objetos que tornam o código SQL mais simples e intuitivo
de se ler e escrever.
SQL TRADICIONAL
SQL COM EXTENSÃO DE OBJETO
SELECT
SC.NomeCompleto, SM.Descr, MS.Valor,
SI.InvData, SI.InvNumero
SELECT
Cliente->NomeCompleto,
Cliente->VendaMercado
->Descr, Valor,
VendaItem->InvData,
VendaItem
->InvNumero
FROM
VendaPrincipal MS,
VendaItem SI,
VendaProduto SP,
VendaCliente SC,
VendaMercado SM
WHERE
SI.VendaItemID *= MS.VendaItem
AND SP.VendaProdutoID *= MS.Produto
AND SC.VendaClienteID *= MS.Cliente
AND SM.VendasMercadoID *= ‘Martelo’
14
FROM
VendaPrincipal
WHERE
Produto->Descr = ‘Martelo’
Acessando Bancos de Dados Relacionais com o Gateway Relacional do Caché
O Gateway Relacional do Caché (Caché Relational
Gateway) habilita o envio de uma requisição
SQL originada no Caché a ser enviada para outro
banco de dados (relacional) para processamento.
Usando o Gateway, um aplicação do Caché pode
recuperar e atualizar dados armazenados na maioria dos bancos de dados.
Gateway Relacional
Além disso, se as classes das bases de dados
do Caché estiverem compiladas utilizando a
opção CachéSQLStorage, o Gateway permite
aos aplicações Caché utilizar bases de dados
relacionais de forma transparente. Os aplicações,
no entanto, irão rodar mais rápido e serão mais escalonáveis se acessarem a base de dados
pós-relacional do Caché.
A VANTAGEM DO CACHÉ
SQL Mais Rápido: Aplicações relacionais podem desfrutar de uma melhora de desempenho significativa ao utilizarem o Caché SQL para acessar na eficiente base de dados
pós-relacional do Caché.
Desenvolvimento Mais Rápido: No Caché, consultas SQL podem ser escritas de forma
mais intuitiva, utilizando menos linhas de código.
Compatibilidade com Aplicações Relacionais e Geradores de Relatório: Os drivers
ODBC e JDBC nativos do Caché oferecem acesso de alto desempenho à base de dados
do Caché para aplicações relacionais e ferramentas de relatório. O Gateway Relacional
do Caché possibilita que aplicações Caché utilizem SQL para acessar outros bancos de
dados (relacionais).
15
Capítulo 2
OBJETOS DO CACHÉ
O modelo de objeto do Caché é baseado no padrão ODMG. O Caché suporta um conjunto
completo de conceitos de programação de objetos, incluindo encapsulamento, objetos embutidos,
herança múltipla, polimorfismo e coleções.
As linguagens integradas do Caché manipulam estes objetos diretamente. O Caché também exibe
as classes Caché como classes Java, EJB, COM, .NET, e C++. As classes do Caché também podem
ser automaticamente habilitadas para suportar XML e SOAP através de um simples clique na IDE
do Studio. Como resultado, os objetos Caché estão prontamente disponíveis para todas as tecnologias objeto usadas mais comumente.
Há diversas maneiras para um programa fora do Servidor de Aplicações Caché acessar as classes
Caché:
1. Qualquer classe Caché pode ser projetada como uma classe na linguagem nativa. Quando um programa Java, C++, C# ou outro qualquer acessa um objeto Caché, ele ativa um
`template´ da classe na linguagem nativa. O `template´ daquela classe (que é gerado
automaticamente pelo Caché) se comunica com o Servidor de Aplicações Caché para iniciar
métodos no servidor e para acessar ou modificar propriedades. A configuração para objetos
do Caché fica armazenada no Servidor de Aplicações Caché. Para acelerar a execução e reduzir
o número de mensagens, uma cópia dos dados do objeto é memorizada nas atualizações do
cliente e de piggybacks pelo Caché, juntamente, quando possível, a outras mensagens.
2. Uma projeção mais leve pode ser utilizada para classes de base de dados nas quais a classe
do `template´ de linguagem nativa acessa diretamente a base – sem passar pelo Servidor de
Aplicações. O estado do objeto não é salvo no Servidor de Aplicações; as propriedades na
memória só são mantidas no cliente. Esta abordagem oferece uma produtividade significativamente mais alta, mas com menos funcionalidade, já que métodos de instância lateral
de classes do Servidor (isto é, métodos que precisam de acesso às propriedades na memória)
não podem ser iniciados.
3. A tecnologia Jalapeño da InterSystems permite que desenvolvedores Java criem primeiramente uma classe de base de dados em Java, como em qualquer outro POJO (Plain Old Java Object),
na IDE de sua preferência, e, a partir de então, fazer com que o Caché gere automaticamente
um esquema da base de dados e classe do Caché correspondente. Usando esta abordagem,
a classe em Java não é alterada e o aplicação continua acessando suas propriedades e
métodos. O Caché disponibiliza uma biblioteca de classes (“ObjectManager”) com uma API que é utilizada para armazenar e recuperar objetos de base de dados e gerar consultas.
Com cada uma dessas três abordagens, o objeto aparenta ser algo local para o programa do
usuário. O Caché gerencia as comunicações de forma transparente através de call-in ou de TCP.
O `template´ em Java e sua biblioteca de suporte são completamente baseados em Java e podem,
portanto, ser utilizados através da web ou em outros dispositivos específicos de Java.
16
Geradores de Métodos
O Caché inclui várias tecnologias avançadas de objeto que são exclusivas –
uma das quais é chamada geradores de métodos – generators - Um gerador
de métodos é um método executado no momento da compilação, gerando
um código que pode ser rodado quando o programa é executado. Um gerador
de métodos tem acesso às definições de classe, inclusive à definições e parâmetros de propriedades e métodos, permitindo a ele gerar um método que seja
customizado para a classe. Geradores de Método são particularmente eficientes
se combinados com herança múltipla – a funcionalidade pode ser definida em
uma classe de herança múltipla que se customiza para a subclasse.
A VANTAGEM DO CACHÉ
O Caché é completamente habilitado
para objetos, oferecendo todo o poder
da tecnologia de objetos a desenvolvedores de aplicações de processamento
transacional de alto desempenho.
Desenvolvimento Rápido
de Aplicações: A tecnologia de objetos
é uma ferramenta poderosa no aumento
da produtividade de programadores.
Os desenvolvedores podem pensar e
usar objetos – mesmo os extremamente
complexos – de modos simples
e realista, acelerando assim, o processo
de desenvolvimento de aplicações.
Além disso, a modulação inata e a
interoperabilidade dos objetos simplificam a manutenção dos aplicações,
deixando os programadores alavancarem seus trabalhos em vários projetos.
Desenvolvimento Natural: Objetos
de bases de dados aparecem na forma
de objetos nativos à linguagem sendo
utilizada pelo desenvolvedor. Não há
necessidade de escrever códigos tediosos ou decompor objetos em linhas
e colunas e reagrupá-los mais tarde.
17
Capítulo 2
BUSCA DE TEXTO COM RECONHECIMETO DE PALAVRAS
O Caché suporta buscas livres de texto, nas quais as consultas podem procurar por texto
contendo palavras de interesse, mesmo que as palavras existentes no texto sejam variações
das palavras pesquisadas.
Para utilizar a busca com reconhecimento de palavras, o campo de texto deve ser indexado.
Isso ocorre seguindo os seguintes passos:
1. Inicialmente, palavras distintas no campo de texto são identificadas.
2. Palavras que sejam tão comuns a ponto de oferecer pouco valor de pesquisa são removidas
(ex. palavras como “o/a” ou “para” são removidas).
3. As palavras restantes são reduzidas às suas raízes (ex.: “buscando” se torna “buscar”
e “flores” se torna “flor”).
4. As palavras resultantes são indexadas.
Em buscas com reconhecimento de palavras, o texto pesquisado é geralmente primeiro processado
de forma semelhante, e então, o índice resultante é utilizado para produzir combinações.
Word-Aware Indexing
I am searching for some text
I
am
searching
for
some
text
Quebra em palavras
X X
searching
X
some
X
text
Eliminação de ruído
I
am
search
18
for
for
Redução em raízes
Índices de reconhecimento de palavras são mantidos por atualizações de objeto e de SQL.
A busca é mais comumente realizada através de consultas SQL, embora códigos procedurais
possam usar os índices diretamente. Tais consultas podem incluir lógicas E/OU para pesquisas
mais sofisticadas.
Algoritmos de reconhecimento de palavras são específicos da língua natural que está sendo
utilizada. A busca com reconhecimento de palavras está disponível para um amplo leque de
línguas naturais, incluindo alemão, espanhol, francês, inglês, italiano, japonês e português.
Outras línguas estão sendo adicionadas.
Busca com Reconhecimento de Palavras
Where Descrição
%Contém (‘pesquisar’)
O Caché encontra “pesquisar”,
“pesquisado”, “pesquisando”,…
Where Descrição
%Contém (`close´)
O Caché encontra `close´, `closed´, ...
Mas não `closet´ou `disclose
A VANTAGEM DO CACHÉ
Poderosas Buscas de Textos Não Estruturadas: Textos não estruturados, como anotações médicas ou documentos, podem ser facilmente pesquisados através de palavraschave ou palavras relacionadas.
Pesquisas Extremamente Rápidas: A união de reconhecimento de palavras e da tecnologia bit-map do Caché torna possível a realização de buscas de quantidades massivas
de texto em uma fração de segundos.
19
Capítulo 2
INDEXAÇÃO DE BIT-MAP TRANSACIONAL
O Caché oferece de forma exclusiva uma indexação de Bit-Map Transacional, a qual pode
melhorar de forma radical o desempenho de consultas complexas, resultando em um desempenho
rápido para consultas a datawarehouse.
Índice Tradicional de Propriedade:
“Tipo de Animal de Estimação”
Índice Bit-Map de Propriedade:
“Cor de Cabelo”
O desempenho do banco de dados depende
de forma crítica da existência de índices nas propriedades que são freqüentemente usadas nas buscas realizadas na base de dados. A maior parte dos
bancos de dados usa índices que, para cada valor
possível da coluna ou da propriedade, mantêm
uma lista das identificações para as linhas/objetos
que possuem aquele valor. Um índice bit-map
é outro tipo de índice. Índices bit-map contêm um
bitmap para cada valor possível de uma coluna/
propriedade, com um bit para cada linha/objeto
que é armazenado. Um valor de bit igual a 1
significa que a linha/objeto tem aquele valor para
a coluna/propriedade.
A vantagem de índices bit-map é que consultas
complexas podem ser processadas realizando-se
operações de tipo booleano (E, OU) nos índices
– determinando de forma eficiente exatamente
quais instâncias (linhas) se encaixam nas condições
de consulta sem a necessidade de pesquisar toda
a base de dados. Índices bit-map podem com
frequência impulsionar o tempo de resposta de consultas que buscam grandes volumes de dados
por um fator 100 vezes maior.
Os bit-maps padecem tradicionalmente de dois problemas: a) eles podem ser penosamente devagar
para se atualizar em bases de dados relacionais, e b) eles podem ocupar espaço demais de armazenamento. Assim, eles são raramente utilizados em aplicações de processamento transacionais.
O Caché introduziu uma nova tecnologia – a Indexação de Bit-Map Transacional – que alavanca
estruturas de dados multidimensionais para eliminar estes dois problemas. Atualizar estes bit-maps
é normalmente mais rápido do que os índices tradicionais, e eles utilizam técnicas sofisticadas
de compressão para reduzir radicalmente o espaço de armazenagem necessário. O Caché também
suporta técnicas sofisticadas de “bit-slicing” (fatiamento de bits). Como resultado, tem-se
bit-maps ultra-rápidos, que podem freqüentemente ser utilizados para pesquisar milhões de
registros em uma fração de segundo em uma base de dados online de processamento de transações. Business intelligence e aplicações de datawarehousing podem trabalhar com dados “reais”.
O Caché oferece tanto índices bit-map tradicionais, quanto transacionais. Além disso, o Caché
suporta índices multi-coluna. Por exemplo, um índice de Estado e ModeloDeCarro pode identificar
rapidamente todos que possuem um modelo específico de carro registrado em um estado específico.
20
A VANTAGEM DO CACHÉ
Consultas Radicalmente Mais Rápidas: Utilizando as técnicas de bit-map transacional,
os usuários podem realizar buscas ultra-velozes de grandes bases de dados – muitas
vezes, milhões de dados podem ser pesquisados em uma fração de segundo – em um
sistema utilizado primordialmente para processamento de transações.
Análise de Dados em Tempo Real: O Índice Bit-Map Transacional permite a análise
de dados em tempo real nos dados disponíveis mais recentes.
Menor Custo: Não há necessidade de um segundo computador dedicado ao suporte
de decisões e ao datawarehouse. Tão pouco há a necessidade de operações diárias para
se transferir os dados a um segundo sistema deste tipo ou de administradores de base
de dados para dar suporte a isto.
Escalabilidade: A velocidade de bit-maps transacionais otimiza a possibilidade de
se montar sistemas com quantidades enormes de dados que precisam ser mantidos
e pesquisados de forma periódica.
21
Capítulo 2
ENTERPRISE CACHÉ PROTOCOL PARA SISTEMAS DISTRIBUÍDOS
Desempenho com Escalabilidade em Sistemas Distribuídos
O Enterprise Cache Protocol (ECP) é uma tecnologia de desempenho extremamente performática
e com escalabilidade que permite que computadores, em um sistema distribuído, utilizem as
bases de dados uns dos outros. O uso do ECP não requer mudanças de aplicações – estes últimos
simplesmente tratam as bases de dados como se fossem bases locais.
O ECP funciona assim: cada Servidor de Aplicações Caché inclui seu próprio Servidor de Dados
Caché, que pode operar em dados residentes em seus próprios sistemas de disco ou em blocos que
foram transferidos a ele a partir de outro Servidor de Dados Caché pelo ECP. Quando um cliente
solicita uma informação mantida num Servidor de Dados remoto, o Servidor de Aplicações tenta
satisfazer a solicitação a partir do seu Caché local. Caso não tenha sucesso, ele solicitará a informação necessária ao Servidor de Dados remoto. A resposta incluirá o(s) bloco(s) da base de dados
onde aquela informação foi armazenada. Estes blocos
Enterprise Caché Protocol
são armazenados no cache do Servidor de Aplicações,
onde eles ficam disponíveis para todos os aplicações
rodando naquele Servidor. O ECP gerencia automaticamente a consistência do cache através da rede e propaga
as mudanças de volta para os Servidores de Dados.
Os benefícios de desempenho e escalabilidade
obtidos com o ECP são muitos. Os clientes desfrutam de respostas rápidas, pois se utilizam com
freqüência de dados armazenados em cache localmente. E o caching reduz em muito o tráfico de
rede entre a base de dados e os servidores de aplicações, permitindo que qualquer rede possa suportar
muito mais servidores e clientes. Contudo, se por
um lado a maioria dos aplicações se beneficia do
ECP, por outro, há alguns cujas arquiteturas não
suportam prontamente uma escalabilidade deste
porte. A realização de um benchmarking é recomendada, e, geralmente, alguns ajustes simples podem
aumentar o desempenho.
22
A VANTAGEM DO CACHÉ
Escalabilidade Massiva:
O Enterprise Cache Protocol
do Caché permite o acréscimo
de servidores de aplicações
conforme o crescimento de
uso. Cada um destes servidores
usa a base de dados como se ela
fosse uma base local. Se a produtividade de disco tornar-se um
gargalo, mais Servidores de Dados
podem ser adicionados, sendo que
a base de dados será dividida em
partições lógicas.
Maior Disponibilidade:
Como os usuários estão espalhados
entre múltiplos computadores,
a falha de um Servidor de Aplicações afeta um número menor
de usuários. Caso um Servidor
de Dados trave e tenha que ser
reinicializado, ou caso haja uma
interrupção temporária na rede,
os Servidores de Aplicação podem
continuar o processamento sem
qualquer efeito perceptível além
de uma pequena pausa. Configurar Servidores de Dados como
um cluster de hardware para
a prevenção de falhas em servidores de dados de reserva pode
aumentar a disponibilidade de
forma significativa.
Fácil de Usar – Sem Modificação de Aplicações
O uso do ECP é invisível para as aplicações. Aquelas que são escritas para
rodar em um único servidor rodam em um ambiente de servidores múltiplos
sem alteração. Para utilizar o ECP, o gerente do sistema simplesmente identifica um ou mais Servidor de Dados para um Servidor de Aplicações. A partir
de então, mapeia-se o Namespace para indicar que as referências a algumas ou
a todas as globais (ou a partes de globais) se referem àquele Servidor
de Dados remoto.
Menores Custos: Uma grande
quantidade de computadores
de baixo custo pode ser combinada para formar um sistema
especialmente forte que
suporta processamento pesado –
“grid computing”.
Uso Invisível: Os aplicações não
precisam ser especificamente
escritos para o ECP – aplicações
Caché tomam vantagem do ECP de
forma automática, sem mudanças.
Flexibilidade de Configuração
Cada sistema Caché pode funcionar tanto quanto um Servidor de Aplicações,
quanto como um Servidor de Dados para outros sistemas. O ECP suporta
qualquer combinação de Servidores de Aplicações e de Dados, bem como
qualquer topologia ponto-a-ponto de até 255 sistemas.
23
Capítulo 2
TOLERÂNCIA A ERROS
Mesmo nos ambientes mais rigorosos, eventos inesperados podem ocorrer – falha de hardware,
falta de energia, ou algo mais severo quanto inundações ou outro desastre natural - hospitais,
telecomunicações e outras operações críticas não podem, no entanto, se dar ao luxo de estar
“fora do ar”. Para satisfazer a padrões tão exigentes, o Caché foi projetado para se recuperar
de interrupções de forma elegante, oferecendo uma variedade de prevenções de falha e outras
opções para reduzir ou eliminar o impacto aos usuários.
O Caché Write-Image Journaling e outros recursos de integridade garantem a integridade
da base de dados na maioria das falhas de hardware – inclusive em caso de falta de energia –,
permitindo uma recuperação rápida, ao mesmo tempo em que minimiza o impacto ao usuário.
O Caché também oferece opções de configuração avançada de alta disponibilidade para reduzir
ainda mais ou eliminar o impacto ao usuário, incluindo:
<Fail-over Clusters
<Shadow Servers
<Enterprise Caché Protocol distríbuido
Fail-over Clusters
Ao utilizar um hardware com cluster fail-over, os servidores de dados compartilham acesso
aos mesmos discos, embora somente um deles esteja rodando o Caché em um determinado
momento. Caso o servidor ativo falhe, o Caché é automaticamente inicializado em outro
servidor que passa a ser responsável pelo processamento. Os usuários podem se logar imediatamente no novo servidor.
Shadow Servers
Os Shadow Servers do Caché são, na verdade, servidores reserva que estão conectados via TCP.
O servidor primário envia constantemente um registro lógico de atualizações da base de dados
para o Shadow Server, este que sempre possui uma cópia “quase-atual” da base de dados.
A mudança para o Shadow Server é menos automatizada do que para os fail-over clusters, mas
a sobrevivência é melhorada, pois o hardware não está conectado fisicamente – o Shadow Server
pode estar até mesmo em outro local.
Um Shadow Server pode ser mesclado a um fail-over Cluster, com propósito de melhorar ainda
mais a tolerância a falhas.
ECP Distribuído
Para sistemas distribuídos utilizando ECP, na ocorrência de uma interrupção temporária de rede
ou de um travamento do Servidor de Dados e reinicialização, os servidores de aplicação tentam
se reconectar. Caso a reconexão seja bem sucedida dentro de um prazo especifico de tempo,
os Servidores de Aplicações reenviam qualquer solicitação não completada e as operações
continuam sem efeitos perceptíveis para o usuário, além de uma ligeira pausa.
Se um Servidor de Aplicações ECP falhar, somente os usuários que estejam no Servidor de Aplicações com problema serão afetados. Eles poderão então se logar em outro Servidor de Aplicações
para continuar trabalhando.
24
Um Servidor de Dados ECP é freqüentemente configurado como um Fail-over
Cluster. Se o Servidor de Dados primário travar, o servidor reserva assume
as funções do Servidor de Dados que falhou, permitindo operações sem interrupções, com o usuário passando apenas por uma leve pausa.
Um Cluster ECP Fail-Over
A VANTAGEM DO CACHÉ
Bullet-Proof: O Caché WriteImage Journaling e outros
recursos de integridade garantem,
na maioria dos tipos de falha de
hardware, a integridade da base
de dados – inclusive em casos de
falta de energia.
Configurações de Tolerância a
Falhas de Alta Disponibilidade:
O uso dos Shadow Servers do
Caché, do ECP e/ou de Fail-over
Clusters permite a recuperação
rápida em casos de falha, ao mesmo
tempo em que minimiza, ou em
alguns casos elimina, seu impacto
no usuário.
25
Capítulo 2
26
MODELO DE SEGURANÇA
O Caché possui um modelo de segurança moderno, desenhado para dar suporte ao desenvolvimento de aplicações de três maneiras:
Protegendo o ambiente Caché propriamente dito.
Tornando fácil aos desenvolvedores integrar recursos de segurança em
seus aplicações.
Garantindo que o Caché funcione efetivamente e sem comprometer as
tecnologias de segurança do ambiente operacional.
O Caché fornece estas capacidades de segurança ao mesmo tempo em que minimiza o ônus
no desempenho de aplicações.
Usuários, Perfis, Recursos e Privilégios
Existe uma gama de recursos (tais como bases de dados, aplicações e serviços) que os usuários
devem receber permissão (como LER, GRAVAR ou USAR) do Administrador de Segurança
para poder utilizá-los. Além dos recursos definidos no sistema, o Administrador de Segurança
pode criar recursos específicos de aplicações e utilizar os mesmos mecanismos para conceder e
checar permissões.
Para simplificar, aos usuários normalmente são atribuídos um ou mais “perfis” (ex. “TecDeLab”
ou “Salários”). O Administrador de Segurança concede então, privilégios para um recurso específico àqueles perfis e não a usuários individuais. O usuário obtém todos os privilégios concedidos
aos perfis que foram atribuídos a ele.
Cada processo possui um nome de usuário (username) associado, mesmo que seja somente
`UnkownUser´. O nome de usuário é estabelecido durante a “autenticação”. Um exemplo
simples de autenticação é a entrada de um username e senha por um usuário no sistema,
e a checagem realizada por este último para confirmar que a senha está correta. Após a autenticação, o username é atribuído ao processo e as permissões associadas àquele nome de usuário são
concedidas. (Um “usuário” não necessariamente é um ser humano. Ele poderia ser, por exemplo,
um dispositivo de medição gerando dados ou um aplicação rodando em outro sistema que se
conecta ao Caché). Se o usuário não passa pelo processo de autenticação , ele recebe o nome
de `UnkownUser´, o qual só concede àquele processo as permissões atribuídas a qualquer usuário.
A conexão ao Caché é controlada por um conjunto de Serviços. Cada Serviço especifica se
é público (o que significa que todos podem utilizá-lo) ou se requere autenticação e, passados
os testes de verificação desta, se o usuário possui os privilégios de acesso necessários. Os Serviços
podem ainda ser desabilitados individualmente, de modo que o acesso seja negado a todos.
A atribuição e gerenciamento de privilégios normalmente é feita pelo Portal de Administração
do Caché.
27
Capítulo 2
Perfis Atribuídos por Aplicações
Muitas vezes é útil que um usuário receba privilégios adicionais de forma temporária, ao invés
de tê-los atribuídos de forma permanente. Por exemplo, ao invés do Administrador de Segurança
conceder um amplo conjunto de privilégios a um usuário, tal como a capacidade de acessar
e modificar a base de dados de pagamento de salários, ele poderia conceder ao usuário apenas
o privilégio de acesso àquele aplicação. Este, por sua vez, poderia então elevar os privilégios
de usuário enquanto está sendo utilizado.
Para conseguir elevar um usuário, perfis podem ser atribuídos às aplicações. Quando aquela aplicação é acessada, o usuário adquire perfis adicionais temporariamente. Os perfis adicionais podem
ser simplesmente uma lista adquirida por todos aqueles autorizados a utilizar a aplicação, ou
podem também ser mais customizados, baseados nos perfis que o usuário já possui.
Este recurso é particularmente útil para aplicações baseados em browser usando o CSP (Caché
Server Pages). Com o CSP, uma parte de qualquer URL especifica um nome de aplicação.
Após a autenticação e a verificação de que o usuário está autorizado a usar aquele aplicação CSP,
o usuário recebe perfis adicionais temporários designados àquele aplicação enquanto persistir
a solicitação daquela página.
O Administrador de Segurança pode ainda designar rotinas específicas como sendo capazes
de realizar elevação de perfil para receber perfis adicionais de aplicações específicos (após passarem
por testes de segurança especificados pelo usuário). Esta facilidade é controlada rigidamente e
é por este mecanismo que aplicações não CSP realizam a elevação de perfil.
Autenticação
O Caché suporta vários níveis de autenticação, variando de nenhuma autenticação ao uso
de senhas, até o uso de protocolo Kerberos para autenticar a identidade de usuários. O Kerberos
fornece uma autenticação muito forte e possui a vantagem de ser rápido, ter escalabilidade e ser
fácil de utilizar. Com o Kerberos, as senhas nunca são transmitidas através da rede, o que oferece
uma medida extra de segurança.
O Caché suporta a implementação de single sign-on.
28
Criptografia da Base de Dados
O Caché suporta duas formas de criptografia da base de dados:
<O Administrador de Segurança pode designar um ou mais arquivos CACHE.DAT
(bases de dados) para que sejam criptografados no disco. Tudo contido nestes arquivos é
então criptografado.
<Desenvolvedores podem usar funções de sistema para criptografar/descriptografar
dados, os quais podem então ser armazenados na base de dados ou ser transmitidos. Este recurso pode ser utilizado para criptografar dados sensíveis para que sejam protegidos de outros usuários que possuem acesso de leitura à base de dados, mas não possuem a chave (de criptografia).
Por definição, o Caché criptografa dados com uma implantação do Padrão de Criptografia
Avançada (Advanced Encryption Standard, ou AES), um algoritmo simétrico que suporta
chaves de 128, 192 ou 256 bits. As chaves de criptografia são guardadas em um local protegido
da memória. O Caché oferece capacidades completas de gerenciamento de chaves.
O arquivo de journal também pode ser criptografado.
Auditoria
Muitos aplicações, especialmente aqueles que devem satisfazer as regulamentações governamentais, tais como TISS (Brasil), HIPAA ou Sarbanes-Oxley (EUA), precisam oferecer auditoria
segura. No Caché, todos os eventos de sistema e de aplicações são registrados em um log que só
aceita adições ao registro existente (append-only), e o qual é compatível com qualquer consulta
ou ferramenta de relatórios que utilize SQL.
29
Capítulo 3
Capítulo 3: Servidor de Aplicações Caché
O servidor de Aplicações Caché oferece capacidades avançadas de programação de objetos,
fornece caching sofisticado de dados e integra acesso fácil a uma variedade de tecnologias.
O Servidor de Aplicações Caché torna possível desenvolver aplicações sofisticados de forma
rápida, bem como operá-los com alto desempenho – além de suportá-los com facilidade.
Mais especificamente, o Servidor de Aplicações Caché oferece:
<Máquina Virtual Caché que roda três linguagens de desenvolvimento tipo script – Caché ObjectScript, Caché Basic, e Caché MVBasic.
<Acesso aos Servidores de Dados Multidimensionais do Caché no mesmo computador
ou em outras máquinas com roteamento invisível.
<Software de conectividade com client-side caching para permitir o acesso rápido a
Objetos Caché a partir de todas as tecnologias utilizadas mais comumente, incluindo Java, C++, C#, COM, .NET e Delphi. O Caché automaticamente realiza o networking entre o cliente e o Servidor de Aplicações.
<Compatibilidade com SOAP e XML.
<Acesso SQL utilizando ODBC e JDBC, incluindo caching sofisticado no cliente e no servidor de aplicações para alto desempenho.
<Acesso a bancos de dados relacionais.
<Caché Server Pages para aplicações web fáceis de programar e de alta performance.
<Caché Studio – uma IDE para desenvolver e depurar aplicações rapidamente com o Caché.
<O código para as Linguagens de Script é armazenado na base de dados e pode ser modifi-
cado online, com as mudanças sendo propagadas automaticamente para todos os servi-
dores de aplicações.
MÁQUINA VIRTUAL CACHÉ E LINGUAGENS DE SCRIPT
No núcleo do Servidor de Aplicações Caché está a Máquina Virtual Caché, que é extremamente
veloz e suporta as linguagens script do Caché.
30
<O Caché ObjectScript é uma linguagem poderosa e de fácil aprendizado, com estrutura de dados extremamente flexível.
<O Caché Basic oferece um modo fácil para que programadores de Visual Basic comecem a utilizar o Caché. De forma semelhante ao VBScript, o Caché Basic suporta objetos e é expandido para ter acesso direto aos Arrays Multidimensionais Caché.
<O Caché MVBasic é a variante da linguagem de programação Basic utilizada em aplica-
ções MultiValue (Pick). O MVBasic foi expandido para ter suporte a objetos e ter acesso direto aos Arrays Multidimensionais Caché.
O acesso à base de dados dentro da Máquina Virtual Caché é altamente
otimizado. Cada processo de usuário possui acesso direto às estruturas de dados
multidimensionais por meio de chamadas à memória compartilhada, a qual acessa
uma base de dados cache compartilhada. Todas as demais tecnologias (Java, C++,
ODBC, JDBC, etc.) se conectam através da Máquina Virtual Caché para acessar
a base de dados.
Interoperabilidade Completa
Como o Caché ObjectScript, o Basic e o MVBasic estão todos instalados na
mesma Máquina Virtual Caché, eles possuem interoperabilidade completa:
<Qualquer método de objeto pode ser escrito em qualquer linguagem –
a mesma classe pode usar todas as três linguagens.
<O uso das funções de cada uma das linguagens pode acessar um código escrito nas demais linguagens.
<Eles compartilham variáveis, Arrays e objetos.
Desenvolvimento Rápido/Disponibilização Flexível
Os programadores podem, em quase todos os casos, desenvolverem aplicações
mais rapidamente, sendo que estes aplicações rodarão significativamente mais
rápidos e com maior escalabilidade se a maior parte possível do código for escrita
nestas linguagens de programação (o que permite que eles rodem na Máquina
Virtual Caché). Além disso, tal código não requere mudanças na troca
de hardware ou de sistemas operacionais. O Caché lida com as diferenças
de hardware e de sistema operacional de forma automática.
Linguagens Script
A VANTAGEM DO CACHÉ
Desenvolvimento Rápido de Aplicações: O desenvolvimento
de aplicações complexas com
o Caché ObjectScript é radicalmente
mais rápido do que com qualquer
outra grande linguagem – muitas
vezes de 10 a 100 vezes mais
rápido. Mais rápido significa dizer
que os projetos têm uma chance
melhor de sucesso – com menos
programadores – e podem ser
ajustados mais rapidamente,
conforme as aplicações necessitem
de modificações.
Curva de Aprendizado Mais Curta:
O Basic é talvez a linguagem
de computador mais conhecida
do mundo. Desenvolvedores que
conhecem Visual Basic podem
começar a escrever código em
Basic de forma instantânea –
o modelo de objeto Caché é
aprendido facilmente.
Mais Rápido e com Mais Escalabilidade: A Máquina Virtual Caché,
com seu acesso direto à base de
dados, oferece aplicações mais
rápidas que podem ter seu uso
ampliado a dezenas de milhares
de usuários utilizando hardware
de baixo custo.
Flexibilidade: O código que roda
na Máquina Virtual Caché pode
rodar em outros hardwares e em
outros sistemas operacionais sem
mudanças. O código é armazenado
na base de dados e automaticamente
propagado para os Servidores
de Aplicações.
31
Capítulo 3
CACHÉ OBJECTSCRIPT
O Caché ObjectScript é uma poderosa linguagem de programação orientada a objetos e
desenhada para permitir o desenvolvimento rápido de aplicações de base de dados.
Aqui estão algumas das principais características da linguagem.
Estrutura Geral
O Caché ObjectScript é orientado por comandos, e tem portanto, uma sintaxe do tipo:
set x=a+b
do rotacionar (a,3)
if (x>3)
Há um conjunto de funções integradas do sistema que são especialmente eficientes na manipulação de textos. Todos os nomes destas funções sempre se iniciam por um único caractere “$”
para distingui-los dos nomes de variáveis e de Arrays Por exemplo:
$extract(string,from,to)
seqüência $length(string)
// obter um conjunto de caracteres de uma // determinar o comprimento de uma
seqüência
As expressões utilizam precedência de operação da esquerda para direita assim como na maioria
das calculadoras portáteis, exceto nos casos em que os parênteses alteram a ordem de avaliação.
Armazenamento Flexível de Dados
Uma das características mais exclusivas do Caché ObjectScript é sua armazenagem altamente
flexível e dinâmica de dados. Os dados podem se armazenados em:
<Propriedades de objetos.
<Variáveis.
<Arrays esparsos multidimensionais, que permitem todo tipo de dados para os subscripts.
<Arquivos de base de dados (“globais”), que são Arrays esparsos multidimensionais.
Com raras exceções, qualquer lugar da linguagem onde uma variável possa ser inserida, também
permite a utilização de um array uma propriedade de objeto ou uma referência global.
Na maioria das linguagens de informática, os “tipos” são extensões de conceitos de armazenamento de hardware (interger,float,char,etc.) Entretanto, o Caché ObjectScript tem a filosofia
de que seres-humanos não pensam utilizando estes tipos de armazenamento, e que estes “tipos”
infocêntricos simplesmente impedem o desenvolvimento rápido de aplicações. A necessidade
de utilizar declarações e afirmações de dimensão introduz bem mais erros do que ajuda a prevenir
(ex. erros do tipo extrapolação de 2 bytes integral, ou quando uma seqüência extrapola sua alocação de memória e corrompe outro armazenamento). Contudo, a digitação de objetos, tais como
Pessoa, Nota Fiscal ou Animal, é vista como sendo altamente valiosa e consistente com o modo
de pensar dos seres-humanos.
32
Assim, no Caché ObjectScript, as propriedades de objeto são fortemente tipificadas, mas os outros três tipos de armazenamento (variáveis, Arrays e nós de
globais) são entidades completamente polimórficas e sem um tipo especial, que
não precisam ser declaradas ou definidas. Eles simplesmente passam a existir conforme são utilizados e se moldam às necessidades de dados daquilo que estejam
armazenando e da forma como estão sendo utilizados em uma expressão. Mesmo
Arrays não requerem nenhuma especificação de tamanho, dimensão ou tipo
de subscripts/dados. Por exemplo, um desenvolvedor pode criar um Array
chamado Pessoa simplesmente atribuindo:
Set Pessoa (“Silva”, “João”)= “Eu sou uma pessoa boa”
Neste exemplo, os dados foram armazenados num Array bidimensional
utilizando dados seqüenciais para os subscripts. Outros módulos de dados
neste Array poderiam ter um número diferente de dimensões e poderiam misturar
seqüência, integrais ou outro tipo de dados para os subscripts. Por exemplo,
podem-se armazenar dados em:
abc(3)
abc(3,-45.6,”Sim”)
abc(“Contar”)
todos no mesmo array.
Acesso Direto à Base de Dados
Uma referência à base de dados (“uma referência à global”) é essencialmente uma referência
de Array multidimensional precedida pelo caractere circunflexo “^”. Este caractere indica que
se trata de uma referência de dados armazenados na base ao invés de dados privados de processos
temporários. Cada um destes Arrays de base de dados é chamado de “global”.
Assim como no caso de Arrays multidimensionais e variáveis, não é necessária nenhuma declaração
ou definição ou reserva de espaço de armazenamento para acessar ou guardar os dados na base
de dados; dados em globais simplesmente passam a existir conforme os dados são armazenados.
Por exemplo, para se armazenar dados na base, pode-se escrever:
set ^Pessoa(“Silva”,”João”)= ”Eu sou uma pessoa muito boa”
E mais tarde, recuperar-se o código conforme:
set x=^Pessoa(“Silva”,”João”)
O programador tem total flexibilidade sobre como estruturar estes Arrays de dados em globais.
(vide o Modelo de Dados Multidimensionais).
33
Capítulo 3
Referências de Objetos
Os objetos Caché implementam o modelo de dados ODMG com poderosas extensões.
No Caché ObjectScript, uma referência a objetos é utilizada para se acessar um objeto.
(uma “oref” é geralmente uma variável cujos valores especificam qual objeto na memória se está
fazendo referência). A oref é seguida por um ponto e, a seguir, pelo nome de uma propriedade
ou método. Referências de objetos podem ser utilizadas onde quer que se possa usar uma
expressão. Por exemplo:
set nome=pessoa.Nome
// “pessoa” é a variável cujo valor é uma oref
// o nome da pessoa é colocado na variável “nome” se (pessoa.Idade>x) // veja se a idade da pessoa é maior que “x” set dinheiro=nf.Total // “Total()” é um método que calcula a soma de
// todas as notas fiscais (nf) de ítens de linha
Métodos também podem ser executados através de um comando tipo “DO” quando nenhum
valor resultante é necessário. Por exemplo:
do parte.Incremento()
// “Incremento()” é um método, cujo
valor de
// retorno, se houver, não interessa
A oref não é a mesma coisa que um identificador (ID) de objeto da base de dados; ela é utilizada
para recuperar e armazenar um objeto da base de dados. Uma vez estando na memória, o objeto
recebe um valor oref reutilizável, que é então usado para acessar os dados do objeto. Na próxima
vez que aquele mesmo objeto da base de dados for trazido à memória ele provavelmente receberá
um valor oref diferente.
34
Acesso HTML e SQL
HTML para aplicações Web e SQL podem ser embutidos no código Caché ObjectScript.
Código de Chamada
Em algumas linguagens de objeto, todo o código precisa ser parte de algum método. Esta restrição
não existe com o Caché Object Script – o código pode ser chamado diretamente ou pode ser
chamado através de sintaxe de objeto.
O código normalmente é chamado utilizando um comando do tipo DO.
do rotacionar(a,3)
Código que resulte em um valor também pode ser chamado na forma de uma função. Por exemplo:
set x=a+$$insert(3,y)
Chama o procedimento ou sub-rotina “insert”, escrito por um programador. Um código pode
ser também chamado na forma de um método de objeto.
set dinheiro=nf.Total()
nf) parte. Incremento()
// Total() dá o valor total das notas fiscais // “Incremento()” é um método, cujo valor,
// se houver, não interessa
Tanto a chamada por valor quanto a chamada por referência são suportadas por parâmetros.
35
Capítulo 3
Rotinas
O código do Caché ObjectScript é fundamentalmente organizado em um conjunto de “rotinas”.
Cada rotina (normalmente até 32KB em tamanho) é atômica, isto é, pode ser editada, armazenada
e compilada de forma independente. As rotinas são conectadas de forma dinâmica em tempo de
execução não há um passo extra separado da ligação de rotinas para o programador. O código de
uma rotina é armazenado na base de dados, assim, rotinas podem ser paginadas de forma dinâmica
em toda a rede, ao invés de terem de ser instaladas em cada computador.
Dentro de uma rotina, o código é organizado na forma de um conjunto de procedimentos e ou
sub-rotinas. (Um método de objeto é um procedimento, mas é acessado com uma sintaxe diferente).
Quando se solicita um código que está dentro da mesma rotina, somente o nome do procedimento
ou da sub-rotina é necessário. Caso contrário, o nome da rotina deve vir junto.
do transferir() total^nf() // chama “transferir” na mesma rotinado // chama “total” na rotina “nf” (nota fiscal)
Um procedimento (ou sub-rotina) que tenha um valor resultante de interesse deve ser solicitado
utilizando a sintaxe de função “$$”
set x=$$total^nf()
// chama o mesmo procedimento “total” mas usa o valor retornado
Rotinas podem ser compiladas e editadas através do Caché Studio.
36
Métodos de Objeto
Definições de classe e seus códigos de métodos são armazenados em globais, sendo
que o Class Compiler compila cada classe em uma ou mais rotinas. Cada método é simplesmente
um procedimento em uma rotina, embora só possa ser solicitado através da sintaxe de objeto.
Por exemplo, se a classe Paciente define um método Admite e a variável Pac identifica um objeto
Paciente específico, então solicitaríamos o método Admite para aquele objeto com a seguinte
sintaxe:
do Pac.Admite() set x = Pac.Admite() // Chama o método admit para Paciente
// Chama o mesmo método, mas usa o
valor retornado
Procedimentos e Variáveis Públicas/Privativas
Um procedimento é um bloco de códigos dentro de uma rotina que é similar a uma função em
outras linguagens. Um procedimento consiste em um nome, uma lista de parâmetros formal, uma
lista de variáveis públicas e um bloco de código delimitado por “{ }”. Por exemplo:
Admite(x,y)[nome,regnum] { ...o código entra aqui }
No Caché ObjectScript, algumas variáveis são públicas (comuns) e outras são privativas de um
procedimento em particular. Cada variável utilizada dentro de um procedimento é considerada
privativa daquele procedimento a menos que esteja listada na lista pública. No exemplo acima,
“nome” e “regnum” acessam as variáveis públicas com aqueles nomes, ao passo que todas as
outras demais variáveis existem. somente para esta solicitação, deste procedimento. Variáveis cujos
nomes se iniciam pelo caractere “%” são sempre implicitamente públicas.
Procedimentos não podem ser acumulados, embora um procedimento possa conter sub-rotinas.
Sub-rotinas
Rotinas podem conter sub-rotinas, que são mais leves que procedimentos. Uma sub-rotina pode
conter uma lista de parâmetros e pode ter um valor de resultado, mas ela não possui uma lista
pública ou uma estrutura de blocos formal. Sub-rotinas podem estar embutidas em procedimentos ou podem estar no mesmo nível que um procedimento em uma rotina.
Sub-rotinas permitem a solicitação de código utilizando-se do mesmo conjunto de variáveis
públicas/privativas que o solicitante – e elas podem ser solicitadas mais rapidamente.
Uma sub-rotina embutida em um procedimento usa o mesmo escopo de variáveis que o procedimento em si e só pode ser solicitada a partir de dentro daquele procedimento. Referências de
variável a uma sub-rotina que não seja parte de um procedimento são todas as variáveis públicas.
37
Capítulo 3
BASIC
O Basic é talvez a linguagem de programação mais conhecida do mundo. No Caché, o Basic
foi expandido para suportar acesso direto às estruturas de dados centrais do Servidor de Aplicações – Arrays multidimensionais -, bem como a outros recursos do Servidor de Aplicações Caché.
Ele dá suporte direto ao Caché ObjectModel utilizando a sintaxe do Visual Basic, além de ser
executado na Máquina Virtual Caché.
O Basic pode ser utilizado tanto como métodos de classes, quanto como rotinas Caché (vide
a descrição de rotinas do Caché Object Script). O Basic pode solicitar o Caché Object Script
(e vice-versa) com ambas as linguagens acessando as mesmas variáveis, Arrays e objetos na
memória de processo.
Arrays podem ser expandidos para que sejam bem mais poderosos:
<A presença do caractere “^” antes do nome de um Array indica uma referência a um
<Array multidimensional de base de dados; isto é, Arrays persistentes que são compartilha-
dos com outros processos.
<Subscripts podem ser de qualquer tipo de dados – seqüências, integers, números
decimais, etc.
<Dados podem ser armazenados em níveis múltiplos de subscript em um mesmo
Array – por exemplo, dados poderiam ser armazenados em A (“cores”) e em A (“cores”,3).
<Arrays não precisam ser declarados e são sempre esparsos – O Caché só reserva espaço conforme os nós são inseridos.
<Uma função Traverse permite a identificação do subscript seguinte (ou anterior) em
um dado nível de subscript.
Outras extensões incluem:
38
<Comandos de processamento de transações para Iniciar (Start), Confirmar (Commit) e fazer o Rollback de uma transação.
<Uma função de incremento atômica para ser utilizada na base
de dados.
<Extensões que promovem uma melhor integração com as
capacidades do Servidor de Aplicações Caché.
Acesso a Objeto com Basic
No Caché, classes de objetos estão organizadas em pacotes, e nomes de classes incluem
o nome do pacote seguido por um ponto. Por exemplo: Folha. Pessoa – é uma classe
Pessoa no pacote Folha. O comando do Basic New é usado para criar um objeto:
Person = New Payroll.Person() // cria um novo objeto Pessoa
O Basic foi expandido com um comando Open ID para acessar um objeto existente:
Person = OpenID Payroll.Person (54)
// abre o objeto pessoa com o ID 54
Aqui estão alguns exemplos de códigos que acessam a propriedade das pessoas:
Person.Name = `Smith´, John Person.Home.City Person.Employer.Name // especifica o nome da pessoa
// faz referência à cidade da pessoa
// traz o objeto Empregador da pessoa para a
// memória e acessa o nome do em pregador
Classes de base de dados podem ser persistidas em disco com o método Salvar. Por exemplo:
Person.Save()
salva a pessoa, criando um ID de objeto se esta for a primeira vez que o objeto houver sido armazenado. Se objetos relacionados (como o Empregador) também tiverem sido modificados, eles
também serão salvos automaticamente.
39
Capítulo 3
MVBASIC
MVBasic é uma outra linguagem de script oferecida pelo Caché e é uma variante do Basic.
Ele é, no entanto, feito com a intenção de executar aplicações escritos para sistemas MultiValue
(Pick) e, portanto, tem suporte a características extra, incluindo a capacidade de acessar e manipular arquivos MultiValue.
O MVBasic pode ser utilizado tanto como métodos de classe como rotinas do Caché (veja
a descrição de rotinas do Caché Object Script). O MVBasic pode solicitar tanto o Caché
ObjectScript, quanto o Basic – e vice-versa - com todas as três linguagens tendo acesso às
mesmas variáveis, Arrays e objetos na memória de processamento.
O Caché MVBasic possui as mesmas extensões do Caché Basic, inclusive acesso a objetos.
Contudo, dada a possível ambigüidade, a seqüência de dois caracteres “->” – é utilizada ao
invés de um separador tipo ponto, “.” – nas referências de objetos.
C++
Cada classe do Caché pode ser projetada como uma classe C++ com métodos correspondentes
a cada propriedade e método da classe Caché. Para programas C++, estas classes possuem exatamente a mesma aparência de outras classes C++ locais e o Caché automaticamente gerencia todas
as consultas entre o cliente e o servidor. As propriedades da classe são armazenadas em memória
cache no cliente e solicitações de método C++ criam seus correspondentes métodos server side,
incluem-se aí os métodos para armazenar um objeto na base de dados e depois recuperá-los.
JAVA
Java Supported Several Ways
Java é uma linguagem de programação popular mas,
conectar aplicações Java à maior base das bases de
dados pode ser desafiador. Conectar-se a uma base
de dados relacionais requer ampla codificação SQL,
o que demanda muito tempo e inibe muito das vantagens da tecnologia Java de objetos. A abordagem
do Caché de armazenar os objetos diretamente sem
o desenvolvedor ter de se preocupar com a forma na
qual os dados substirão e ter de usar sintaxe de objetos
é muito mais simples e geralmente preferida.
Alguns desenvolvedores preferem trabalhar exclusivamente com POJO’s (Plain Old Java Objects), enquanto
outros preferem EJB (Enterprise Java Beans).
Ademais, alguns desenvolvedores preferem primeiro definir o esquema da base de dados e depois
gerar automaticamente a classe Java correspondente para cada uma das classes da base de dados,
enquanto outros preferem criar primeiro às classes Java e fazer com que o Caché gere um esquema da base de dados automaticamente. O Caché suporta todas estas abordagens:
40
<Qualquer classe Caché pode ser projetada como uma classe Java para que classes e méto
dos possam ser acessados como objetos Java.
<Classes Caché também podem ser projetadas como Enterprise Java Beans.
<JDBC oferece acesso SQL de alta performance usando um driver completamente baseado em Java (tipo 4).
<A tecnologia Jalapeño da InterSystems cria classes Caché a partir de descrições de classe em POJO.
Objetos Acessados Através de Classes Projetadas
Toda classe Caché pode ser projetada como uma classe Java (ou EJB), com
métodos correspondentes a cada propriedade e método da classe Caché.
Para programas em Java, estas classes aparentam ser como qualquer outra classe
Java local. A classe Java gerada se utiliza de uma biblioteca Java fornecida pela
InterSystems para lidar com qualquer comunicação entre o Cliente e o Servidor.
O estado de cada objeto Caché é mantido no Servidor de Aplicações Caché,
embora propriedades de classe estejam também armazenadas em memória cache
no cliente para otimizar o desempenho. Chamadas de método solicitam métodos correspondentes no Servidor de Aplicações Caché – incluindo métodos para
armazenar um objeto na base de dados e depois recuperá-lo. Para o cliente, não
é visível qual Servidor de Dados Caché contém as informações ou mesmo se
os dados de objeto estão armazenados em uma base de dados relacional acessada
pelo Servidor de Aplicações Caché.
A VANTAGEM DO CACHÉ
Métodos Caché Escritos em Java
Flexibilidade: Desenvolvedores de
Java possuem opções no que diz
respeito a acessar objetos Caché
– eles podem utilizar SQL e JDBC
ou objetos projetados mais naturalmente, como classes Java ou Enterprise Java Beans. Com o Jalapeño,
os desenvolvedores têm a opção de
trabalhar inteiramente em seu ambiente de desenvolvimento Java predileto, deixando o Caché fornecer os
métodos para armazenar e recuperar
objetos automaticamente sem tocar
nas classes de desenvolvedores de
base de dados.
Métodos de classe Caché podem ser escritos em Java usando o Caché Studio.
Contudo, ao contrário do Caché ObjectScript e do Basic, os métodos Java não
são executados pela Máquina Virtual Caché. Ao invés disso, eles são incluídos
na classe Java gerada e são executados em qualquer Máquina Virtual Java.
Tal tipo de código não é acessível a partir de métodos não Java.
Alta Performance: Todos os aplicações Java, independentemente de
como estão conectados ao Caché,
se beneficiam de seu desempenho
superior e de sua escalabilidade.
Fornecendo Persistência à Aplicações J2EE
Desenvolvedores de aplicações J2EE, o qual utiliza Enterprise Java Beans (EJB),
trabalham primordialmente com objetos até o momento em que necessitam
acessar a base de dados – aí eles geralmente são forçados a voltar a utilizar o SQL.
Através de sua interface JDBC, o Caché pode oferecer resposta SQL extremamente rápida a tais aplicações. No entanto, o acesso SQL geralmente não é
a abordagem preferida.
Base de dados de objetos é uma técnica de acesso mais natural para programadores de EJB. O Caché projeta classes Caché como EJB’s gerando métodos
de persistência de alta performance automaticamente para BMP (Bean-Managed
Persistence). Isso evita a sobrecarga do SQL e o mapeamento objeto-relacional
– o resultado é uma maior escalabilidade para aplicações J2EE.
A tecnologia Jalapeño da InterSystems também pode ser utilizada em aplicações
J2EE com as mesmas vantagens.
Compatibilidade Nativa com J2EE
Significa Desenvolvimento Mais
Rápido: Classes Caché podem ser
facilmente projetadas como EJB’s,
fornecendo a desenvolvedores J2EE
um modo simples de se conectar
à base de dados pós-relacional do
Caché. Quando uma classe Caché
é projetada utilizando Bean-Managed Persistence, o Caché gera
automaticamente o método usado
pelo EJB para acessar a base de dados. do Caché. Como os desenvolvedores não precisam mais manusear
métodos de persistência de códigos,
os aplicações podem ser completados com maior rapidez.
41
Capítulo 3
Jalapeño Permite Desenvolvimento em Java
Ao invés de iniciar o processo com classes Caché e projetá-las como componentes Java, a tecnologia da InterSystems faz exatamente o oposto. Ela permite a desenvolvedores Java definir classes
de objeto dentro do ambiente de desenvolvimento Java que eles prefiram, fazendo a persistência
automática daquelas classes no Caché. A classe Java do desenvolvedor não é alterada – o Caché
fornece uma
biblioteca de classes com um API que é utilizado para guardar e recuperar objetos e emitir consultas às classes do desenvolvedor.
CACHÉ & JALAPEÑO
Desenvolvedores Java que queiram criar novos aplicações hoje em dia se deparam com vários
problemas. Geralmente, eles armazenam suas informações em uma base de dados relacional
padrão utilizando-se de SQL. Com esta abordagem os desenvolvedores têm de mapear seus
objetos Java para estruturas relacionais e escrever consultas SQL tediosas e muitas vezes complexas
para acessarem àqueles dados – todos estes pontos podem consumir uma grande porcentagem
do tempo de desenvolvimento total. Alternativamente, um desenvolvedor pode fazer uso
de uma base de dados objeto, a qual freqüentemente não possui suporte a SQL e as ferramentas
de geração de relatório baseadas em SQL, podendo também requerer definições de esquemas.
A tecnologia Jalapeño (JAva LAnguage PErsistence with NO mapping) da InterSystems torna
fácil para desenvolvedores Java realizar a persistência de seus objetos dentro da robusta base
de dados de objeto Caché, utilizando-se acesso de objeto, ao mesmo tempo em que fornece
acesso SQL de alta performance para estes mesmos dados. Os objetos são armazenados nas bases
de dados como objetos reais com propriedades, relações, etc. (isto é, não se armazena simplesmente seu estado de série). Mesmo assim, nenhum mapeamento de objeto relacional é necessário.
Utilizando o Jalapeño, o desenvolvedor Java cria classes de bases de dados do mesmo modo
que qualquer outra classe POJO, usando a IDE Java de sua escolha. O programador indica então
para o Jalapeño quais classes são de bases de dados – geralmente utilizando um plug-in para
o IDE do desenvolvedor (fornecido pela Biblioteca Jalapeño Persistence). O Jalapeño analisa
as classes, cria automaticamente um esquema de base de dados correspondente (e SQL) e gera
todo o suporte de execução para salvar e recuperar tais objetos.
A classe POJO do desenvolvedor não é modificada – e este pode continuar a alterá-la. Durante
a execução, de forma normal, a aplicação acessa diretamente as propriedades e os métodos
dos objetos POJO. Para salvar e recuperar objetos da base de dados, a aplicação usa as APIs
da classe “ObjectManager” fornecida pelo Jalapeño. A classe ObjectManager também oferece
métodos que estabelecem uma conexão à base de dados, suporta consultas SQL e fornece
semântica de transação (tal como start, commit e rollback).
Uma simples descrição de classe, inclusive uma lista de propriedades e seus tipos, não é em si
só elaborada o suficiente para descrever tudo o que se poderia querer em uma base de dados.
No mínimo, seria necessário ainda descrever qual propriedade contém o ID do objeto. Um desenvolvedor geralmente ainda especificaria índices para tornar as consultas mais eficientes.
Adicionando-se anotações padrão Java a seus arquivos-fonte desta linguagem, desenvolvedores
podem suprir esta e outras especificações da base de dados.
O Jalapeño também suporta “evoluções de esquemas” (“schema evolutions”), através da qual
o desenvolvedor pode continuar a modificar a classe, inclusive adicionando propriedades novas
ou alterando definições já existentes, sendo que o esquema de definições se adapta sem invalidar
qualquer um dos dados já inseridos. Isto resulta em um processo de desenvolvimento natural
e interativo.
42
Apesar de o Jalapeño funcionar melhor se utilizado em conjunto com o Caché, ele
também pode exportar seus esquemas de base de dados para um esquema relacional
correspondente utilizando DDL padrão (Data Definition Language – Linguagem
de Definição de Dados). Portanto, apesar do objeto ter sido criado para usar acesso
de objeto com o Caché, ele também pode ser disponibilizado em uma base de dados
relacional. Neste caso, os API’s do Jalapeño ObjectManager usam automaticamente
chamadas JDBC normais para a conectividade da base de dados. Quando conectado
à base de dados de objeto Caché, o protocolo de alto desempenho baseado em objeto
é utilizado.
A biblioteca Jalapeño é implementada através de Java padrão e roda em qualquer Java 1.5
JVM (ou mais recente) ou em qualquer ambiente de servidor de aplicações J2EE.
Com o Jalapeño, o desenvolvedor Java pode concentrar-se na interface de usuário e na
lógica comercial do aplicação, criando classes de base de dados do mesmo modo que
com outras classes – e deixando o Caché tomar conta do restante.
No exemplo a seguir, um objeto Cliente é recuperado, seu número de telefone é alterado
com um método “set” estabeler, a base de dados é atualizada e, por fim, o objeto na
memória é fechado.
Cliente cliente = (Cliente) objectManager.openById(Cliente.
class, clienteId);
cliente.setNumTel(“1144210000”);
objectManager.update(cliente, true);
objectManager.close();
A VANTAGEM DO CACHÉ
Desenvolvimento Rápido e Natural Sem Mapeamento Objeto-Relacional: O Jalapeño
utiliza introspecção de classes POJO para criar automaticamente um esquema de base
de dados de objeto. Os dados são armazenados como objetos e uma representação
SQL padrão destes dados também é criada de forma automática. Nenhum mapeamento
objeto-relacional é necessário, acelerando assim o desenvolvimento.
Fácil Persistência POJO: Dentro de um aplicação, os desenvolvedores acessam as suas
próprias classes de base de dados como se fosse qualquer outra classe. O Jalapeño gera
todos os códigos para salvar e recuperar objetos da base de dados utilizando suas API’s
de runtime.
Acesso SQL: Todos os objetos dentro da base de dados estão acessíveis de forma
automática por SQL utilizando a API de JDBC do Jalapeño – mesmo sem o desenvolvedor ter realizado um mapeamento objeto-relacional.
Independência de Plataforma e de Base de Dados: O Caché está disponível em todas
as principais plataformas – e se por um lado o Jalapeño funciona melhor se usado com
ele, por outro também pode exportar seu esquema de base de dados para um esquema
relacional correspondente se utilizar um DDL comum. Portanto, apesar da aplicação
haver sido feita para utilizar acesso de objetos com o Caché, ele também pode ser
disponibilizado em uma base de dados relacional.
43
Capítulo 3
CACHÉ & .NET
A VANTAGEM DO CACHÉ
Servidos de Dados Veloz:
Aplicações web que utilizam o
Caché como um servidor de dados
se beneficiam da imensa escalabilidade e alto desempenho oferecidos
pelo engine de dados multidimensional do Caché.
Desenvolvimento .NET Mais
Rápido: Os desenvolvedores serão
mais produtivos se trabalharem
com suas ferramentas preferidas em
ambientes que lhes seja familiar.
O Caché suporta uma ampla variedade das mais comuns ferramentas
e tecnologias de desenvolvimento,
oferecendo ambos os acessos a
dados de objeto, como também
o acesso SQL.
Graças a seu acesso aberto e flexível a dados, o Caché funciona de forma imperceptível com o .NET. Há muitos modos de conectar ambos – incluindo objetos,
SQL, XML e SOAP. Desenvolvedores podem criar aplicações com as tecnologias
de sua preferência – todas elas se beneficiarão da performance e escalabilidade
superior do Caché.
ADO.NET
ADO.NET é uma nova materialização do ADO, otimizado para uso na estrutura
.NET. Sua intenção é tornar aplicações .NET “bases de dados independentes”,
utilizando normalmente o SQL para se comunicar com estas bases. Através de
seu acesso de dados relacionais, o Caché oferece suporte nativo a ADO.NET.
Ele também suporta ODBC.NET, da Microsoft, com conectividade read-only
(somente leitura) do SOAP, integrada ao ADO.NET.
Web Services
Há duas maneiras de se utilizar web services no .NET. Uma delas é enviando
documentos XML por HTTP. A outra é utilizando protocolo SOAP para simplificar o intercâmbio de documentos XML. Como o Caché pode expor dados em
ambas as direções, ele funciona de forma imperceptível com web services .NET.
Objetos Caché Gerenciados
O Caché pode gerar automaticamente sessões .NET (ou código-fonte C#)
a partir de classes Caché. Um plug-in para Visual Studio permite aos desenvolvedores que preferem aquele ambiente a acessar objetos Caché facilmente.
44
CACHÉ & XML
Do mesmo modo que HTML é uma linguagem de marcação, compatível com a internet,
para a exibição de dados em um navegador, o XML é uma linguagem de marcação para intercambiar dados entre aplicações. A estrutura dos dados XML é hierárquica e multidimensional,
tornado-a um par natural do motor de dados multidimensionais do Caché.
Exportando XML
Tudo o que é necessário para tornar uma classe Caché compatível com XML é fazer com que
ela herde da classe “%XML.Adaptor”, que está incluída no Caché. Isto fornece todos os métodos
necessários para:
<Criar ou uma DTD (Document Type Definition), ou um Esquema XML para a classe.
O Caché gera Esquemas e DTDs automaticamente, mas desenvolvedores que desejem customizar a formatação XML de uma classe podem fazê-lo.
<Formatar automaticamente os dados de um objeto como XML, de acordo com o DTD ou Esquema definido.
Importando XML
O Caché vem com outras classes que fornecem métodos, possibilitando aos desenvolvedores:
<Importar Esquemas XML e criar classes Caché correspondentes automaticamente.
<Importar dados contidos em documentos XML, trazendo-os como instâncias (objetos) de classes Caché via um API simples.
<Analisar a fundo e validar documentos XML através de um analisador XML (SAX)
integrado.
45
Capítulo 3
CACHÉ & WEB SERVICES
Web Services permite o compartilhamento da funcionalidade de um aplicação através da internet
e dentro de uma organização ou de um sistema. Web Services possue uma interface descrita em
WSDL (Web Service Definition Language) e retornam um documento XML formatado de acordo
com o protocolo SOAP.
O Caché possibilita que qualquer método de classe, qualquer procedimento armazenado em
SQL e qualquer consulta sejam exibidos automaticamente com um Web Services. O Caché gera
o descritor WSDL para o serviço e quando este é solicitado, envia o documento formatado
apropriadamente em XML. O Caché também facilita o rápido desenvolvimento, gerando uma página web automaticamente para testar o serviço, sem ser necessário construir uma aplicação-cliente.
A VANTAGEM DO CACHÉ
Conectividade Fácil ao XML: O Caché tira proveito de sua capacidade de herança
múltipla para fornecer a qualquer classe Caché uma interface bidirecional com o XML.
O resultado: As classes Caché podem ser transformadas em esquemas e documentos
XML de forma fácil e rápida. De modo semelhante, esquemas e documentos XML
podem ser transformados em definições de classe e objetos Caché.
Desenvolvimento Rápido de Aplicações XML Mais Veloz: Como as estruturas de dados
multidimensionais nativas do Caché se ajustam bem aos documentos XML, os desenvolvedores não precisam codificar manualmente um “mapa” que traduza entre XML
e a base de dados Caché.
Web Services Instantâneos: Qualquer método Caché pode ser publicado como um Web
Services com apenas alguns cliques do mouse. O Caché gera automaticamente o descritor WSDL e a resposta SOAP quando o serviço é solicitado.
46
CACHÉ & MULTIVALUE
O Caché oferece todas as capacidades necessárias para desenvolver e rodar aplicações MultiValue
(também chamados de aplicações baseados em Pick), incluindo os MultiValue abaixo:
<MVBasic
<Acesso a arquivos
<Linguagem de consultas
<Dicionário de dados
<“procs”
<Command shell (utilitário de entrada de comandos)
Esta funcionalidade MultiValue é fornecida como uma parte integral do Caché – e não como uma
implementação MultiValue em separado –, utilizando o valioso motor de base de dados multidimensional Caché, a funcionalidade runtime e as tecnologias de desenvolvimento. Isto quer dizer
que os usuários de MultiValue podem tomar pleno partido das capacidades oferecidas pelo Caché.
Acesso a Arquivos MultiValue
Aplicações MultiValue geralmente tratam a base de dados como um conjunto de arquivos acessados através de operações de registro de Leitura e Escrita (Read and Write) e através de consultas
MultiValue. No Caché, cada arquivo MultiValue é armazenado como uma estrutura “global” multidimensional com cada registro sendo igual a um nó global. Este recurso se baseia na capacidade
do Caché em armazenar múltiplos elementos de dados por cada nó da global.
Por exemplo, um arquivo MultiValue que armazena informações de nota fiscal poderia ter
seguinte estrutura:
NF # Cliente DataNF
Partes Quantidades
Preços
… ID Ítem
Atributo
Atributo
Atributo
Atributo
Atributo
…
1
2
3 (com MultiValue)
4 (com MultiValue)
5 (com MultiValue)
O Caché representará este arquivo MultiValue internamente como a seguinte estrutura global
multidimensional equivalente:
^NF(nf #)=
Cliente ^ DataNF ^ Parte1 ] Parte2 ^ Quant1 ] Quant2 ^ Preço1 ]
Preço2k
onde “^” indica o delimitador de atributo normal (ASCII 254), e “]” indica o delimitador de
sub-atributo (ASCII 253).
Arquivos MultiValue podem ser acessados por programas MultiValue através dos comandos
normais READ/WRITE (Leitura/Escrita) e de consultas MultiValue. Eles também estão
acessíveis através tanto do MVBasic, quanto de outras linguagens, por todos os mecanismos
normais do Caché, incluindo acesso a objeto, acesso direto a Array multidimensional e SQL.
Arquivos MultiValue podem ser indexados com vários tipos de índices (incluindo índices bit-map)
e seqüências de comparações.
47
Capítulo 3
Linguagem de Consulta MultiValue
A Linguagem de Consulta MultiValue fornece as funcionalidades de seleção de dados e de formatação de relatórios para arquivos MultiValue. A linguagem de consulta pode ser utilizada em
MVBasic, no command shell e em “procs”. O Caché traduz consultas MultiValue em consultas
Caché SQL com código adicional para permitir suporte a correlativos, formatação de relatórios
e vários outros recursos. Como estas consultas utilizam o motor SQL de extrema alta performance do Caché, a confiabilidade é aumentada, a execução é otimizada e um conjunto sofisticado
de capacidades de indexação pode ser utilizado. Obviamente, desenvolvedores MultiValue podem,
sempre que desejarem, se utilizar diretamente do Caché SQL.
Dicionário de Dados MultiValue
Um arquivo MultiValue pode ter uma descrição de arquivo correspondente no Dicionário
de Dados MultiValue, a qual é editável diretamente através do código MVBasic e pelo editor
MultiValue “ED” tradicional. A linguagem de consulta MultiValue se utiliza deste dicionário.
Um arquivo MultiValue pode ter também uma definição de classe Caché correspondente.
Uma definição de classe é essencial nos casos em que os dados serão disponibilizados para
acesso a objetos ou SQL (embora não seja necessário usar a MultiValue Query Language).
Uma definição de classe também é necessária se o arquivo for ser indexado.
Quando se importam aplicações MultiValue mais antigas, as definições de classe do Caché podem
ser criadas automaticamente a partir do Dicionário MultiValue. No entanto, na maioria dos casos,
a classe resultante terá de ser editada para tornar os dados mais significativos caso o acesso a objetos ou ao SQL seja pretendido. O Studio wizard ajuda a automatizar a criação de classes a partir
de Dicionários MV e a fornecer mais mapeamentos subseqüentes. Por definição, estas classes são
read-only, (sendo que os dados podem ser lidos, mas não atualizados através de SQL e objetos)
e são editados separadamente ao Dicionário MV.
Quando se cria um novo arquivo MultiValue, é recomendável criar primeiramente a classe
Caché herdeira da superclasse MVAdaptor, o que resultará na utilização de um arquivo de formato compatível com o MultiValue para o armazenamento de dados, criando automaticamente uma
descrição de arquivo no Dicionário de Dados MultiValue. Os dados do arquivo estarão, a partir
de então, acessíveis e atualizáveis através de todos os caminhos de acesso do Caché, inclusive por
objetos, SQL e acesso direto via global multidimensional. Deste ponto em diante, um desenvolvedor normalmente passaria a editar definições de classe e não o Dicionário MultiValue propriamente dito, dado que as edições de classe são automaticamente refletidas nele.
48
MultiValue e Objetos
O MVBasic foi expandido para utilizar objetos do mesmo modo que o Basic. A exceção está no
fato de que o MVBasic se utiliza de uma sintaxe “->” para representar o acesso a um objeto, ao
invés do ponto, “.”, do Basic. Qualquer classe no Dicionário de Classe pode ser utilizada, independentemente da linguagem utilizada nos métodos das classes.
Aqui estão alguns exemplos de código, no qual “pessoa” é uma referência de objeto:
pessoa->Nome = “Silva, João” pessoa->Resid->Cidade pessoa->Empregador->Nome empregador pessoa->Save() // fixa o nome da pessoa
// faz ref. à cidade onde reside a pessoa
// traz o objeto empregador da pessoa para a
// memória e acessa o nome do
// salva a pessoa em disco
Command Shell do MultiValue
O command shell do MultiValue pode rodar a partir de um terminal. Além das capacidades normais do command shell do MultiValue, o Caché permite comandos MVBasic serem executados
diretamente no utilitário. Por exemplo, digitando:
:; DIM A(34)
:; FOR I = 1 A 34 ; A(I) = I; NEXT
:; FOR I = 1 A 34 ; CRT A(I):” “: ; NEXT
tem-se como resultado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
A VANTAGEM DO CACHÉ
Vida Nova para Aplicações Antigas: o Caché torna fácil atualizar aplicações MultiValue
mais antigas através de interfaces do navegador, acesso a objetos, SQL robusto e Web
Services. Aplicações MultiValue podem agora existir em uma base de dados avançada,
que é bem-aceita em ambientes de alta demanda e que apresenta evolução constante.
Construa Novos Aplicações Rapidamente: Como o MultiValue é implementado como
uma linguagem e como um acesso de arquivos no Caché, todas as capacidades nativas
do Caché podem ser utilizadas para se construir novas funcionalidades rapidamente.
Programadores MultiValue podem começar a tirar proveito da programação de objetos
e interagir facilmente com outros aplicações, enquanto seguem utilizando a linguagem
MultiValue.
Alta Performance e Escalabilidade com Impressionante Confiabilidade para Usuários
MultiValue: O Caché oferece desempenho e escalabilidade dramaticamente superior
para usuários MultiValue. Ademais, o Caché é utilizado em ambientes que são críticos
24 horas ao dia, tal como hospitais, que não têm como tolerar sistemas “fora do ar”.
O Caché fornece sofisticado journal, processamento de transações, “bases de dados
blindadas” e configurações de tolerância a falhas.
49
Capítulo 4
Capítulo 4: Criação Rápida de Aplicações de Alta Performnce Web
Rápidas com Caché Server Pages (CSP)
“Criação Rápida De Aplicações Web Rápidas...” usa a palavra rápido duas vezes.
Isso, primeiramente, porque é possível criar aplicações web sofisticados, orientados
a base de dados com CSP mais velozmente do que com outras abordagens tradicionais. A outra razão é que a base de dados integrada Caché é a mais rápida do mundo,
sendo capaz de rodar sistemas com dezenas de milhares de usuários simultâneos.
Há muitos modos de se escrever aplicações web com Caché – inclusive com todas
as formas tradicionais que utilizam SQL para acessar a base de dados. Neste capítulo,
discutiremos outra abordagem – mais direta –, chamada CSP - Caché Server Pages.
O CSP é uma tecnologia fornecida como parte do Servidor de Aplicações Caché.
Ele é a maneira mais rápida para que aplicações Caché interajam com a web,
oferecendo:
<Uma abordagem de desenvolvimento avançada, orientada a objetos.
<Performance ultra-elevada e escalabilidade em tempo de execução.
O CSP apresenta suporte HTML, XML e a outras linguagens de marcação orientadas à web.
O CSP não é uma ferramenta de web design, embora possa ser utilizada com estas. Enquanto
ferramentas de web design normalmente se concentram na produção de HTML estático, o CSP
vai além da aparência das páginas e auxilia no desenvolvimento de lógica de aplicação. Ele também
fornece o ambiente de execução que possibilita a execução rápida do código contido no Servidor
de Aplicações Caché.
O CSP suporta um forte ambiente de programação procedural; tal que os aplicações podem ser
escritos com um nível de sofisticação e exatidão que excede as possibilidades de tecnologia pura
de geração de aplicações. Ela também suporta desenvolvimento rápido através de sua arquitetura
de classe, a qual produz “blocos de construção” de código – estes últimos podem ser combinados
entre si – e ainda, através do uso de wizards, que podem produzir rapidamente versões simples
de código customizado. O resultado é a possibilidade de se desenvolver velozmente aplicações
web muito sofisticadas.
A VANTAGEM DO CACHÉ
Programação procedural orientada a objeto, juntamente com o Caché Wizards,
resultam em aplicações de base de dados sofisticadas, baseados em navegadores web.
50
Algumas das características do Caché Server Pages são:
<Servidor de Páginas Dinâmicas – Como as páginas são criadas de forma dinâmica no
servidor de aplicações, ao invés de fazer com que um servidor web simplesmente retorne ao HTML estático, os aplicações podem responder rapidamente a várias requisições dife-
rentes, moldando as páginas resultantes, que são enviadas de volta ao navegador.
<Modelo de Sessão – Todo o processamento relacionado a páginas de um único navega-
dor (browser) é considerado parte de uma só sessão – da primeira solicitação do browser até que ou a aplicação seja completada ou um timeout programável ocorra.
<Preservação de Estado do Servidor – Dentro de uma sessão, os dados no servidor –
e mesmo o conteúdo da aplicação – podem ser retidos automaticamente através das solici-
tações do browser, tornando muito mais fácil desenvolver e rodar aplicações complexas.
<Arquitetura de Objetos – Como cada página corresponde a uma classe, o código e outras características comuns a muitas páginas podem ser facilmente incorporados através da
funcionalidade de herança. Os dados são também tipicamente referenciados através de objetos com todos os benefícios da programação de orientação a objetos.
<XML – O XML oferece uma poderosa alternativa ao HTML na construção de páginas web. O CSP funciona com o XML do mesmo modo que trabalha com o HTML. O pro-
gramador fornece XML no método Page(), ao invés de HTML.
<Tags de Aplicação Caché para Geração Automática de Código – Estes tags HTML
estendidos são tão fáceis de utilizar quanto tags tradicionais de HTML. Quando adicio
nados a um documento HTML, eles geram um código de aplicação sofisticado, oferecendo uma variedade de funcionalidades, tais como abrir objetos, executar consultas
e controlar o fluxo de programas. Estas tags são expansíveis – os desenvolvedores podem criar suas próprias tags, adequadas às necessidades específicas que possuem.
<Integração com Ferramentas Populares de Web Design – O CSP funciona com uma
variedade de ferramentas que tornam fácil realizar o layout visual de páginas. Com o Dreamweaver, o CSP vai um passo além de sua capacidade de adicionar tags de Aplica-
ções Caché através de simples interações point-and-click (apontar e clicar com o mouse). O CSP inclui ainda um Wizard, que torna fácil criar formas que exibem ou editam dados na base de dados Caché.
<Métodos Servidores Solicitáveis a Partir do Browser – Para facilitar o desenvolvimento
de aplicações mais dinâmicas e interativas, o CSP torna fácil solicitar métodos server-side.
Quando um evento ocorre no browser – geralmente porque o usuário realizou uma ação – o código de aplicação no servidor pode ser chamado, gerando uma resposta ao evento. Tudo isso, sem a sobrecarga de transmissão e exibição de uma página inteiramente nova.
<Criptografia – O Caché automaticamente criptografa dados na URL para ajudar a auten-
ticar solicitações e prevenir adulterações. A chave de criptografia é mantida somente no servidor e é válida somente durante aquela única sessão.
É muita tecnologia – mas não tem que ser difícil de utilizar. Nós nos concentramos em tornar o
CSP fácil de usar, com a maioria dessas capacidades funcionando de forma automática para você.
Nossa filosofia é “poder através da simplicidade” – a complexidade deve ficar em nossa implementação
e não na programação que você realiza.
51
Capítulo 4
O MODELO CACHÉ SERVER PAGES
Tecnologias Web Tradicionais
Em tecnologias web tradicionais, uma solicitação é enviada ao servidor web. Este recupera um
arquivo seqüencial de HTML que é enviado de volta ao browser. Quando os aplicações envolvem
dados variáveis, o desenvolvimento se torna mais complicado, com os programadores passando
geralmente a utilizar CGI (com linguagens Pearl ou tcl) no servidor web, e enviando consultas
SQL e stored procedures para a base de dados. Como se trata de um ambiente de programação,
isso deixa muito a desejar; e a execução – particularmente com grande número de usuários –
pode ser bem ineficiente quando o servidor web fica demasiadamente sobrecarregado.
Com o CGI, cada solicitação do browser geralmente cria um novo processo. Para evitar esta
sobrecarga, os programadores às vezes fazem um link diretamente entre o código de aplicação
e o servidor web, com um efeito-colateral inadequado que faz com que um erro em tal código
possa levar ao travamento do servidor web inteiro.
Páginas de Servidor Dinâmicas
O CSP utiliza uma abordagem de programação e execução diferenciada: Dynamic Server Page
Technology (Tecnologia de Página Dinâmica do Servidor). O conteúdo (HTML, XML, folhas
de estilo, imagens e outros tipos) é gerado de forma programada durante a execução no Servidor
de Aplicações Caché, ao invés de vir de arquivos seqüenciais, permitindo maior flexibilidade
nas respostas às solicitações de página.
A maior parte do código de aplicações é executada no Servidor de Aplicações Caché, o qual pode
ou não estar localizado fisicamente no mesmo computador que o servidor web. Alguns códigos
– normalmente JavaScript ou Java – podem rodar no navegador, suportando, geralmente, operações como validação de dados, reformatação ou invocando códigos laterais ao servidor.
Com esta abordagem, os processos não precisam mais ser criados para cada requisição do browser
(como ocorre na abordagem CGI tradicional), melhorando o desempenho. E já que o código
de aplicações não é ligado ao servidor web, um erro nos aplicações não trava este último.
Sessões – O Modelo de Processamento
Todo o processamento relacionado a páginas de um único navegador é considerado parte de uma
mesma sessão – desde a primeira solicitação do browser até que os aplicações sejam finalizados
ou um timeout programável ocorra. Quando um servidor web recebe uma solicitação de página
(URL) com uma extensão “.csp”, esta requisição é enviada (por uma fina camada de código
Caché anexada ao servidor web) para o Servidor de Aplicações Caché apropriado, que pode estar
fisicamente localizado em outro computador.
Quando o Servidor de Aplicações Caché recebe a solicitação, ele determina se uma sessão já está
em andamento para aquele browser. Em caso negativo, uma sessão é iniciada automaticamente.
O Caché executa então o código de aplicação associado àquela página em particular – realizando
as ações solicitadas pelo usuário e criando de forma programada o HTML, o XML, a imagem
ou outro conteúdo que é enviado de volta ao navegador.
Uma sessão termina quando uma propriedade é inserida no objeto de Sessão, terminando-a.
Aplicações que rodam stateless (sem estado definido) podem optar por finalizar a sessão em cada
página.
52
Preservação de Estado
Um dos desafios enfrentados por desenvolvedores é a natureza inerentemente
stateless (sem estado) da web – normalmente não há uma maneira simples de
se reter informações no servidor entre uma solicitação e outra. Os aplicações
geralmente enviam para o navegador todas as informações de estado que eles
precisam reter na forma de URL’s ou de campos escondidos de formulário.
Esta não é uma técnica eficiente para aplicações mais complexas, que podem
recorrer a salvar temporariamente dados em arquivos ou bases de dados. Infelizmente, isto impõe uma sobrecarga significativa ao servidor e torna a programação
consideravelmente mais difícil.
O modelo de Sessão do Caché possibilita a este preservar dados automaticamente
e eficientemente entre as solicitações de um browser. O CSP fornece um objeto
de Sessão que contém informações genéricas sobre a sessão, além de propriedades
que permitem ao programador controlar várias características desta. O aplicação
pode armazenar seus próprios dados no objeto de Sessão, o qual é retido automaticamente de uma solicitação a outra.
O aplicação determina o estado a preservar, estabelecendo a propriedade Preserve
no objeto de Sessão para 0 ou 1 (o padrão é 0, o que pode ser modificado
de modo dinâmico durante a execução).
<0 – Dados salvos no objeto de Sessão são retidos. (Os dados são
simplesmente colocados em uma propriedade multidimensional, que aceita qualquer tipo de dado e permite qualquer número de subscript – inclusive subscripts de valor seqüencial – sem nenhuma declaração).
<1 – O Caché dedica um processo para a sessão, tal que os estados
de processo são retidos, inclusive todas as variáveis (e não só aquelas do objeto de Sessão) dispositivos I/O (entrada-saída) e locks.
A VANTAGEM DO CACHÉ
Ao preservar a informação
de estado no servidor de forma
automática, há menos tráfego
de rede e menos sobrecarga no
servidor, já que os aplicações não
precisam ficar arquivando e acessando dados para cada página
solicitada. E programar o aplicação
é mais simples.
O uso de Páginas Dinâmicas
de Servidor e do Servidor de
Aplicações Caché resulta em uma
maior flexibilidade para se responder a solicitações, em uma execução
mais veloz e sem o risco de erros
de aplicações fazerem o servidor
web “cair”, bem como em um ambiente de programação mais rico.
Uma configuração igual a 0 permite uma partição lógica de todos os dados
preservados e permite que múltiplas sessões compartilhem um único processo,
porém preserva menos quantidade de estado. Já uma configuração igual a 1
é mais fácil para o programador e oferece um leque de capacidades mais amplo,
porém, a um custo maior de recursos de servidor utilizados.
O Objeto de Requisição
O CSP fornece automaticamente vários objetos (além do objeto de Sessão) para
auxiliar o programador a processar a página. Um deles é o objeto de Requisição.
Quando uma página é recebida, o URL é decodificado e colocado no objeto
de Requisição. Este objeto contém todos os pares nome/valor e todos os dados
de formulário, juntamente com outras informações úteis. Por exemplo, o valor
do nome “FilmeID”, poderia ser obtido com o código:
%request.data(FilmID”, 1)
// o 1 indica que queremos o 1º nome para este valor
// caso haja vários valores para este nome
53
Capítulo 4
ARQUITETURA DE CLASSE DE PÁGINAS WEB
Para cada página web há uma classe de página correspondente, a qual contém métodos (código)
para gerar o conteúdo da página. Quando uma solicitação é recebida, sua URL é utilizada para
identificar a classe Página correspondente, bem como para chamar o método Page() daquela
classe. Geralmente, classes de página são derivadas de uma classe de páginas web padrão (“%CSP.
Page”), a qual fornece várias capacidades integradas (tais como a geração de cabeçalhos e de
criptografia) a todas as páginas. Estas capacidades padrão podem ser desativadas de vários modos
– derivando-se de outra superclasse, utilizando herança múltipla ou simplesmente desativando
métodos específicos.
Esta arquitetura de classe torna fácil modificar o comportamento de um aplicação inteiro e forçar
um estilo comum. Ela também traz todas as demais vantagens programáveis da programação
de objetos ao desenvolvimento web.
A classe de página contém código para realizar a ação solicitada, bem como gerar e enviar uma
resposta ao navegador. Porém, nem todo o código de aplicações que é executado está naquela
classe de página. Na realidade, a maior parte do código executado está em métodos de várias
classes de bases de dados e, talvez, em classes extras de lógicas comerciais. Portanto, o processo
de desenvolvimento consiste em que tanto classes de páginas, quanto classes de bases de dados
(além de, eventualmente, classes adicionais de lógicas comerciais) sejam desenvolvidas.
Nós geralmente recomendamos que as classes de página contivessem somente lógica de interface
de usuário. Lógica comercial e lógica de base de dados deveriam ser colocadas em classes diferentes para que haja assim uma separação clara do código de interface de usuário destas lógicas –
e é mais fácil adicionar interfaces de usuário extras depois.
ESTRATÉGIAS MÚLTIPLAS DE
DESENVOLVIMENTO
Uma página de classe é criada para cada página
web e contém o código a ser executado por
aquela página.
Há vários modos de se construir páginas
de classes e a maioria dos aplicações utiliza
mais de um deles:
<Arquivo CSP – Um arquivo HTML
com Tags de Aplicação Caché embutidas é escrito utilizando um editor de textos simples ou uma ferramenta de
web design. Esse arquivo seqüencial (um “arquivo CSP”) não é enviado diretamente ao navegador – ele é compilado para gerar uma página de classe.
<Programação Direta – Os programadores escrevem as páginas de classe inteiras através
da codificação dos métodos apropriados.
<Zen – Programadores criam a página de classe utilizando componentes de objeto interativos pré-construidos.
Páginas simples geralmente são mais rápidas de se desenvolver com arquivos CSP e wizards, mas deve
ser mais fácil para programar páginas mais complexas diretamente ou com Zen.
54
ARQUIVOS CSP
Arquivos CSP são arquivos HTML seqüenciais com Tags de aplicações Caché
embutidas, que são compiladas em páginas de classe – o mesmo tipo de páginas
de classe que um programador talvez escrevesse diretamente. Estas páginas
de classe são então compiladas para gerar códigos que rodam no Servidor
de Aplicações Caché em resposta às solicitações do browser.
O Caché Studio inclui um Wizard de Formulários que gera automaticamente
um arquivo CSP para editar ou visualizar uma classe de base de dados. O usuário
simplesmente clica na classe de base de dados de seu interesse e depois seleciona
o conjunto de propriedades a ser exibido. O wizard do Caché faz todo o restante,
adicionando HTML e tags de aplicações Caché à página. Como o Wizard produz
HTML, caso o resultado não esteja em exato acordo com aquilo que você deseja,
é muito fácil editá-lo.
A abordagem de arquivos CSP é poderosa, pois:
<Web Designers podem desenhar o layout visual, enquanto os programa-
dores se concentram nos códigos.
<Muito da interface de usuário pode ser programada de maneira não pro-
cedural em um ambiente visual e ser mantida isolada das lógicas comerciais e de base de dados.
<É normalmente mais fácil customizar um aplicação para um usuário indi-
vidual específico deixando que não programadores alterem a apresenta-
ção visual e adicionem capacidades simples à aplicação.
Como as especificações visuais da aplicação são mantidas separadas da maior parte
da lógica de programação, é relativamente fácil modificar a sua aparência sem
a necessidade de reprogramá-lo – simplesmente edite o arquivo HTML ou XML
e recompile a página.
Embora uma aplicação inteira simples possa ser criado desta maneira, um programador geralmente imputa códigos adicionais a ele. Este código extra é suprido
através de tags de aplicações, que ou incluem o código de procedimento,
ou invocam códigos em outras classes. No entanto, páginas complexas com muitos códigos procedurais são geralmente mais fáceis de escrever utilizando-se
da abordagem de programação direta, ao invés de um arquivo CSP.
O Caché também inclui um add-in para Dreamweaver – a popular ferramenta
de design de páginas web. Ela oferece suporte point-and-click para se adicionar
Tags de Aplicações Caché, além de contar com um Wizard de Formulários
Caché, que gera automaticamente o código necessário para visualizar ou editar
um objeto da base de dados.
Tags de Aplicações Caché
Tags de Aplicações Caché podem ser adicionadas ao arquivo CSP. Elas são
utilizadas da mesma forma que tags HTML comuns, mas são, em realidade,
instruções para que o Caché Web Compiler (Compilador Web do Caché) gere
o código de aplicação que vai fornecer várias funcionalidades – como, por
exemplo, acessar objetos da base de dados, executar consultas, controlar o fluxo
de programas e executar código no Servidor de Aplicações Caché. As tags
de Aplicações Caché são expansíveis – os desenvolvedores podem criar suas
próprias tags para suprir suas necessidades específicas.
As Tags de Aplicações Caché não estão embutidas no HTML que é enviado a um
browser – elas estão somente no arquivo CSP lido pelo Caché Web Compiler.
Esse compilador automaticamente as transforma em HTML-padrão, o qual pode
ser processado por qualquer navegador.
55
Capítulo 4
HIPEREVENTOS
(HYPER-EVENTS)
Os hipereventos CSP permitem que eventos que ocorram em um navegador (como
os cliques do mouse, mudanças em campos
de valor ou timeouts) solicitem métodos
server-side, bem como atualizem a página
atual sem fazer o repaint (recarregamento
gráfico completo). Após realizar a ação
solicitada, este método tem como produzir
um código (geralmente em JavaScript) para
que seja executado no browser. Aplicações
web que utilizam hipereventos têm melhor
resposta e podem se tornar mais interativos.
Dentro de uma página CSP, um método
server-side é solicitado simplesmente
através da sintaxe:
“#server(...)#”
Por exemplo, suponhamos que quando
o usuário clicar em uma imagem de um
carrinho de compras, queremos ativar
um método servidor chamado
AdicAoCarrinho(). A definição HTML
para a imagem talvez incluísse então
a seguinte sintaxe:
onClick=”Server(AdicAo
Carrinho()#”
O web compiler substituirá esta sintaxe
com o código JavaScript, que quando
rodado no navegador, solicitará o método
do servidor Caché.
56
Capítulo 4
INTERSYSTEMS ZEN E WEB PAGES BASEADOS EM COMPONENTES
O Zen oferece uma maneira simples de criar dados ricos e complexos em aplicações Web
com visual sofisticado e com uma interface de usuário altamente interativa. O Zen não é uma
4GL; ele é uma rica biblioteca pré-montada de componentes objetos e uma ferramenta de
desenvolvimento baseada nas tecnologias CSP (Caché Server Pages) e de orientação a objetos
da InterSystems. O Zen é especialmente apropriado para o desenvolvimento de uma versão Web
de aplicações cliente/servidor originalmente criados com ferramentas tais como Visual Basic
ou PowerBuilder.
Os componentes Zen permitem muito mais interações dinâmicas – você não fica restrito ao
mecanismo “submeter” para enviar dados para o servidor. Por exemplo, com o componente
de formulário do Zen você pode definir sua própria validação customizada, incluindo chamadas
imediatas ao servidor sem a necessidade de realizar uma solicitação de página e uma repaginação
subseqüente. Para os usuários, isto representa uma maneira mais natural de inserir dados.
O Zen utiliza o mecanismo de gerenciamento de sessão do CSP, fornecendo autenticação de
usuário, criptografia de dados, bem como a retenção de dados persistentes de sessão através das
solicitações de páginas. Toda comunicação entre o navegador e o servidor ocorre através do envio
e recebimento do objeto utilizando uma versão mais sofisticada da técnica comumente chamada
de AJAX (Asynchronous JavaScript and XML).
Páginas baseadas em Zen podem ser facilmente combinadas com páginas desenvolvidas utilizando
outros métodos CSP de desenvolvimento de Web.
O que é um Componente Zen?
Um componente Zen é uma definição de classe que especifica a aparência e o comportamento
de um componente na página. A definição de classe Zen contém – em um único documento –
a definição completa de um componente, incluindo as folhas de estilo, o código servidor e o
código cliente.
Ao ser executado, o Zen cria dois objetos para cada componente utilizado em uma página: um
objeto client-side (que o Zen cria de forma automática na forma de um objeto JavaScript dentro
do navegador) e um objeto server-side. O Zen automaticamente gerencia o estado de ambos
os objetos e gerencia o fluxo de informações entre eles.
58
Tipos de Componentes Zen
A biblioteca Zen inclui componentes que implementam todos os tipos padrão
de controle HTML: caixas de entrada, caixas de texto, botões, check Box, etc.
Estes componentes possuem comportamentos adicionais herdados da classe
de controle Zen.
O Zen inclui ainda um conjunto de componentes mais complexos e ricos de
dados que automaticamente exibem dados contidos na base de dados e que
sabem como atualizar estas informações de modo dinâmico, em resposta a eventos gerados pelo usuário. Por exemplo, o poderoso componente Zen de tabelas
exibe de forma automática os dados contidos em uma tabela HTML utilizando
uma busca realizada na base de dados. O componente de tabelas possui suporte
a paginação, a rolagem, a organização de colunas, a filtros e a uma variedade
de estilos. O conteúdo da tabela pode ser atualizado a partir do servidor sem
a necessidade de repaginar novamente toda a página.
Dentre os outros componentes Zen, incluem-se:
<Menu – Uma variedade de menus é suportada.
<Grid – Adiciona comportamento a tabela de estilo a uma página Web.
<Tree – Exibe dados hierárquicos com um controle em forma de árvore.
<Tab – Um componente de tabulação contém uma série de espaços tabu-
lares, cada qual contendo uma série de outros componentes.
<Chart – Um conjunto rico de componentes de gráficos são implementa-
dos utilizando SVG, incluindo gráficos em linha, de área, em barra, gráfi-
cos tipo pizza, tipo alto-baixo, bem como gráficos XY.
<Graphical Meters – Velocímetros, medidores, etc.; permitem a você exi-
bir dados como componentes visuais dinâmicos.
Modificando a Aparência dos Componentes da Biblioteca Zen
Todos os componentes Zen apresentam suporte a um conjunto de propriedades
que controlam a aparência visual. Os aplicações podem ajustar estas propriedades
ao rodar o sistema para modificarem os valores, o visual e o comportamento
de componentes.
A aparência visual também é controlada pelas definições de estilo do Standard
CSS (Cascading Style Sheet). Podem-se ignorar estes estilos (para modificar
fontes, cores, tamanhos, etc.) no âmbito do aplicação, página ou em nível
individual por componente.
Você pode criar subclasses de componentes da biblioteca Zen para ignorar ainda
mais definições de aparência e comportamento.
Criando Novos Componentes Zen
Uma dos pontos mais fortes do Zen está na facilidade de criar novos componentes.
Cada componente é implementado como uma classe. Para criar um novo componente: (1) crie uma nova classe de componente, a qual pode ser uma subclasse
de um componente já existente; (2) implemente um método que realize o conteúdo HTML do componente; (3) defina os métodos server-side e client-side
que implementem o comportamento de execução do componente; e (4) esteja
certo de que a classe inclui as definições de estilo CSS necessárias para se especificar a aparência visual do componente.
59
Capítulo 4
Como Localizar Aplicações Zen Para Línguas Diferentes
Caso desejado, o Zen automaticamente mantém um conjunto de todos os valores de texto
(títulos, legendas, etc.) exibidos pelos componentes incorporados de um aplicação em uma tabela
especial de localização. Você pode exportar a tabela de localização de um aplicação como um
documento XML, traduzir os valores para outras línguas e importar as novas tabelas.
Durante a execução, o Zen utiliza os valores de texto baseado nas preferências de língua atuais
do navegador do usuário.
Suporte a SVG
O SVG (Scalable Vector Graphics) fornece um modo padrão poderoso para a exibição de ricos
dados gráficos dentro de uma página Web. O Zen incorpora a possibilidade de criação de componentes gráficos que se auto-restitua através da utilização do SVG e os quais incluem um rico
conjunto de componentes pré-desenhados com base no SVG.
Quais Navegadores suportam o Zen?
O Zen funciona com o Firefox (versões 1.5 e superiores) e com o Internet Explorer (versões 6.0
e posteriores). Para o Firefox não há a necessidade de plug-ins – o SVG já vem embutido nele.
Para o Internet Explorer, há a necessidade de se utilizar o plug-in Adobe SVG, caso você deseje
utilizar os componentes SVG do Zen. A biblioteca gerencia as diferenças entre o SVG do Firefox
e o Internet Explorer.
A VANTAGEM DO CACHÉ
Ricas Interfaces de Usuário Web: Podem-se gerar páginas visualmente sofisticadas
e altamente interativas, as quais são visualmente mais semelhantes a interfaces GUI
de aplicações cliente/servidor do que um formulário tradicional e simples de navegador
com um botão de SUBMIT. O usuário acha o formato interativo mais natural e fácil
de utilizar.
Rápido Desenvolvimento Baseado em Objeto: A utilização de componentes
pré-desenhados acelera o desenvolvimento e torna mais simples a realização de modificações posteriores.
Interfaces Consistentes de Usuário: A arquitetura baseada em componentes torna mais
fácil de definir e forçar normas de estilo e comportamento no âmbito do aplicação.
60
InterSystems do Brasil
Praça Prof. José Lannes, 40
10º andar - Brooklin Novo
04571-100 - São Paulo - SP
Tel: 55 11 3014 7000
Fax: 55 11 3014 7001
Call Center: 0800 888 22 00
InterSystems.com.br
InterSystems Caché é marca registrada da InterSystems Corporation. Outros nomes de produtos são marca registrada de seus respectivos fabricantes.
Copyright © 2008 InterSystems Corporation. Todos os direitos reservados. 05-08
Download