Život s OC4J

Pokud mi někdo řekne, že moje aplikace má běžet v aplikačním serveru OC4J naskočí mi husí kůže. Tento reflex se mi už dostal do podvědomí kvůli řadě bezesných nocí řešením řady chyb ukrytých v kódu, ke kterým člověk nemá zdrojové kódy. Nedá se ovšem nic dělat, náš zákazník, náš pán. Opět jsem se tedy musel ponořit do zakalených vod bažiny OC4J.

Pozn.: Tento příspěvek byl psán ve velké depresi. Kdo nemáte rádi pesimistické články před víkendem, radši ani nepokračujte ;-) .

Na co jsem narazil tentokrát? Na špatnou práci OC4J s resourcy na classpath. Spring framework má příjemnou funkci, která umožňuje nalézt resoucy na základě patternu obsahujícího wildcard znaky. Např. výraz “classpath*:applicationContext.xml” vám na “normálních” aplikačních serverech najde na classpath všechny soubory s názvem “applicationContext.xml”, výraz “classpath:META-INF/spring/*” by vám zase měl najít všechny soubory ve složkách “META-INF/spring” všude na classpath.

Spring to dělá tak, že se pokusí nalézt resource s nejbližším specifikovaným umístěním (např. v druhém případě se zavolá něco ve smyslu classLoader.getResource(“META-INF/spring/”)). Pokud složka na classpath existuje vrátí se object URL ukazující na daný resource. Z toho URL si Spring zjišťuje reálné umístění – porovnává URL.getProtocol() se standardními protokoly (“jar”, “zip” apod.) a v případě že nalezne shodu, vytáhne seznam souborů přes abstrakci pro JAR archívy (JarURLConnection, JarFile, JarEntry). Pokud shodu nenalezne, předpokládá, že se jedná o zkompilované classy v rozbaleném stavu standardně na filesystému.

Uvedený přístup funguje – ne však na OC4J. V závislosti na verzi OC4J jakou používáte narazíte na různé chyby. Například ve verzi 10.1.2.X není možné nalézt resourcy na classpath, pokud se nejedná už o cílový soubor. Když dáte classLoader.getResource(“META-INF/spring/”), vrátí vám Oracle classloader null hodnotu, přestože složka na classpath přístupná je.

Verze 10.1.3.X už je na tom lépe, u složek vám URL vrátí, nicméně zde označí protokol jako “code-source”, takže opět Spring neví, jestli to je v JARu nebo rozbaleně na disku (chybu už jsem nahlásil viz. SPR-3793 – samozřejmě na Spring Framework, protože pochybuji, že z Oraclu nějaké vyjádření / opravu bez tučného bakšiše ve formě subscription dostanete).

Prostě to celé jen dokresluje moji dosavadní zkušenost s OC4J – chyby, chyby a zase jen další chyby. Díky proprietárnímu a uzavřenému kódu nic nezjistíte ani s tím nic neuděláte. Zlatý open source. Nevím jestli je to jen pocit, ale mám takový dojem, že otevřený kód vede k větší čistotě a menší chybovosti dané knihovny. Kdo by si chtěl utrhnout veřejně ostudu slátaným kódem bez automatických testů?! Nakonec si říkám – já snad radši ani nechci ty zdrojáky OC4J vidět.

Nějaké odkazy na závěr:

Dodatek k 2.7.2007: Chyba OC4J 10.1.3.X bude již ve verzi Spring Frameworku 2.1 obejita. Do jednoho týdne Interface 21 upravil kód, aby se s probémem vypořádal. Takhle by to mělo fungovat ;-) . Mám rád Spring.

Podělte se s ostatními:

  • Digg
  • del.icio.us
  • Technorati
  • Diigo
  • DZone
  • FriendFeed
  • Google Bookmarks
  • LinkedIn
  • Reddit
  • RSS
  • StumbleUpon
  • Twitter
Ohodnoťte článek:
Takovéhle články už radši ne!Nic nového pod sluncem.Průměr - obsahuje zajímavé střípky informací.Hodnotný článek - lecos nového jsem se dozvěděl.Skvělý článek - informace se mi dost hodí. (4 hlasů, průměrně: 5.00 z 5)
Loading ... Loading ...

3 Responses to “Život s OC4J”

  1. Tomas says:

    Ach, ano 10.1.2 je obzvlast “vydareny” release. Netyka sa to ale len OC4J ale aj vsetkych Oracle produktov. Dokumentacia pripomina skor reklamu, kde sa clovek dozvie co vsetko to vie, ale nikde uz nepisu ako sa to da pouzit. A pomoci sa clovek nikde nedopatra..

  2. Petr says:

    Uz je to sice asi 2 roky, co jsem delal s OC4J naposledy a vidim, ze se to skoro vubec nezmenilo.
    Ja se musim priznat, ze ani z ostatnich produktu Oracle jako jsou jDeveloper nebo Oracle AS jsem nebyl vubec nadseny, spise naopak. I ja se priklanim k celkem obecnemu nazoru, ze krome databazi Oracle moc software delat neumi.

  3. brunix says:

    Myslim, ze naopak, za dva roky sa toho pre OC4J vela v dobre zmenilo a neustale sa vylepsuje (J2EE 1.5, podpora Web Services a konceptu SOA)
    http://download.oracle.com/docs/cd/B32110_01/index.htm
    Nehovoriac o aktivnej cinnosti Oraclu pri specifikacii EJB3.0 alebo JSR227: A Standard Data Binding & Data Access Facility for J2EE.
    Mimochodom, release 10.1.2 mal hodnotenie na InfoWorlde ako Excellent
    As part of Oracle work with Spring and Interface 21, Oracle offers a number of resources for developers who wish to build Spring applications on Oracle Fusion Middleware. All of these resources are now available with the Oracle Development Kit for Spring.
    http://www.oracle.com/technology/tech/java/spring/sdk_index.html

  4. Novoj says:

    Všichni víme, jak funguje marketing. Marketing ale funguje jen do doby, než zkusíte deploy do kontejneru ;) . Pak už to nikdo neokecá.

  5. brunix says:

    Pozrite na The Original RAD Race Javapolis Edition 2006/7 Winners. To nie je ziaden marketing ale poriadny test.
    Jeden z vitaznych teamov bol LogicaCMG Oracle2Go s nastrojmi Oracle JDeveloper 10.1.3.1.0,
    Oracle ADF Framework, Oracle OC4J 10.1.3.0
    http://www.javapolis.com,

  6. Novoj says:

    Tak jsem na to kouknul a řekl bych, že na vítězství mají spíš než kvalita OC4J vliv:

    a) kvalita soutěžících (a schopnost reagovat a nalézt řešení v časovém presu)
    b) kvalita nástrojů – lépe řečeno kvalita integrace dalších použitých technologií v použitých nástrojích
    c) použité knihovny

    Ale těžko říct, ještě jsem nikdy v takové soutěži nebyl ;) .
    Faktem zůstává, že OC4J mi komplikuje základní věci, které na ostatních serverech chodí. Tím bych to asi uzavřel.

  7. brunix says:

    No zda sa, ze tento clanok strati opodstatnenie :)
    http://www.oracle.com/bea/index.html

Leave a Reply