A JRuby és Rails fejlesztőkörnyezetek alkalmazhatóságának kutatása SAP környezetben

Készítette: Dr. Martinek Péter

2010. április 30.

 

A Rubyról

A Ruby programozási nyelv Japánból indult útjára az 1990-es évek közepén Általános célú, objektum orientált nyelv, amely többféle programozási paradigmát is támogat: funkcionális, objektum orientált, imperatív, stb. Hivatalos specifikációja a mai napig nem létezik, ezért az eredeti implementációt tekintjük de facto referenciának. 2008 óta több félkész vagy befejezett alternatív implementációja létezik, mint pl. a YARV, JRuby, Rubinius, IronRuby MacRuby vagy a HotRuby.
A Ruby valódi objektum orientált nyelv, minden osztály az Object-ből származik (még a Class is), ezen tulajdonságában úgy viselkedik, mint a Java, viszont nem léteznek benne primitívek. Egyszeres öröklődést használ, de a nem példányosított osztályok, úgynevezett mixin-ek segítségével egyszerűen megvalósítható a többszörös öröklődés is. Modulok segítségével további működési feltételeket adhatunk egy osztálynak; a beépített reflekció, valamint számos metaprogramozási eszköz használatával pedig lehetőség van arra, hogy a program módosítsa viselkedését és a struktúráját.
Megjelenése óta a Ruby rengeteg hívet szerzett magának. A nyelv első számú vitafóruma, a Ruby-Talk levelező lista forgalma elérte a napi 200 levelet, a TIOBE index, amely a programozási nyelvek növekedését figyeli, a Ruby-t a világon a kilencedik legelterjedtebb nyelvként tartja számon.

A Ruby on Rails keretrendszer

Léteznek különféle plug-in-ek, amik segítségével jó pár fejlesztőkörnyezet, mint például a Netbeans is, képesség válik Ruby on Rails applikációk fejlesztésének támogatására. A Ruby programozók nagy része egyszerű szövegszerkesztőket használ a munkájához. A Ruby van annyira kifejező és egyszerű, hogy nincs szükség bonyolultabb eszközökre, mint pl a Notepad++, vagy Mac-re a TextMate.
A Rails meglehetősen szigorú kikötéseket tesz egy webapplikáció szerkezetével kapcsolatban, azonban ennek köszönhetően jóval egyszerűbb egy ilyen applikáció elkészítése. Az első és legfontosabb jellemző: a Rails a modell-nézet-vezérlő (model-view-controller, MVC) struktúrát követi. Az MVC alapján az interaktív alkalmazások fejlesztésekor a programot három részre érdemes osztani: a modellre, a nézetre és a vezérlőkre.
A modellben tároljuk az applikáció különböző állapotait.
A nézet felelős a felhasználói interfész megjelenítésért, amit modellre alapozva generál.
A vezérlők irányítják az alkalmazást
 
A Rails is az MVC szerkezetet használja. A framework-nek köszönhetően ugyanakkor elég megírnunk az egyes modell, nézet és vezérlő kódjait, a Rails a háttérben elvégzi a többi munkát: gondoskodik róla, hogy a program működéséhez szükséges kapcsolódások létrejöjjenek.
Egy Rails alkalmazásban a beérkező kérést először egy router fogadja, amely eldönti, hogy hova kell továbbítani és értelmezni. A kérés egy metódusnál Rails szóhasználattal élve akciónál (action) fog kikötni a vezérlőben. Miután a kérésnek megfelelő folyamatok lezajlottak, az akció elkészíti a nézet számára a megjelenítendő információkat.
Példa alkalmazás fejlesztése
A fejlesztés bemutatására egy egyszerű webshop program készült: a felhasználók böngészhetik a katalógust, a kívánt árucikkeket a kosarukba tehetik, majd ha végeztek a vásárlással, adataik megadásával megrendelhetik az összeállított kosarat. Az adminisztrátorok új termékeket vihetnek fel a honlapra, szerkeszthetik a már feltöltött könyveket, kilistázhatják és törölhetik a regisztrált adminisztrátorokat, valamit további adminokat vehetnek fel.

 

A fejlesztőkörnyezet

 

Az alkalmazás megírásához a Netbeans-t használtam. Ezen belül a Ruby Bundle csomag, amely Ruby on Rails támogatást és a Sun GlassFish Enterprise Server v3 Prelude szerverét is tartalmazza került felhasználásra. Adatbázisként MySQL lett telepítve és végül természetesen a megoldások az SAP rendszerbe töltődtek.
JNDIAhhoz, hogy az alkalmazás lássa az adatbázisát, a JNDI segítségére van szükség. JNDI-nél nincs szükség adatbázis, felhasználó vagy jelszó megadására, mivel az alkalmazás nem kapcsolódik közvetlenül az adatbázishoz. Az applikációs szerveren kell létrehozni egy úgynevezett connection pool-t és egy hozzá kapcsolódó JDBC Resource-ot, és ezek segítségével lesz lehetséges az adatbáziselérés.WAR fileA Rails a Warbler gem-mel képes war fájlok létrehozására. A war fálj létrehozásakor a MySQL-hez szükséges megfelelő Active Record JDBC driverek bekerülnek war fáljba, amik a JNDI használatot teszik lehetővé. A file konkrétan Rake feladatoknál a megfelelő task kiválasztásával hozható létre. Test deploy
A SAP szerveren történp kipróbálás előtt érdemes egy test deploy-olást a Sun Glassfish szerverén. Új JDBC pool létesítése után (MySQL) a JDBC kapcsolat paramétereit fontos, hogy helyesen adjuk meg. Figyeljünk a Name:Value párok értékeíre, melyek praktikusan a: User:root, Password:shop, ServerName:localhost, DatabaseName:webshop_development lehetnek. Az éles deploy-otás sikeres teszt után már nem jelenthet problémát.
Deployolása SAP Netweaver-re A már elkészült alkalmazást SAP Netweaver Developer Studio (NDS) alkalmazás szerverén kellett elhelyezni. A Rails gem-ek segítségével képes rá, hogy egy alkalmazást .war kiterjesztésű fájllá konvertáljon. Ezt a tömörített állományt az SAP Netweaver-ben tovább alakítva .ear formátummá lehet deployolni  az alkalmazás szerveren. A deployolást az NDS alkalmazás szerveren új projekt létrehozásán belül kell elvégezni.
Az SAP szerver is JDNI-k segítségével éri el az adatbázist. Habár a deploy-olás sikeres volt, az adatbázis kapcsolat jelen környezetben nem épül fel rendesen. Sajnos semmi közelebbit nem lehetett kideríteni a hiba természetéről sem a böngésző sem a SAP szerver adminisztrációs felületén.

Összegzés

A feladat teljeskörű megoldására további kutatás szükséges, melynek lehetséges iránya:
 BlueRuby használata SAP környezetben (ABAP VM felett)

  • Aktív rekord sablonok implementálása Ruby nyelven
  • RFC alapú kommunikáció kiépítése
  • Metaprogramozási lehetőségek kihasználása.