Ez a "thread" hasznos kíván lenni az utókornak is. A 2014 tavaszán használt Bonita 6.2.2, 6.2.4, 6.2.6 verziókkal jöttek elő gyakran igen érdekes hibák. Ezek Win7/Win8/Win8.1 platformokon jöttek elő, Linuxról nem tudunk nyilatkozni.
Milyen Bonitát használjak?
Mi igyekeztünk a legfrissebb, All-In-One (aka portable) verziót használni. A fájlt, amiből kicsomagolod, érdemes megtartani, mert gyakran szükség lehet rá. Így nem települ semmi a gépedre, és gyorsan újra lehet húzni. Egyébként az összes platform állományai benne vannak.
Milyen JRE-t (Java Runtime) használjak?
Ez kb mindegy, azért hogy x86-os vagy 64 bit-es az oprendszerrel és Bonitával is érdemes hogy egyezik. Nem tudom, egy év múlva mennyire jön be már a Java 8, nekünk még Java 7 volt, de nem hinném, hogy ezzel lesz gond. Viszont ha majd már Java dolgokat importáltok a Bonitába, ott egyezzen a Java major verzió.
Meghalt a Bonita/gyanúsan rosszul működik/tuti nem én vagyok a hibás
Ez igen gyakran megesik sajnos, viszont a javítása egyszerű:
- csak engine újraindítása - az tipikusan a 2. és 3. fázisban tud hasznos lenni, az elsőben nem nagyon
- Bonita újraindítás (elvégre Eclipse alapú), valamikor megoldja
- Bonita újratelepítés, ez szinte mindig megoldja (ezért ajánlott a portable)
- Ha ez se megy, akkor viszont nagy a gond
Nekünk ha 8-10 órát dolgoztunk, átlagosan 2-3-szor kellett újrarakni a Bonitát, ez lényegesen függ attól is hogy mit csinál benne az ember. Amikor nagy változtatások vannak a folyamatban, akkor a futtatások között nagyon könnyen el tud hasalni, ezt általában megoldja egy újraindítás. Ha sok Java-s rész volt (pl folyton importálgattad a Java-s JAR-t) akkor könynen megesik, hogy a belső repository-ja rossz állapotba kerül. Ezt lehet külön takarítani, de ment rá már erre két óra, hogy nem sikerült jól kitakarítani, és újrarakás a vége. A két művelet egyébként ugyanannyi ideig tart.
Nem tudom elindítani a folyamatot, rögtön hibát dob
Sajnos nem emlékszünk már a hibaüzenetre, viszont a community fórumon se volt használható és működő megoldási javaslat. Ha szerencséd van, megoldja egy újraindítás/újratelepítés, ha nem, akkor először exportáld ki a folyamatot, rakd újra a Bonitát és importáld be. Ha így se oldódott meg, akkor viszont eggyel korábbi exportálást húztunk be, ami még jó volt. A tanulság tehát az, hogy gyakran kell exportálni. Erre jobb módszert nem találtunk.
Az alfolyamatok nem működnek/körülményes a használatuk/nem adják át a változók értékeit
De működnek. Custom objektumokat is át tudnak adni, tesztelni is lehet őket, ha hirtelen van ugrás több folyamat között akkor is működik. A változóádtadást a Mapping módszerrel érdemes csinálni, ez jól működik, és nagyon gyorsan kezelhető.
Ha több folyamat között megy az átadás, akkor minden közbeeső folyamatba fel kell őket venni. Akkor is, ha tudod úgy küldeni egymás között a változókat, hogy a köbeeső folyamatban nem kell felvenni. Emellett oda kell figyelni, hogy milyen folyamatban melyik elnevezésed van.
Egy JAR vagy több JAR legyen?
Egy. Ezzel egyébként az egész csapat munkáját nagyban megkönnyíted, ha mondjuk egy JAR-t kell sokszor beimportálni nem 5-öt. Érdemes olyan build targetet csinálni, ami ezt előállítja. A Bonita szempontjából meg mindegy, hogy hány JAR-od van, úgyis betolja mindet. Connectorok esetén pedig az interfész-nek érdemes behivatkozni a JAR-t, nem az implementációnak.
A JAR-t használó konnektor nem működik
Na ennek több oka is lehet. Először is, fontos, hogy a JAR be legyen importálva, utána meg a "Refresh connector dependecy repository" (vagy hasnoló) menüelemet kell megnyomni. EMelett győződj meg arról, hogy a JAR önállóan működik, mert az alapvető hibákat nagyon körülményes olyan hatékonyan megkeresni a Bonitán keresztül, mint csak simán Eclipse-ben. A Bonita engine log-ot érdemes megnézni. Néz az időbélyeget, hogy mikor volt a futtatás. több stacktrace is lesz, ezért viszonyítsd az idővel.
- Ha saját Java komponensből jött hiba, akkor megvan a pontos helye
- ClassDefNotFound: alfolyamatban hasznátad a konnektort, így félig ismer, félig meg nem a típusaidat. Főfolyamat az összes külső konnektort hívja meg valami dummy paranccsal, hogy az összes JAR függőség időben behúzódjon.
- Megeshet, hogy a JAR olyan függőséget használ, amit más is, viszont mivel Java-ban a sima .class fájlok nincsenek úgy verziózva, mint mondjuk a .NET assembly-k, ezért képes összeakadni. Ilyenkor sajnos ki kell sakkozni, hogy mi az a verzió, amit a Bonita használ és vagy azt, vagy azzal kompatibilist kell használn (és lehetőleg a JAR-ból ki kell hagyni). Nekünk a Magyar Nemzeti Bank WS-t használó komopnensnek volt ilyen függősége (mármint függőségnek volt a függősége a ludas). Osztálynévből egyébként hamar rá lehet jönni, ha tudja az ember, hogy ez is lehet a gond
- Ha sok minden változott a Java komponesetekben, főleg ha osztályok tűntek el, és jöttek újak, akkor érdemes újrarakni a Bonitát 5 perc alatt és elkerülni a 2-3 óra szívást.
Connector nem működik, de tegnap/más gépen ment
Nekünk az LDAP Connector csinálta ezt. Nagyon egyszerű a megoldás, refresh repo és teszteld le a connector-t. Nem baj, ha nem működik/nep csinál semmit/már felparamétereztétek és emiatt nem tesztelhető, megnyitod, "Test" gomb, és utána jó lesz.
Groovy script problémák
Ezekkel sok baj lehet, könnyű elírni őket. Ha általános szintaktiaki hibád van, akkor arra az Engine log elég jó üzenetet ad vissza. Azért ellenőrizd le, hogy minden nem alap groovy vagy saját dologhoz van-e a script elején "import my.pkg.Cls;" (néha ha lemarad ez is lehet baj), valamint hoyg a szkript visszatérési értékének típusa tényleg az-e, ami.
Bonita/Groovy és generikus típusok
A generikus információt próbáld meg nem ráerőltetni a bonitára. Ha a Groovy ajálja fel, használd, de nyugodtan elhagyható. Egyébként érdekes a Groovy, és tök sok dolgot támogat, érdemes utánanézni. Pl lehet dinamikusan használni mindent (pl. PHP/Python), de simán tudsz cast-olni is. Content assist nem mindig tökéletes, nem kell ettől megijedni.
Bonita/Groovy ArrayList / egyéb kollekció hiba
Ez nagyon aljas, főleg akkor jelentkezik, ha a Connectortól jön valami, és közvetlenül raknád változóba (amit egyébként lehet, és castolnod sem kell, mert a Bonita megteszi helyetted). A lényeg annyi, hogy a Bonitában a lista az az ArrayList, viszont továbbra is javasolt a korábban is tanult szemléletet alkalmazni, hogy interfészt használunk( ami a java.util.List). A probléma ott van, hogy a Bonita viszont belül castol, mégpedig java.util.ArrayList-re. Ez addig nem is lenne gond, amíg ezt használnánk, viszont ha mondjuk az Arrays.asList(...) függvénnyel jött létre valami, akkor az java.util.Arrays$ArrayList típusú lesz (mert ebben is van egy ilyen belső osztály, közvetlenül nem látod, csak List-ként, de mondjuk ez Java forráskódból egyértelműn kiderül). És ezt nem szereti a Bonita. Másik gond, ha generikusan vannak benne az adatok. Ez a hiba más tárolókkal is előjöhet. Általános resololution:
- Groovy szkript egy tömbből pakoljon át egy frissen létrehozottba, aminek ha van generikus típusa, az az Object legyen.
Egyelőre ennyi, ha jut még eszünkbe megosztjuk, valamint más csapatok is megoszthatják.
(6-os) Adrenalin csapat