Rational Software Architect küzdés

Egy nagyobb UML modellt kellett frissítenem és átstruktúrálnom tegnap, és azt hittem a nehezén túl vagyok, a mai napra már csak az maradt, hogy exportálni kellett volna HTML-be.

Nosza, Modeling / Publish / Web menüpont, beállítottam a kimeneti könyvtárat, és hajrá. Kicsit eldolgozgatott, amíg bejárta a teljes modellt, majd büszkén jelezte, hogy minden kész. Megnyitottam az index.html oldalt (amin csak egy kép van és egy link), majd a linkre kattintva 404 Not found hibaüzenetet kaptam. No biztos csak valahogy elkeveredtek a könyvtárak, megnéztem fájl szinten. És tényleg nem voltak ott a html fájlok, csak xml-ek, az RSA 7.0.0.1 out-of-the-box úgy látszik egy ennyire komplex feladattal nem tud megbírkózni.

Mivel hibaüzenetet se adott, ezért ilyenkor jön az, hogy próbáljuk belőni mivel lehet a gond. Másik modellre ugyanaz az eredmény, másik könyvtárba rakva is. Nézzünk akkor körül weben. Problem RSA rational web publish html keresőkifejezés a google-be, és semmi releváns találat. Bár népbutító weboldal, hogy milyen jól lehet RSA-ból exportálni, de semmi support cikk, semmi fórum bejegyzés. Ezt utálom az IBM termékekben, ha egyszer elakadsz valahol, akkor mintha soha senkinek nem lett volna még ilyen gondja a világon, nem lehet információt találni. (Persze lehet, hogy én keresek rosszul mindig, de más szoftvereknél előbb utóbb azért találni szoktam valamit.)

Megnéztem a súgót, és ott láttam, hogy lehet ám ezt a webes exportot Ant feladatként is generálni. Jobb ötletem nem volt, úgyhogy kipróbáltam ezt, sokat nem veszíthetek, a másik lehetőség, hogy a 30 diagramot meg vagy 60 osztályt kézzel másolgatom ki. Ebbből a leírásból indultam ki, amiről később kiderült, hogy RSA 6.0-hoz való, és már nem teljesen aktuális [most kb 15 perc alatt nem találtam meg a 7.0-ás online súgóját, de abban már kicsit más a build.xml, erről mindjárt]. Szóval, fogtam a megadott példa build.xml fájlt, és lefuttattam az Anttal simán parancssorból. Természetesen panaszkodott, hogy nem találja a com.ibm.xtools.publish.CLModelPublish taskot. Rég dolgoztam már Anttal, úgyhogy nekiálltam kicsit felfrissíteni az emlékeket: kell egy taskdef tag a build.xml-be, ami megmondja, hogy a kiegészítést milyen osztályban valósítjuk meg, és be kell másolni az osztályt tartalmazó jar fájlt az Ant lib könyvtárába. A két lépésből csak kettőhöz nem volt benne a leírásba a szükséges információ: a példa build.xml-ben nem volt ott a taskdef, és nem volt leírva, hogy melyik jar fájlt kell használni. Remek. A com.ibm.xtools.publish kezdetű plug-inek között körbenézve az RSA könyvtárában (van azért ott vagy 900 plug-in), a SDP70Shared\plugins\com.ibm.xtools.publish.uml2_7.0.1.v20061220\ant_tasks könyvtárban találtam egy model_publish_ant.jar fájlt. Most már csak a taskdef fájlokat kellett hozzáadni, és mehet minden. Természetesen nem volt jó, na gondoltam, megint a Java classpath-okkal van valami gond [ez a Javanak az a része, ami nekem soha nem jön össze. Biztos lehetek benne, hogy ha hibába ütközöm, ezt rosszul állítottam be:]. Próbáltam a taskdef-ekhez classpath-ot állítani, a jar fájlokat az ant könyvtárába másolni, az eclipse alól indítani az ant-ot, és az eclipse-ben lévő ant könyvtárába is bemásolni a jart, de csak nem találta a megadott osztályokat. Végül megnéztem még egyszer a jar fájlok tartalmát, és ez adta a megoldást: az osztályokat máshogy hívják mint ahogy a taskokat elnevezték. Így a helyes taskdefek, amik szerintem hiányoznak a példából:

<taskdef name="com.ibm.xtools.publish.CLModelPublish" classname="com.ibm.xtools.publish.uml2.internal.ant.task.CLModelPublish" />

<taskdef name="com.ibm.xtools.publish.CLReportPublish" classname="com.ibm.xtools.publish.uml2.internal.ant.task.CLReportPublish" />

Így most már legalább elindult, azonban hiányolt egy másik jar fájlt, amiben olyan osztályok vannak, amire a CLModelPublish hivatkozik. A gépen lévő több ezer JAR fájlból most már csak meg kellett találni, hogy éppen például az org.eclipse.core.runtime.IStatus melyikben van. Egyszerű, nem? Az lenne, ha például az IStatus az org.eclipse.core.runtime.jar-ban lenne, és nem az org.eclipse.equinox.common.jar-ban. Ilyen problémák esetén segít a javacio.us, google-ba beépül, és ha Java osztálynévre keresünk, akkor kidobja, hogy melyik jarban lehet.

Hozzáadogattam az összeset, amire panaszkodott [a kedvencem az org.eclipse.ui.workbench volt, jó kis parancssori build feladat az, amihez ez szükséges:], és jöhetett a következő próba. Most már legalább más hibaüzenet fogadott: IllegalStateException "Workspace is closed". Azaz ezt soha nem fogjuk Eclipse-en kívül futtatni. Azonban az Eclipse alapból külső programként futtatj az Ant-ot, ezt a Run As.. / Ant Build.. beállításainál a JRE fülön a Run in the same JRE as the workspace beállítással lehet megváltoztatni. Így viszont az eclipse-es jar-okat nem kell hozzáadni, hisz már úgyis be lesznek töltve, azaz csak a következő külső jar-ok kellenek a futáshoz:

image

Az újabb futtatás után panaszkodott valami AbstractAntTask, hogy neki hiányzik az outputFilename paraméter, nosza, adjuk hozzá index.html értékkel.

Izgalommal vártam a futtatás gomb megnyomása után, lehet, hogy az elmúlt három órás szenvedésnek végre meglesz az eredménye, és lefut az export? Nem, ez nem egy ilyen nap. Ez nem egy ilyen szoftver. Kb. 15 perc után se válaszolt az RSA, úgyhogy kilőttem. Az xml-eket megint legenerálta, azonban most még az index.html se volt ott. Hát, jól jönne legalább valami debug üzenet, hogy hol akad el. Van egy errorHandling paramétere a feladatnak, ami jelenleg ignore-ra van állítva. Gondoltam, talán ez segíthet. Viszont, hogy ennek mi lehetnek az értékei, az természetesen nincsen benne a leírásban. Mit lehet tenni..?

A megoldást a JAD (Java Decompiler) adta, szépen visszafejtette a CLReportPublish.class-t, a számunkra most fontos része:

protected com.ibm.ccl.erf.core.internal.ant.task.AbstractAntTask.AntAttribute[] getAntAttributes()
{


String errorTypes[] = { "ignore", "abort" };

Gyorsan át is raktam abort-ra. A build task tehát így nézett ki:

<com.ibm.xtools.publish.CLModel
 PublishmodelPath="c:\temp\model.emx"
 outputFolder="c:\temp\model-doc"        
 outputFilename="index.html"
 overwriteExisting="true"
 preview="false"
 showIcons="true"
 diagramImageFormat="gif"
 detailLevel="full"
 errorHandling="abort"/>

Így legalább lefutott és megállt, valamint a következő rendkívül informatív hibaüzenetet kaptam:

[com.ibm.xtools.publish.CLModelPublish] New transformation is based on XSL file: /C:/Program Files/IBM/SDP70Shared/plugins/com.ibm.ccl.erf.core_1.0.0.v20061002//resources/ProjectPublish.xsl
BUILD SUCCESSFUL

Hát, szerintem azért nem volt annyira sikeres ez a build:(. Megnéztem a ProjectPublish.xsl-t, hisz ott akad el, hogy kiszedi a modellből az információt az xml-ekebe, csak utána az XSLT nem tud html-t generálni belőle. Ez az xsl viszont csak az index.html-t generálja, az a része viszont teljesen jól működik.

Egyenként végigmenve még a kapcsolódó plug-ineken, a következőket találtam.

C:\Program Files\IBM\SDP70Shared\plugins\com.ibm.xtools.publish.uml2_7.0.1.v20061220\

Ez a könyvtár a lényeg. A .options fájlban elvileg trace-t lehet bekapcsolni (nekem nem működött). A templates könyvtárban van elvileg két minta, hogy hogyan kell az Ant taskokat használni. Kommentben itt van a paraméterek értékeinek leírása is, ezt miért nem lehetett az RSA leírásába berakni!? Esetleg az lehet még a gond, hogy itt az RSA egy meglévő eclipse-be lett telepítve, és talán ezért nem másolt be mindent, de kétlem, hogy akkor jól működött volna. A resources könyvtárban van a rendszer lelke, egy nagy rakás XSL fájl, ami (valószíneleg) generálja (generálta az előző verzióban) a html fájlokat. Azonban, hogy ezeket hogy kéne meghívni, miért akad el, és egyáltalán mit keresnek itt, semmi információ nincsen. Ezt a cikket találtam csak, de ez meg 6.0-ás RSA-hoz van.

Konklúzió: nem volt katarzis,végigszenvedtem vagy hat órát ezzel, és nem sikerült HTML verziót generálnom. Már egész kezdtem megkedvelni az RSA-t, viszonylag kényelmesen használható, jó lehet benne dolgozni. Azonban ma rá kellett jönnöm, hogy egészen addig van ez csak így, amíg működik minden. Ha akár a legkisebb probléma is előjön, akkor vagy hívjhatjuk az IBM Product Support Servicest, vagy lehet ezer soros XSLT-t nézni meg Java byte kódot visszafejteni.

Technorati tags:

Reklámok
Kategória: Tech | Közvetlen link a könyvjelzőhöz.

4 hozzászólás a(z) Rational Software Architect küzdés bejegyzéshez

  1. Unknown szerint:

    I am trying to run the ant script to create a pdf file from rational architect. I am getting some exceptions. Is there an English version of your blog description that explains the above.  I would appreciate if you can e-mail me what you have written in English to neelima_j@hotmail.com.  I would really appreciate it.
     
    thanks
    Neelima

  2. Áron szerint:

    Szia! Épp ezzel kezdtem volna szívni, gondoltam rászánok egy órát, de ha neked 6 óra alatt nem jött össze, akkor nekem se fog valószínűleg.Üdv,Hamvas Áron 🙂

  3. Zoltan szerint:

    Szia!:) Ez azért már régen volt, még a 7-es RSA-ban, azóta remélhetőleg javítottak valamit rajta. Bár lehet, hogy csak a hibaüzeneteket cserélték le azóta:-)

  4. Zoltan szerint:

    Neelima: sorry for the late response, I did not notice this comment. I think the question is obsolete now, but just for the record: I was not able to solve the issue. I tried the export to pdf/html from the user interface, from ANT scripts, but it was not working for me.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s