Professional Documents
Culture Documents
Índice
Introdução 1
Capítulo 1
Capítulo 2
Capítulo 3
Capítulo 4
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 conhe-
cesse 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 redu-
zem seu uso no mundo atual: primordialmente
no que diz respeito ao desempenho/escalabili-
dade, facilidade de uso e adaptação às tecnologias
de desenvolvimento atuais.
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.
1
Introduzindo o Caché
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 progra-
mada 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
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
5
Capítulo 1
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, comporta-
mentos 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.
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é elimi-
nam muito da incômoda sintaxe de joins, tornando o SQL ainda mais fácil de utilizar.
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 (“pro-
priedades”) 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é, chama-
das 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 es-
condidas 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:
(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.
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 proprie-
dades 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, portan-
to 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 proprie-
dades 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.
A VANTAGEM DO CACHÉ
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.
ARMAZENAMENTO DE OBJETOS…
O Caché possui uma estrutura de dados multidimensional que armazena naturalmente da-
dos de objetos. O resultado disso é o rápido acesso a dados e uma programação mais ágil.
Certamente, muitas ferramentas (tais como geradores de relatórios) utilizam SQL, e não tecnolo-
gia 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 desem-
penho 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
Acesso Multimensional
ACESSO INTEGRADO À BASE DE DADOS
O Caché automaticamente mapeia o modo como objetos e tabelas estão armazenados nas estrutu-
ras multidimensionais, ou permite ao programador controlar de forma explícita o mapeamento.
A VANTAGEM DO CACHÉ
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 necessi-
dade 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.
Os arrays multidimensionais do Caché são chamados de “globais”. Os dados podem ser arma-
zenados 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, tama-
nhos, cores e estampas pode ter uma estrutura como esta:
^Estoque(ítem,tamanho,cor,estampa) = quantidade
^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 quanti-
dade), 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). Entre-
tanto, 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:
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ó:
Para tornar isto simples, o Caché apresenta uma função chamada $list(), que pode agregar múlti-
plos 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.
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.
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 melho-
ra 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.
Namespaces
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 multidi-
mensionais). 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
12 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 é transferi-
da 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É
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.
13
Capítulo 2
ACESSO SQL
SQL é a linguagem de consultas do Caché. Ela é suportada por um conjunto completo de capaci-
dades 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.
SELECT SELECT
SC.NomeCompleto, SM.Descr, MS.Valor, Cliente->NomeCompleto,
SI.InvData, SI.InvNumero Cliente->VendaMercado
->Descr, Valor,
FROM VendaItem->InvData,
VendaPrincipal MS, VendaItem
VendaItem SI, ->InvNumero
VendaProduto SP,
VendaCliente SC, FROM
VendaMercado SM VendaPrincipal
WHERE WHERE
SI.VendaItemID *= MS.VendaItem Produto->Descr = ‘Martelo’
AND SP.VendaProdutoID *= MS.Produto
AND SC.VendaClienteID *= MS.Cliente
AND SM.VendasMercadoID *= ‘Martelo’
14
Acessando Bancos de Dados Relacionais com o Gateway Relacional do Caché
A VANTAGEM DO CACHÉ
SQL Mais Rápido: Aplicações relacionais podem desfrutar de uma melhora de desem-
penho 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.
15
Capítulo 2
OBJETOS DO CACHÉ
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 tecno-
logias 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 signifi-
cativamente 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.
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
A VANTAGEM DO CACHÉ
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 O Caché é completamente habilitado
de métodos é um método executado no momento da compilação, gerando para objetos, oferecendo todo o poder
um código que pode ser rodado quando o programa é executado. Um gerador da tecnologia de objetos a desenvolve-
de métodos tem acesso às definições de classe, inclusive à definições e parâme- dores de aplicações de processamento
tros de propriedades e métodos, permitindo a ele gerar um método que seja transacional de alto desempenho.
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 Desenvolvimento Rápido
uma classe de herança múltipla que se customiza para a subclasse. 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 simplifi-
cam a manutenção dos aplicações,
deixando os programadores alavanca-
rem seus trabalhos em vários projetos.
17
Capítulo 2
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:
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”).
Word-Aware Indexing
Eliminação de ruído
X X X X
I am searching for some text
18
Í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.
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 palavras-
chave ou palavras relacionadas.
19
Capítulo 2
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.
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 armaze-
namento. 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É
21
Capítulo 2
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 infor-
maçã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 automatica-
mente a consistência do cache através da rede e propaga
as mudanças de volta para os Servidores de Dados.
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 produ-
tividade 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 Apli-
caçõ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. Confi-
gurar Servidores de Dados como
um cluster de hardware para
a prevenção de falhas em servi-
dores de dados de reserva pode
aumentar a disponibilidade de
forma significativa.
O uso do ECP é invisível para as aplicações. Aquelas que são escritas para Uso Invisível: Os aplicações não
rodar em um único servidor rodam em um ambiente de servidores múltiplos precisam ser especificamente
sem alteração. Para utilizar o ECP, o gerente do sistema simplesmente identi- escritos para o ECP – aplicações
fica um ou mais Servidor de Dados para um Servidor de Aplicações. A partir Caché tomam vantagem do ECP de
de então, mapeia-se o Namespace para indicar que as referências a algumas ou forma automática, sem mudanças.
a todas as globais (ou a partes de globais) se referem àquele Servidor
de Dados remoto.
Flexibilidade de Configuração
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é 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
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 inter- A VANTAGEM DO CACHÉ
rupções, com o usuário passando apenas por uma leve pausa.
Bullet-Proof: O Caché Write-
Image Journaling e outros
recursos de integridade garantem,
Um Cluster ECP Fail-Over 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 desenvol-
vimento de aplicações de três maneiras:
O Caché fornece estas capacidades de segurança ao mesmo tempo em que minimiza o ônus
no desempenho de aplicações.
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.
27
Capítulo 2
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 apli-
caçã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
28
Criptografia da Base de Dados
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.
Auditoria
29
Capítulo 3
<Máquina Virtual Caché que roda três linguagens de desenvolvimento tipo script – Caché
ObjectScript, Caché Basic, e Caché MVBasic.
<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.
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é.
<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é.
30
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
A VANTAGEM DO CACHÉ
multidimensionais por meio de chamadas à memória compartilhada, a qual acessa
uma base de dados cache compartilhada. Todas as demais tecnologias (Java, C++,
Desenvolvimento Rápido de Aplica-
ODBC, JDBC, etc.) se conectam através da Máquina Virtual Caché para acessar
ções: O desenvolvimento
a base de dados.
de aplicações complexas com
o Caché ObjectScript é radicalmente
mais rápido do que com qualquer
Interoperabilidade Completa outra grande linguagem – muitas
vezes de 10 a 100 vezes mais
Como o Caché ObjectScript, o Basic e o MVBasic estão todos instalados na rápido. Mais rápido significa dizer
mesma Máquina Virtual Caché, eles possuem interoperabilidade completa: que os projetos têm uma chance
melhor de sucesso – com menos
<Qualquer método de objeto pode ser escrito em qualquer linguagem – programadores – e podem ser
a mesma classe pode usar todas as três linguagens. ajustados mais rapidamente,
conforme as aplicações necessitem
<O uso das funções de cada uma das linguagens pode acessar um código de modificações.
escrito nas demais linguagens.
Curva de Aprendizado Mais Curta:
<Eles compartilham variáveis, Arrays e objetos. O Basic é talvez a linguagem
de computador mais conhecida
do mundo. Desenvolvedores que
Desenvolvimento Rápido/Disponibilização Flexível conhecem Visual Basic podem
começar a escrever código em
Os programadores podem, em quase todos os casos, desenvolverem aplicações Basic de forma instantânea –
mais rapidamente, sendo que estes aplicações rodarão significativamente mais o modelo de objeto Caché é
rápidos e com maior escalabilidade se a maior parte possível do código for escrita aprendido facilmente.
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 Mais Rápido e com Mais Escalabi-
de hardware ou de sistemas operacionais. O Caché lida com as diferenças lidade: A Máquina Virtual Caché,
de hardware e de sistema operacional de forma automática. com seu acesso direto à base de
dados, oferece aplicações mais
rápidas que podem ter seu uso
ampliado a dezenas de milhares
Linguagens Script de usuários utilizando hardware
de baixo custo.
31
Capítulo 3
CACHÉ OBJECTSCRIPT
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)
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.
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.
32
Assim, no Caché ObjectScript, as propriedades de objeto são fortemente tipi-
ficadas, 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 con-
forme 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:
abc(3)
abc(3,-45.6,”Sim”)
abc(“Contar”)
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 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
Métodos também podem ser executados através de um comando tipo “DO” quando nenhum
valor resultante é necessário. Por exemplo:
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.
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)
Tanto a chamada por valor quanto a chamada por referência são suportadas por parâmetros.
35
Capítulo 3
Rotinas
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.
Um procedimento (ou sub-rotina) que tenha um valor resultante de interesse deve ser solicitado
utilizando a sintaxe de função “$$”
36
Métodos de Objeto
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:
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 procedimen-
tos ou podem estar no mesmo nível que um procedimento em uma rotina.
37
Capítulo 3
BASIC
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.
<Arrays não precisam ser declarados e são sempre esparsos – O Caché só reserva espaço
conforme os nós são inseridos.
38
Acesso a Objeto com Basic
Aqui estão alguns exemplos de códigos que acessam a propriedade das pessoas:
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 arma-
zenado. 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 mani-
pular 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 exata-
mente 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.
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 esque-
ma da base de dados automaticamente. O Caché suporta todas estas abordagens:
<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.
40
Objetos Acessados Através de Classes Projetadas
A VANTAGEM DO CACHÉ
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é. Flexibilidade: Desenvolvedores de
Para programas em Java, estas classes aparentam ser como qualquer outra classe Java possuem opções no que diz
Java local. A classe Java gerada se utiliza de uma biblioteca Java fornecida pela respeito a acessar objetos Caché
InterSystems para lidar com qualquer comunicação entre o Cliente e o Servidor. – eles podem utilizar SQL e JDBC
O estado de cada objeto Caché é mantido no Servidor de Aplicações Caché, ou objetos projetados mais natural-
embora propriedades de classe estejam também armazenadas em memória cache mente, como classes Java ou Enter-
no cliente para otimizar o desempenho. Chamadas de método solicitam méto- prise Java Beans. Com o Jalapeño,
dos correspondentes no Servidor de Aplicações Caché – incluindo métodos para os desenvolvedores têm a opção de
armazenar um objeto na base de dados e depois recuperá-lo. Para o cliente, não trabalhar inteiramente em seu ambi-
é visível qual Servidor de Dados Caché contém as informações ou mesmo se ente de desenvolvimento Java predi-
os dados de objeto estão armazenados em uma base de dados relacional acessada leto, deixando o Caché fornecer os
pelo Servidor de Aplicações Caché. métodos para armazenar e recuperar
objetos automaticamente sem tocar
nas classes de desenvolvedores de
Métodos Caché Escritos em Java base de dados.
Métodos de classe Caché podem ser escritos em Java usando o Caché Studio. Alta Performance: Todos os aplica-
Contudo, ao contrário do Caché ObjectScript e do Basic, os métodos Java não ções Java, independentemente de
são executados pela Máquina Virtual Caché. Ao invés disso, eles são incluídos como estão conectados ao Caché,
na classe Java gerada e são executados em qualquer Máquina Virtual Java. se beneficiam de seu desempenho
Tal tipo de código não é acessível a partir de métodos não Java. superior e de sua escalabilidade.
41
Capítulo 3
Ao invés de iniciar o processo com classes Caché e projetá-las como componentes Java, a tecno-
logia 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 con-
sultas às classes do desenvolvedor.
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.
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 de-
senvolvedor 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.
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.
A VANTAGEM DO CACHÉ
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 desenvo-
lvedor ter realizado um mapeamento objeto-relacional.
43
Capítulo 3
A VANTAGEM DO CACHÉ Graças a seu acesso aberto e flexível a dados, o Caché funciona de forma imper-
ceptível com o .NET. Há muitos modos de conectar ambos – incluindo objetos,
Servidos de Dados Veloz: SQL, XML e SOAP. Desenvolvedores podem criar aplicações com as tecnologias
Aplicações web que utilizam o de sua preferência – todas elas se beneficiarão da performance e escalabilidade
Caché como um servidor de dados superior do Caché.
se beneficiam da imensa escalabili-
dade e alto desempenho oferecidos
pelo engine de dados multidimen- ADO.NET
sional do Caché.
ADO.NET é uma nova materialização do ADO, otimizado para uso na estrutura
Desenvolvimento .NET Mais .NET. Sua intenção é tornar aplicações .NET “bases de dados independentes”,
Rápido: Os desenvolvedores serão utilizando normalmente o SQL para se comunicar com estas bases. Através de
mais produtivos se trabalharem seu acesso de dados relacionais, o Caché oferece suporte nativo a ADO.NET.
com suas ferramentas preferidas em Ele também suporta ODBC.NET, da Microsoft, com conectividade read-only
ambientes que lhes seja familiar. (somente leitura) do SOAP, integrada ao ADO.NET.
O Caché suporta uma ampla varie-
dade das mais comuns ferramentas
e tecnologias de desenvolvimento, Web Services
oferecendo ambos os acessos a
dados de objeto, como também Há duas maneiras de se utilizar web services no .NET. Uma delas é enviando
o acesso SQL. documentos XML por HTTP. A outra é utilizando protocolo SOAP para simpli-
ficar 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.
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 inter-
cambiar 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.
Importando XML
O Caché vem com outras classes que fornecem métodos, possibilitando aos desenvolvedores:
45
Capítulo 3
A VANTAGEM DO 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 descri-
tor 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 multidi-
mensional 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é.
Aplicações MultiValue geralmente tratam a base de dados como um conjunto de arquivos aces-
sados 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” mul-
tidimensional 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 # ID Ítem
Cliente Atributo 1
DataNF Atributo 2
Partes Atributo 3 (com MultiValue)
Quantidades Atributo 4 (com MultiValue)
Preços Atributo 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
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 obje-
tos 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.
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, inde-
pendentemente da linguagem utilizada nos métodos das classes.
Aqui estão alguns exemplos de código, no qual “pessoa” é uma referência de objeto:
O command shell do MultiValue pode rodar a partir de um terminal. Além das capacidades nor-
mais 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
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.
49
Capítulo 4
“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 tradicio-
nais. 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:
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É
50
Algumas das características do Caché Server Pages são:
<Arquitetura de Objetos – Como cada página corresponde a uma classe, o código e ou-
tras 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.
<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, ofe-
recendo 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é.
É 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
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.
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.
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
A VANTAGEM DO CACHÉ
Um dos desafios enfrentados por desenvolvedores é a natureza inerentemente
stateless (sem estado) da web – normalmente não há uma maneira simples de Ao preservar a informação
se reter informações no servidor entre uma solicitação e outra. Os aplicações de estado no servidor de forma
geralmente enviam para o navegador todas as informações de estado que eles automática, há menos tráfego
precisam reter na forma de URL’s ou de campos escondidos de formulário. de rede e menos sobrecarga no
Esta não é uma técnica eficiente para aplicações mais complexas, que podem servidor, já que os aplicações não
recorrer a salvar temporariamente dados em arquivos ou bases de dados. Infeliz- precisam ficar arquivando e aces-
mente, isto impõe uma sobrecarga significativa ao servidor e torna a programação sando dados para cada página
consideravelmente mais difícil. solicitada. E programar o aplicação
é mais simples.
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 O uso de Páginas Dinâmicas
de Sessão que contém informações genéricas sobre a sessão, além de propriedades de Servidor e do Servidor de
que permitem ao programador controlar várias características desta. O aplicação Aplicações Caché resulta em uma
pode armazenar seus próprios dados no objeto de Sessão, o qual é retido auto- maior flexibilidade para se respon-
maticamente de uma solicitação a outra. der a solicitações, em uma execução
mais veloz e sem o risco de erros
O aplicação determina o estado a preservar, estabelecendo a propriedade Preserve de aplicações fazerem o servidor
no objeto de Sessão para 0 ou 1 (o padrão é 0, o que pode ser modificado web “cair”, bem como em um am-
de modo dinâmico durante a execução). biente de programação mais rico.
<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).
O Objeto de Requisição
53
Capítulo 4
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 diferen-
tes 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
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.
Embora uma aplicação inteira simples possa ser criado desta maneira, um pro-
gramador 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 mui-
tos 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.
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.
HIPEREVENTOS
(HYPER-EVENTS)
“#server(...)#”
onClick=”Server(AdicAo
Carrinho()#”
56
Capítulo 4
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.
Páginas baseadas em Zen podem ser facilmente combinadas com páginas desenvolvidas utilizando
outros métodos CSP de desenvolvimento de Web.
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
Você pode criar subclasses de componentes da biblioteca Zen para ignorar ainda
mais definições de aparência e comportamento.
Uma dos pontos mais fortes do Zen está na facilidade de criar novos componentes.
Cada componente é implementado como uma classe. Para criar um novo compo-
nente: (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 con-
teú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 especifi-
car a aparência visual do componente.
59
Capítulo 4
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 com-
ponentes 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.
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É
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