The Ruby Way to communicate with SAP Applications
Blue Ruby é um projeto ainda em desenvolvimento pela SAP Research que tem como finalidade criar um ambiente “enterprise-ready” para dar suporte à linguagem Ruby, executando nativamente códigos Ruby dentro da ABAP Virtual Machine. Nas palavras de Juergen Schmerder, o projeto reúne “o melhor de ambos os mundos”. Isto é, o projeto visa integrar as características marcantes em Ruby, como: programação puramente orientada a objetos, portabilidade, produtividade, sintaxe limpa, tipagem dinâmica e escalabilidade; com a robustez do SAP Web AS.
Para entender um pouco melhor sobre a complexidade, integração, status atual do projeto e objetivos, separei o assunto em tópico, como podemos verificar a seguir:
Um pouco de história: A Linguagem Ruby
Como já é de conhecimento da maioria dos profissionais da área de desenvolvimento web, a linguagem Ruby foi projetada e desenvolvida pelo japonês Yukihiro "Matz" Matsumoto, em 1995.
Ao projetar a linguagem, Matz reuniu os principais pontos de outras linguagens, como: as expressões regulares de Lisp, o lambda calculus de Eiffel, a orientação a objetos de Smalltalk, a tipagem dinâmica de Perl; e outras características provenientes de Python, Ada e CLU.
Algumas da principais característica da linguagem a orientação a objetos pura, sintaxe limpa, mixins, iterators, closures, exception handling, automatic garbage collection, metra-programação, introspecção, reflexão, continuations, generators e suporte a implementação de DSLs (Domain Specific Languages).
Nos paradigmas de programação Ruby é caracterizada como linguagem funcional, imperativa, reflexiva e orientada a objetos.
A linguagem Ruby foi escrita em C. E, de acordo com seu criador, Ruby foi criada para ser uma linguagem de scripting mais poderosa que Perl e mais orientada a objeto que Python. A primeira versão da linguagem tornou-se de conhecimento público no final de 1995, em sua versão 0.95.
Ainda de acordo com Matsumoto, Ruby foi criada visando não somente a produtividade mais a diversão, isto é, a fluência e comunicação programador/máquina.
“Often people, especially computer engineers, focus on the machines. They think, "By doing this, the machine will run faster. By doing this, the machine will run more effectively. By doing this, the machine will something something something." They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves.”
( Matsumoto ).
Um exemplo do clássico “Hello World” escrito em Ruby:
puts “Hello World”
SAP Web Application Server
O SAP Web Application Server faz parte da plataforma SAP NetWeaver. É um middleware utilizado para o desenvolvimento e execução de aplicações web server-side e client-side. Estas aplicações web pode conter desde código HTML estáticos até códigos mais complexos, como códigos dinâmicos (XHTML e JavaScript).
Outro exemplo de servidores de aplicações web é o WebSphere AS, da IBM; WebLogic, da BEA Systems; Glasshfish, Apache, JBoss, etc.
Com o SAP WAS é possível a implementação e execução de sistemas baseados em ABAP e JAVA. Os sistemas baseados em ABAP podem ser implementados por BSP (Business Server Pages – explicado no post anterior).
Já os sistemas em Java podem ser implementados através de Servlets, JSP, JSPDynPages, etc.
Resumidamente, o SAP Web AS funciona da seguinte forma:
O usuário, através do web browser, envia uma solicitação ao servidor: Efetuar uma busca por fornecedor, por exemplo:
- A solicitação é recebida pelo componente ICM (Internet Communication Manager) server, já dentro do servidor de aplicação.
- Posteriormente, dependendo do tipo de solicitação (Abap ou Java) o ICM envia para o dispatcher correspondente.
- Dentro da engine dos sistemas (ABAP ou Java), o mesmo executa os work processes necessários, realizando a consulta no banco de dados, se for o caso, envia informações ao servidor de mensagens.
- Ao final do processamento, a engine devolve a resposta ao usuário (dados de exibição).
SAP Blue Ruby Virtual Machine
O projeto Blue Ruby está sendo implementado como uma extensão da máquina virtual ABAP. O runtime e as bibliotecas da máquina virtual Blue Ruby estão sendo, também, implementadas em ABAP para que haja compatibilidade dos aplicativos implementados em Ruby com o ambiente ABAP.
Blue Ruby é uma evolução organizada, onde é executada dentro do SAP não necessitando a utilização de qualquer tipo de servidor adicional e possibilita a implementação de DSLs (Domain Specific Languages).
Segundo os autores do projeto, o objetivo é dar ao desenvolvedor uma flexibilidade maior na construção de aplicações e extensões. As aplicações em Ruby podem se comunicar com os programas em ABAP e vice-versa, isto é, programas em Ruby podem compartilhar informações com códigos ABAP realizando chamadas nativas aos módulos de funções, BAPIs, Serviços, RFCs, etc. O mesmo deve acontecer no sentido oposto, onde programas ABAP podem ser capazes de realizar chamadas às classes e métodos Ruby. Outro desafio para a equipe desenvolvimento é estabelecer a comunicação entre as linguagens com o mínimo de overhead.
Ainda segundo eles, as aplicações de missão crítica dentro do SAP continuarão a ser implementadas em Java e ABAP, deixando o Blue Ruby como um recurso complementar.
Para executar um código Ruby dentro do ambiente SAP, o código primeiramente é compilado para uma linguagem intermediária chamada BRIL (Blue Ruby Intermediate Language). Esta conversão é realizada toda vez em que uma aplicação Ruby é gravada dentro da Blue Ruby VM; isto acontece para minimizar o impacto na performance em tempo de execução.
Para facilitar o entendimento deste conceito (BRIL), pode-se fazer uma comparação com a linguagem Java, onde o código Java é convertido em bytecode dentro da JVM para ser executado.
Comparação entre os códigos em Ruby e Bril:

Após a gravação do código Ruby na Blue Ruby VM, o sistema converte o mesmo para código BRIL e o armazena no Blue Ruby File System.
Embora a proposta do projeto seja a integração 2 dois ambientes de programação. Um filtro e/ou permissão de acesso está sendo desenvolvido neste sentido.
Com o objetivo de dar flexibilidade ao desenvolvedor e ao mesmo tempo manter a consistência e integridade dos dados e do ambientes, a equipe de desenvolvedores estabelecer7aacute; algumas &lrquo;regras” para a comunicação Ruby -> ABAP. A comunicação entre Ruby e ABAP é feita por um túnel bem definido chamado de pontes (“bridges”). Através desta ponte, programas em Ruby poderão fazer uso de dados gerenciados por aplicações em ABAP, mas não será permitida a atualização de dados no banco através da linguagem, diretamente; evitando a possibilidade de códigos Ruby maliciosos contornarem as autenticações em ABAP do sistema.
As chamadas de interfaces, classes, métodos e atributos atrav&eacut;s de um programa ABAP é possível através de BAdIs Bridges.
Exemplo de programa Ruby chamando a Bapi de consulta ao endereço do parceiro de negócio “BAPI_BUPA_ADDRESS_GETDETAIL”:
Require ‘rfc’
Bapi = rfc.new ‘BAPI_BUPA_ADDRESS_GETDETAIL’
Bapi.businesspartner = ‘0000000001’
Bapi.call!
puts bapi.addressdata.c_o_name
puts bapi.addressdata.city
puts bapi.addressdata.district
puts bapi.addressdata.street
puts bapi.addressdata.str_abbr
puts bapi.addressdata.house_no
. . .
Status do projeto
De acordo com o site do projeto, pode-se perceber que o status do projeto, com a data de atualização mais recente em 20/julho/2009:
- 665 de 743 das especificações da linguagem (89.5%) – Object, Class, Module, Block, Proc, …
- 3031 de 4152 da especificação da biblioteca (73.0%) – String, Fixnum, Array, Hash, Regexp, …
- 3696 de 4895 da especificação total (75.5%).
Vamos aguardar e testar este ambiente conforme o projeto vai evoluindo.
Vale lembrar que, por enquanto, o framework Rails e vários outros ficaram de fora.
SAP Blue Ruby, além de ser um projeto SAP, não é considerado SAP Product.
Para leitura complementar e estudos, segue os links de apresentações e artigos aqui, aqui, aqui, aqui e aqui.
Até a próxima…





