Skip to content

Software Público Review: OpenACS

24/07/2009

Estou iniciando com esse post uma série de reviews sobre as soluções que estão hospedadas no Portal do Software Público. A ideia não é fazer uma descrição detalhada de tecnologias, mas sim fornecer uma visão geral da arquitetura e os principais domínios da aplicação, principalmente para aqueles que ainda não conhecem. Para começo, nada mais óbvio do que escolher a solução que conheço melhor: o OpenACS.

Sempre que me perguntam o que é o OpenACS eu sinto uma certa dificuldade em descrever de primeira, de bate-pronto. E de fato é difícil descrever todas as suas possibilidades em algumas palavras. A resposta padrão é: framework de desenvolvimento Web.  Contudo, considerando que quase o mundo todo programa em Java, a palavra pode trazer mais confusão do que ajuda. Afinal de contas, esse pesoal considera Struts um framework, mas não quero entrar em polêmicas. Em comparação com essas, considero mais correto dizer que ele é um conjunto agrupado de ferramentas para o desenvolvimento de sistemas para a Internet, com foco em comunidades virtuais.

Quando digo que o foco é comunidades virtuais, quero dizer que essa é a área de aplicação que mais utiliza todo o seu potencial. Afinal, foi construído em comunidade desde o princípio, sendo um dos mais antigos projetos de Software Livre que eu conheço. Sua história é bastante curiosa, tendo sido construído por uma empresa que tinha como objetivo principal reaproveitar o trabalho que era desenvolvido várias vezes para diferentes clientes. Se você não quer saber de história, clique aqui.

Histórico

A ideia era conseguir construir um núcleo que fosse minimamente estável e facilmente adaptável a qualquer cliente nas mais diferentes realidades. Eles imaginavam que, como todos os clientes tinham algumas demandas em comum, como sistema de login, organização em grupos, fóruns, e outros, não fazia sentido redesenvolver tudo para cada cliente. E assim foi desenvolvido o núcleo (core) chamado de  ACS (ArsDigita Community System), no ano de 1998.

O grande passo para o OpenACS e a comunidade acontece no no ano de 1999, quando um movimento liderado por um brasileiro, Roberto Melo, que até hoje é membro da comunidade PostgreSQL, fez nascer a comunidade internacional de desenvolvedores. No início, o conjunto de ferramentas suportava apenas Oracle como banco de dados, e como uma tentativa de tornar tudo livre, ele propôs a migração do projeto para PostgreSQL e iniciou o projeto ACS/Pg no Source Fourge. A iniciativa é considerada o pontapé inicial da comunidade, uma vez que mobilizou uma grande quantidade de desenvolvedores, gerando logo depois o site openacs.org.

Mais um marco importante acontece no ano de 2001: a empresa que era principal mantenedora do código (ArsDigita), chegou à conclusão que a tecnologia estava obsoleta, uma vez que a linguagem de programação para a aplicação era Tcl, e a onda Java já corria forte nos EUA. Foi então que a empresa decidiu que o sistema deveria ser completamente migrado para Java, considerando o ACS3 obsoleto, ainda em Tcl. A comunidade de desenvolvedores, que já tinha mudado o nome do projeto ACS/Pg para OpenACS, não se interessou pela mudança e decidiu manter o desenvolvimento baseado no ACS3 em Tcl. A partir daí, uma série de eventos históricos se sucede:

  • Em 2001, a versão mantida pela comunidade (OpenACS) supera o ACS4 em desenvolvimento;
  • No final de 2001, o ACS4.6 em Java tem sua licença modificada e exclui completamente a comunidade;
  • Em fevereiro de 2002 a ArsDigita é comprada pela Red Hat, que muda o nome do ACS para Red Hat Web Application Framework, e passa a inclui-lo no seu portfólio de produtos;
  • Em outubro de 2002, a comunidade lança o OpenACS 4.6.0, a primeira versão desenvolvida completamente sem a ajuda da ArsDigita.

Para quem quiser mais detalhes sobre a história, pode acessar esse link da comunidade e esse artigo sobre o início e o fim da ArsDigita.

O OpenACS

Deixando um pouco a história de lado, vamos partir para a parte prática do negócio: afinal, como funciona essa série de ferramentas? O OpenACS é composto de um núcleo (core) e vários outros pacotes, como são conhecidas as aplicações compatíveis. Falando de estrutura tecnológica, ele funciona em algum nível acima do servidor de aplicação e a linguagem de programação, fornecendo uma série de ferramentas que estendem as possibilidade de ambos. A figura a seguir explica isso um pouco melhor:

Diagrama dos subsistemas

Diagrama dos subsistemas

No item 3 do diagrama, observamos a figura de um servidor de alta performance. O OpenACS possui uma forte integração com o AOLServer, que possui um interpretador Tcl embarcado e permite uma programação diretamente no nível do servidor. São muitas as linguagens que tentam realizar implementações parecidas com outros conjuntos de servidores/linguagens diferentes, mas todas elas oferecem algum tipo de problema difícil de contornar. Quem quiser entender melhor o aspecto do interpretador Tcl embarcado, tem um post muito bom na comunidade aqui que explica as diferenças. A implementação que talvez mais se aproxima da aproximação entre o AOLServer e o Tcl é o conjunto JBoss + Java, mas por tratar-se de conceitos muito diferentes fica difícil fazer comparações. É ainda no nível do servidor que acontece a conexão com o banco de dados, que pode ser Oracle ou PostgreSQL. Os drivers permitem pool de conexões, transação em nível da aplicação, enfim, uma sére de features que são muito importantes para garantir a performance da sua aplicação.

De posse do diagrama, podemos observar que uma instalação padrão do OpenACS consiste nas seguites etapas:

  1. Instalação do sistema operacional;
  2. Escolha e instalação de um ou mais banco de dados (Oracle, PostgreSQL, Oracle + PostgreSQL);
  3. Instalação da linguagem Tcl;
  4. Instalação do AOLServer;
  5. Download do código do OpenACS

Não é o objetivo abordar instalação aqui, pois já há muita documentação na comunidade. Se você quiser informações sobre o tema, acesse a documentação de instalação pelo source aqui, ou procure pelos pacotes para Debian e Ubuntu aqui. Há um instalador para RWindows também, mas não vou fazer propaganda dessa porcaria!

Percebo também que é uma dúvida frequente as pessoas não saberem direito o que fazer após a instalação. Para responder a essa pergunta, é preciso conhecer um pouco da estrutura do OpenACS, que pode ser descrita pelo seguinte diagrama:

ROOT/
    bin/
        Various executables and scripts for server maintanence.
    content-repository-content-files/
        content repository content stored in the filesystem.
    etc/
        Installation scripts and configuration files.
    packages/
        acs-admin/
        acs-api-browser/
        ... many many more...
        workflow/
    log/
        Server error and access logs
    tcl/
        bootstrap code
    www/
        Pages not in packages (static content, customized pages)

Fonte: http://www.openacs.org/doc/current/packages.html#id2512028

Quando baixamos o código, recebemos a estrutura de pastas acima, composta por vários diretórios. Dois deles são essencialmente importantes para o desenvolvedor: o www e o packages. Tudo o que colocamos na pasta www está diretamente disponível da Internet para os usuários que acessarem o site. Um dos bons princípios de projeto é colocar nessa pasta somente os arquivos de template que serão gerais. Sim, é possível criar arquivos de estilo genéricos, uma vez que o OpenACS utiliza um modelo MVC bastante simples: os arquivos com extensão .adp servem ao estilo, os arquivos .tcl contém a lógica de programação e os .xql abrigam todas as consultas ao banco de dados.  Dentro da pasta packages estarão todas as aplicações que você baixou e/ou deciciu instalar do respositório. Todas as aplicações devem seguir um modelo de diretórios, que será reconhecido pelo instalador para ser possível adicioná-la à sua instalação.

ROOT/
  +-- packages/    APM Root
        |
        +-- notes/  Package Root
        |     |
        |     +-- notes.info                              Package Specification File
        |     +-- sql/
        |     |     |
        |     |     +-- oracle/
        |     |     |        |
        |     |     |        +-- notes-create.sql         Data Model Creation Script for Oracle
        |     |     |        +-- notes-drop.sql           Data Model Drop Script
        |     |     |        +-- *.sql                    Data Model Files
        |     |     |        +-- upgrade/
        |     |     |            +-- upgrade-4.1-4.5.sql  Data Model Upgrade Scripts
        |     |     +-- postgresql/
        |     |     |        |
        |     |     |        +-- notes-create.sql         Data Model Creation Script for PostgreSQL
        |     |     |        +-- notes-drop.sql           Data Model Drop Script
        |     |     |        +-- *.sql                    Data Model Files
        |     |     |        +-- upgrade/
        |     |     |            +-- upgrade-4.1-4.5.sql  Data Model Upgrade Scripts
        |     +-- tcl/
        |     |     |
        |     |     +-- notes-procs.tcl                   Tcl Library
        |     |     +-- notes-procs.xql                   SQL92 Queries for notes-procs.tcl
        |     |     +-- notes-procs-oracle.xql            Oracle-specific queries for notes-procs.tcl
        |     |     +-- notes-procs-postgresql.xql        PostgreSQL-specific Queries for notes-procs.tcl
        |     |     +-- notes-init.tcl                    Tcl Initialization
        |     |     +-- notes-init.xql                    Queries for notes-init.tcl (work in all DBs)
        |     |     +-- *.tcl                             Tcl Library Files
        |     +-- lib/
        |     |     |
        |     |     +-- *.tcl                             Includable page logic
        |     |     +-- *.adp                             Includable page templates
        |     +-- www/
        |     |     |
        |     |     +-- admin/                            Administration UI
        |     |     |     +-- tests/                      Regression Tests
        |     |     |     |     +-- index.tcl             Regression Test Index Page
        |     |     |     |     +-- ...                   Regression Tests
        |     |     |     +-- index.tcl                   Administration UI Index Page
        |     |     |     +-- ...                         Administration UI Pages
        |     |     |
        |     |     +-- doc/                              Documentation
        |     |     |     +-- index.html                  Documentation Index Page
        |     |     |     +-- ...                         Administration Pages
        |     |     +-- resources/                        Static Content
        |     |     |     +-- ...                         Static Content files
        |     |     +-- index.tcl                         UI Index Page
        |     |     +-- index.adp                         UI Index Template
        |     |     +-- index.xql                         Queries for UI Index page
        |     |     +-- *.tcl                             UI Logic Scripts
        |     |     +-- *.adp                             UI Templates
        |     |     +-- *-oracle.xql                      Oracle-specific Queries
        |     |     +-- *-postgresql.xql                  PostgreSQL-specific Queries
        +-- Other package directories.

Fonte: http://www.openacs.org/doc/current/packages.html#id2572097

Pessoalmente acredito que aí reside o maior poder do OpenACS. É muito fácil construir uma aplicação, e já existem dezenas e até centenas de aplicações desenvolvidas para a plataforma. Alguns exemplos de aplicações baseadas em OpenACS são:

  • Aplicações completas: constituem uma série de pacotes para finalidades específicas.
    • dotLRN: Sistema de ensino à distância também amplamente utilizado como ferramenta de comunidades virtuais.
    • ]Project-Open[: Sistema de ERP, CRM e várias outras buzzwords relacionadas ao mundo dos negócios.
    • XoWiki: pode ser tanto uma ferramenta como uma suíte completa de aplicações para CMS. Há um grande desenvolvimento sendo feito em cima dessa ferramenta na comunidade atualmente.
  • Principas pacotes: pacotes que podem ser instalados em seu sistema sem necessariamente compreender toda uma série completa de aplicações. Talvez sejam melhor definidos como ferramentas.
    • Fórum
    • Chat
    • FAQ
    • Enquetes, pesquisas e avaliações escolares
    • Repositório de objetos de aprendizagem
    • Armazenamento de arquivos e outros conteúdos com controle de versão
    • Muitas outras mais

Veja a lista mais  completa de aplicações aqui, aqui e aqui.

Links onde você pode encontrar mais informações:

Agradecimentos especiais aos meus amigos Orzenil Silva e Rodrigo Proença, por terem me ensinado tudo o que sei,e ao amigo Landim, grande companheiro da comunidade.

Obs.: Grande parte do material aqui reproduzido foi inspirado nas apresentações do Orzenil Silva.

Anúncios
5 Comentários leave one →
  1. 29/07/2009 13:31

    Só por curiosidade, porque Struts não é framework?

    • Eduardo Santos permalink
      29/07/2009 13:57

      Para não começar com Flamewars, a aplicação precisa atender a uma série de requisitos para ser um framework completo, entre eles a geração automática de código e a modularidade. O própio OpenACS não é um framework 100% funcional na parte de geração automática de código. O Struts seria algo mais próximo a um framework de software, enquanto o OpenACS seria um framework com características intermediárias dos dois. Quando digo que ele não pode ser considerado um framework, imagino o lado do desenvolvedor, que não pode construir uma aplicação completa apenas com ele.

      • Jean Duarte permalink
        27/08/2009 17:19

        Parabéns pela iniciativa, mas acho que vc foi infeliz ao dizer que Struts não é framework. Essa é a definição para ele, assim como para outros tantos. O termo framework é bem amplo… Recomendo a leitura da Wikipedia. http://pt.wikipedia.org/wiki/Framework .

        Abraços

  2. Eduardo Santos permalink
    02/09/2009 14:34

    Olá Jean,

    Entendo que o conceito de framework é amplo, e que na extensão desse conceito cabe o Struts, mas como disse no post acima, não é possível construir uma aplicação completa somente com ele. Por isso não é um framework 100% funcional, na minha visão, da mesma forma que o OpenACS também não é.

    Mas é uma questão de opinião.

  3. 06/10/2010 11:56

    Muito Bom. Você explicou muita coisa. Já existe módulos prontos. Preciso montar minha intranet. Já usei Drupal, Joomla, knowledgeTree, Liferay, Lucid, MindTouch, Next IDE, Nuxeo ,TYPO3. Vou testar e torcer para dar certo. Obrigado!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: