Weblogic vs. Glassfish

Fórumok

Melyiket mire [ne], miert ?

Hozzászólások

Glassfish! :-)

bar az egyik Oracleos emberke szerint aki a WLS projekten dolgozott nagyon szep kodja van a WLSnek is ;)

az tokmas. a tomcat csak egy servlet container, a glassfish meg egy full-blown EE stack. kozuk nincs egymashoz. :)

a Glassfish jo. WLSt futolag lattam, viszont ha nem veszel subscriptiont, akkor is GFhez van csomo resource. egyreszt tudsz itt is kerdzeni (MOn eleg sokan hasznaljak azert), masreszt ott vannak a mailing listek, harmadreszt IRC :) (fel fejlesztogarda fentvan).

WLShez tudtommal nincs ilyen, meg nem is ingyenes, bar ezen lehet valtoztattak.

A különbséggel tisztában voltam, a linkelt oldalon ott is a két(WebLogic | Websphere) oszlop tc és gf között, bár tele kérdőjelekkel amiket mint írtad nem szeretsz :)
A mindennapokban JBoss-t használok, csak - mint írtam - kíváncsi lennék a pro/kontrákra.
Ez a hunglish kicsinál teljesen :)

Ami en tapasztaltam, hogy a Jboss-hoz, es WebSphere-hez kepest nem olyan kiforrott, latszik, hogy meg az elejen vannak a fejlesztesnek, kell meg 1-2 ev. Kicsi projectekre jo, de arra jo a jboss is, es azt el kell ismerni, hogy a webcontainere piszok gyors es jo, latszik hogy mind implementacioban, mind tervezesben jobb mint a tobbi. Egyebkent a Jbossnak is szep a kodja, most javitottam benne egy ket dolgot, es jol tervezett es atlathato, ami nem mondhato el a a WebSphere-rol(Jad).

Igen szerintem a Glassfishnek kell meg 1-2 ev, ahhoz hogy professzionalis nagy projectekhez lehessen hasznalni, nem arra gondolok hogy van egy ket EAR 10-20 EJB-vel, hanem 30-40 ear par szaz EJB-vel. Es nem 1-2 node-os clusterek, hanem amikor egy clusterben van 8-10 node. Egyebkent sokan fikazzak a Jboss classloading-jat, hogy igy ugy szar, pedig csak mas, mint a tobbi, ezert maskent is mukodik, aminek vannak elonyei, es a hatranyai is.

"Egyebkent sokan fikazzak a Jboss classloading-jat, hogy igy ugy szar, pedig csak mas, mint a tobbi, ezert maskent is mukodik, aminek vannak elonyei, es a hatranyai is."

FYI: a classloading a szabványban rögzített, a JBoss ettől eltér. A következtetés levonható.

"Igen szerintem a Glassfishnek kell meg 1-2 ev, ahhoz hogy professzionalis nagy projectekhez lehessen hasznalni"

Baromi professzionális és nagy projektekben használják, olyan helyeken is, ahol esetleg összehasonlító méréseket végeznek más appszerverekkel is, de te még nyugodtan várj vele 1-2 évet :)

Az EJB-k darabszáma meg manapság inkább csökkenteni egy projekt "értékét", mint növeli, de ez out of scope :)

"Melyik speci irja elo?"

Valamelyik Java EE JSR rendelkezik arról, hogy az appserverben a classloadereknek milyen szeparációt és milyen láthatóságot kell biztosítani. Nem maguktól találja ki az összes nem-JBoss-os, hogy hogyan is kell ezt csinálni, csak a JBoss hajlandó azt hinni, hogy feltalálta a spanyolviaszt :)

"Tudsz errol valami konkretabbat mondani?"

Miről? Hogy miben érdemes fejleszteni? Max. a saját véleményemet tudom mondani: EJB-t felesleges, mert sokkal nagyobb az overhead (teljesítményben és adminisztrációban) rajta, mint amit segít. Akkor inkább Spring vagy más DI, plussz ha kell valamilyen remoting, akkor a Spring Remotingból választani...

"FYI: a classloading a szabványban rögzített, a JBoss ettől eltér. A következtetés levonható."

Attol meg lehet jo.

"Baromi professzionális és nagy projektekben használják, olyan helyeken is, ahol esetleg összehasonlító méréseket végeznek más appszerverekkel is, de te még nyugodtan várj vele 1-2 évet :)"

Hidd el en is vegeztem osszehasonlito mereseket. Bar igaz hogy az 1-2 eve volt, akkor meg a GlassfishV3 meg gyerekcipoben jart. A GlassFish JMS implementacioja akkor meg nagyon fapados volt, es sok mindent nem tudott.

Aha, a kulonallo OpenMQ tenyleg tobbet tudott, de mintha ott is szivtam volna a clusterrel, masreszt meg elvarhato egy appszervertol, hogy normalis clusteres JMS implementacioja legyen, ami tud failover-t, es loadbalancing-ot, hogyha az egyik szerver ledoglik migralodjanak az uzenetek a masik labra, es ott bedolgozzak az ott futo MDB-k.

Csak hint: a GlassFish-t a Sun penzes termekkent is forgalmazza, most hirtelen meg nem mondom, milyen neven. Pont olyan cegeknek adja el, akiknek egyezik az igenyei a tieiddel. A GF ennek a cuccnak az ingyenes, nyilt forrasu verzioja (a penzesbe kerulnek plusz funkciok meg). De majd jon NagyZ es megmondja a termek nevet.

Amit itt irsz, az akkora hulyesegnek tunik ennek tukreben... hadd kerdezzem meg, probaltad-e mar amiket irtal?
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Erre csak annyit mondanék, hogy milyan EE appszerver az, amelyik nem tud clustert? Mert a v3 bizony nem fog tudni... a v2 pedig nem mikrokerneles. Tudom, nincs mindenre erőforrás, és a fő prioritás a php és a ruby, de akkor csináljanak egy külön ágat a LAMP usereknek.
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD

ismerem, koszi. :)

szemelyes velemeny: openjpa, axis, cxf tok felesleges. a sunos RI sokkal jobb minosegu, igy ezek olyan +sokadig megvalositasok. a jetty jo dolog, de minek, mikor ott a grizzly :).

azt pedig, hogy mikrokernel, es azt toltjuk be amit akarunk, mar a gfv3 is tudja/ni fogja. [apache felix az OSGi -os moka, meg van egy masik aminek nem jut eszembe a neve, ami a konkret mikrokernel impl]

Azért az bátor kijelentés, hogy feleslegesek, addig, amíg nem csinálsz rájuk teszteket. Volt munkatársaim csináltak komoly méréseket, náluk pl. kijött, hogy a CXF sokkal jobb arra a feladatra, amire ők használni akarják, és nem az RI van az alkalmazásaik alatt. Openjpa, eclipselink, hibernate hármasra ugyanez az összehasonlítási igény vonatkozik...

Amúgy a glassfish nagyon nagy előnye, hogy mindezeket aládtolja.

szemelyes velemeny: openjpa, axis, cxf tok felesleges. a sunos RI sokkal jobb minosegu, igy ezek olyan +sokadig megvalositasok. a jetty jo dolog, de minek, mikor ott a grizzly :).

Lehetne ezt ala is tamasztani konkretumokkal? Mert oke, hogy te oket valasztottad, de azert sokat segitenel a jelenlevoknek, ha elmondanad, hogy miert is ok lettek a kivalasztottak.

lehet. es siman lehetek hulye, szoval lehet javitani :)

az openjpa azert nem tetszett, mert mikor legutobb neztem, meg fel kellett dolgozni hozza kulon a pojokat, meg valami agentet is hasznalt, ezektol meg kiraz a hideg.
az axissal eddig csak inkompatibilitasokat lattam, es egy konkret helyen ahol voltunk szagerteni, elo is jott ez, es kuzdottek bizony kemenyen, hogy most mi legyen.
az cxfnek az ertelmet nem latom, szoval efelol meggyozheto vagyok. mi ertelme? manapsag ha nemkell a full stack, akkor fog az ember valami minimalis nio fwt (en grizzlyt szeretem), ratolja ami kell neki, es kesz. 20 sorban tudok irni komplett JAX-RS szervert.

Az a baj, hogy én erősen egyoldalú vagyok ebben a kérdéskörben, már csak emiatt is:

http://blogs.sun.com/stories/entry/szeretgom

De, pár szubjektív szempont:

Glassfish, ha:
- Nincs tele az alkalmazásod EJB-kkel, sőt csak .war-jaid vannak és az EJB-ket is már átkonvertáltátok a webrétegbe.
- Esetleg RoR alkalmazásokat is futtatnál (JRubyval, és persze GF v3).
- Szereted, ha minden egyszerűen scriptelhető, de nem veted meg a GUI konfigurációt sem
- Nincs szükséged működő app szerver szintű failover clusteringre (bocs fiúk, de v2-ben egyszerűen túl sok a bug), mert pl Terracotta-val, vagy más hasonló módon alkalmazásszinten oldod ezt meg.
- A Jetty túl egyszerű és nincs kedvetek Eclipselink-et, JTA-t, JMS-t hegeszteni alá, amikor a GF-ben ott van.

Weblogic, ha:
- 8 éve weblogicra fejlesztetek, tele vagytok com.bea.* dependenciákkal, erősen használtok nem standard kiegészítéseket (pl server lifecycle listener-ek)
- még mindig 2.1-es EJB-k zizegnek az .ear-okban
- nem bánjátok, ha az ügyfél a pénzét drága licencere költi helyettetek:)
- Oracle partnerek vagytok és jól érzitek magatokat az Oracle ecosystemben.

Persze a fentieket az Oracle-Sun merge keményen felrúghatja.

--
The reason that half of us are in computing at all is that we see computers as things that we can make beautiful things out of..

Mire használnád az EJB-t? Biztos hogy ahhoz EJB kell, és nem egyszerűbb máshogyan megoldani?

Az EJB már elindult a DI irányba, nem véletlenül, de még nem tart ott, ahol a Spring vagy a Guice. Jobban jársz inkább azokkal, ha meg külső service-eknek is el kell érni, akkor a Spring (és más keretrendszer is) is remek remoting támogatást ad hozzá...

Webes keretrendszert "csinálok". Azért csinálok, mert normális tervezés-fejlesztésre nincs idő (igazi tegnapra kell). Egyébként Springet használok hozzá, amihez ugye elég egy Tc. EJB-t még hobby szinten űzöm a saját kis JBoss-omban. Szimplán csak érdeklődtem az AS-ek iránt, de köszönöm az infot. :)

De ha már letöltögetem a dolgokat, akkor ennyi erővel tökéletes a saját ivy repo is, ráadásul úgy rendszerezem benne a dolgokat, ahogy nekem jobban tetszik. Azt ant build-em meg legalább annyira a default-okra épül, mint a maven buildje, szóval nem látom a kifejezett előnyét...

Nem tudom, engem ettol a szotol mindig kiraz a hideg. Eddig kizarolag olyan maven-es appba sikerult belefutni, ami a weboldalan levo forditasi utasitasokkal sem fordult. Pedig en istenbizony mindent megprobaltam. Nekem az ant jobban bejovos.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Van róla egy ebook (http://www.sonatype.com/products/maven/documentation/book-defguide), érdemes azzal kezdeni, és akkor utána nem nagyon éri az embert meglepetés. Csak egyszerűen minden működik. És megvan az az előnye, hogy ha egyszer felfogtad, hogy mi micsoda, onnan kezdve minden maven projekt "ismerős" lesz, tudod, hogy mit hol keress, mi miért van ott.

Azért szeretek még maven-nel dolgozni, mert IDE függetlenné teszi a projektet és minden fejlesztő használhatja a saját kis agyontutujgatott fejlesztőeszközét, ráadásul nagyon jó a Maven támogatás a Hudsonban (dependens projekteket automatikusan felismeri, ha kéred le is buildeli, mindezt dinamikusan).

--
The reason that half of us are in computing at all is that we see computers as things that we can make beautiful things out of..

ize, azert itt ket mas teljesen dologrol van szo. (bocs hogy ennyit pofazok, dehat veletlen az EE a szivem csucske, annak ellenere, hogy epp IoCt fejlesztek).

a Guice egy altalanos celu DI fw. semmi mas.

a Spring mar alad tol mindent, amit akarsz, a Spring vs EE egy darabig vedheto akarmelyik oldalrol, de van egy metszet, amikor tokmindegy mit hasznalsz (amikor mar ugyis tranzakciokat akarsz, replikalt sessionokkel, sok gepen elosztva, akkor...)

"egy altalanos celu DI fw. semmi mas."

Van, hogy az bőven elég.

"(amikor mar ugyis tranzakciokat akarsz, replikalt sessionokkel, sok gepen elosztva, akkor...)"

Na és pont ez lesz az a pont, ahol a Glassfish ugrik a kalapba, hacsak nem kezded el sima web container-nek használni és minden mást kézzel megoldani. Kézzel megoldani - pl. Spring-gel, alkalmazásszinten:).

Mondom ezt úgy, hogy én még mindig nem vagyok egy nagy Spring fan.

en sem vagyok spring fan, de miert is bukna a dolog? session replication van v2ben is, session-tarto redeploy van v3ban, EJB replikalas HA-clusterben van v2ben.. mi hianyzik szerinted?

amugy, ha mar itt vagyunk: mit gondolsz POJO replikaciorol/adatparticionalasrol? tegnap beszelgettem egy redhatos sraccal errol a diplomamunkam kapcsan, es mondta, hogy szerinte jo dolog, csak tul komplex, es igy nem bizik benne :))

Ha magyarul volt, akkor több, mint valószinű. Bár kicsit már régi.

EJB: nem az, hogy megnyekken, hanem egyszerűen és úgy nagy általánosságban felesleges bonyolítani vele az életet.

--
The reason that half of us are in computing at all is that we see computers as things that we can make beautiful things out of..

Errgh...

Sz'al, ha nincs EJB-m akkor mi a fenenek glassfish? Baromi nagy projektek futnak tomcaten (nem mondom a ceg nevet, mert tiltja a poliszi, de sz'al nagyon nagy.)

RoR alkalmazast a sajat appszerveren futtatunk, hitelt a hitelboltbol.

Egyebkent mi most a perzisztenciaretegben a meno? Hibernate forever? Azt gondoltam, az EJB3 ennel jobb lett...

Bar anno domini - 5 eve is mar tan - syntern hasonlitott ossze tomcatet es glassfisht (amit akkor meg nem is ennek hivtak talan), es akkor az jott ki, hogy a glassfish az sokkal jobb teljesitmenyt tud, nalunk meg az a mondas, hogy a "glassfish... jatszoternek jo, ha dolgozni akarsz, valassz a tomcat meg a bea kozul."

Overhead, overhead... nyilvan, vicces az a rendszer, amiben csak fuggvenyek lehetnek (mert stateless!), de letrehozza az objektumot, (mert annyira megse stateless), de sz'al most mi a meno stack?:)

Ami nagyprojektekrol tudok, azok valamelyik MQ felett (openMQ, de itt neha penzt is adnak dolgokert, sz'al mas is lehet), tomcat szerverekkel, meg hibernate perzisztenciaval (meg ennek az agyonhakkolt sajat, modositott valtozataival) mennek, en azt gondoltam, biztos skot az ugyfel, es ez volt ingye', de akkor ezek szerint ez az altalanos?

(Sz'al mi a (web) Presentation - (distributable / scalable) Business Logic - Persistence stack mostanaban? En hiszek a PHP-ben meg mindig, csak mindig attol felek, kifutnak alolam azok a PHP-projektek, amikhez kell egy gondolkodni kepes lead, ehhez tarsulo fizuval, es be kell szallnom vmelyik javas ugyfelnek segiteni:)

En semmit nem mertem :)

Ez 5 evvel ezelott volt, remelem, a hivatkozott uriember megjelenik (a threadben mar ittvan), es elmondja update-elt velemenyet :)

En, amikor megtudtam, hogy a VmWare-rel olyan szerzodesunk van, hogy kotelesek felvenni a telefont, ugy ereztem magam, mint egy honolului nyaralason... :)

Megvenni ... szerverszoftvert... napi millio dollaros arbevetel mellett? ugyanmar... :)

(Bar a linuxokat most cserelik le windowsra annal az alcegnel, akiknek en fejlesztek... ottani vezfejlesztovel egyszerre kaptuk fel a fejunket, hogy ezt talan nem kene, az egesz csapat teli van kis shellscriptekkel, meg egyfajlos C /perl / python utility-kkel ... arra van penz... alkalmazasszerver-szoftverre nincs.)

Micsoda kikövetelése a kommentelésnek... Az update-elt véleményem az, hogy adott alkalmazáshoz mérni kell, aztán ami jobb, használni. Amióta meg profiler-t is írunk, azóta pláne azt mondom, hogy mindent mérni :)
(5 évvel ezelőtt amúgy nem hiszem hogy mértem volna ilyesmit, bár akkor fejlesztettem JBossra, de Glassfish-sel csak később kezdtem el játszani...)

Mostanában appservert nem mértem, megszokásból van glassfish + fejlesztéshez Jetty (gyorsabb a roundtrip). Tavaly a Wicket-re néztem vs. Freemarker + Spring MVC vs Stripes vs pure Servlet + JSP teljesítményt, de mivel nem dokumentáltuk, már nem emlékszem a pontos arányokra. A Freemarker jobb volt mindegyiknél, de a Wicket sem volt annyira rosszabb, hogy végül nálunk most az a preferált saját fejlesztésre + Spring + non-rdbms, de ez utóbbi még under construction (cserébe múltkor kihoztunk belőle 1000+ TPS-t). Aztán ügyfélnél meg jön ami jön...

Elkezdtünk egy olyan alkalmazást írni, aminél fontos, hogy a search engine is jól lássa. Arra a GWT csak úgy lett volna alkalmas, ha minden oldalból kétféle változatot csinálunk, és még kellett volna trükközni azzal is, hogy a felhasználó számára ez egynek látszódjon. Akkor már a wicket lényegesen egyszerűbb. Meggyőzni azt hiszem a korábbi beszélgetéseink meg talán a Wicket in Action könyv győzött meg...

Az csak en vagyok, aki inkabb elorantana egy sajat rendszert a zerorol, minthogy akarmelyiket hasznalja?

Bar ez a wicket annyira nem tunik veszesnek, meg a (picit bevallottan rails-klon) grails se. A JSF no-go, az osszes faces libbel egyutt, mert amit gondol arrol, hogy hogy mukodik a web, egyszeruen nem igaz, korlatos, es pillanatokon belul a rendszert kerulgeted. A legtobb javas web-frameworkkel egyebkent ez a bajom, hogy eleve rossz modellre epul.

GWT helyett mondjuk en - ha java - JAX-RS + Ext.Js-t hasznalnek, mert az kevesbe eroszakolja meg az eredeti modelleket - igy kevesebbet kell fejet vakargatni. Persze ebbol kovetkezoen nagyreszt javascriptbe kene programozni, de az meg csak elony :)

(Tipikusan az ilyen intranet alkalmazasokra az Ext.Js tok jo, public webre persze az a lib nincs jol felkeszitve, oda bizony jQuery vagy YUI kell inkabb, pont azert, mert annak oldal-kozpontunak, nem pedig alkalmazas-szerunek kell lennie; az oldalkozpontusagnak csak egy jellegzetes igenye a keresokompatibiitas, van ott meg sok mas is)

A mostani rendszerunkben egy oldal/blokk, vagy szoros funkcionalitast vegzo oldal-/blokk-csoport melle tartozik egy leiro, hogy milyen get-post parameterei lehetnek, es az execute metodusuk injektalva kapja privat valtozokent, validalva a leiroban szereplo valtozokat. Tartoznak formosztalyok hozza, es igazabol azoknak vannak leiroi, mert ezt kertek a java hatteru programozok, en meg engedtem, de imperativ formleirast vegul megse hasznaltak (es a wicketbe se ertem, miert kene, a GWT-be meg aztan plane), szoval egy picit kacifantos lett, meg felesleges funkcionalitas van megirva, de igy is kevesebb, mint egy het alatt kesz lett ez az egesz.

Persze mindez PHP (4, ha 5 lenne, berantottuk volna a zendet vagy a symfony-t), de javara is ugyanigy atvinnem, servlet api felett, egy ugyesen cache-elo XML-parserrel, sot, meg az is lehet, meg ennel egyszerubb is lehetne...

A wicket-et azért kedvelem, mert bír page-centric és application-centric egyaránt lenni. A többi felsorolt csak az egyikre koncentrál. Amúgy a jquery volt az egyetlen javascript library, amiben szívesen kódoltam JS-t, a GWT is ugye Java.

A yet another web framework meg senkinek sem hiányzik :)

Ideiglenes celokra jo, allitolag all at a ceg php5-re, a zend meg mar ott figyel a shared-lib konyvtarban, vagom a centiket, mikor kezdhetunk el azzal fejleszteni vegre... :)

Nezzel Douglas Crockfordot, mindenkihez ezt vagjuk hozza:

http://developer.yahoo.com/yui/theater/ (The Javascript Programming Language -ugye, fortran-os hagyomany, hogy ezzel a cimmel vezetjuk be a jo nyelveket, C, C++... :)

1 ora, de megeri.

A jQuery-rol nekem ellenvelemenyem van, sok benne az 'ezt most miert kellett' szamomra, John Resiggel vitaztam mar blogok kommentjei kozt is, marha okos, csak marhara nem ertunk egyet fundamentalis dolgokban. (jQuery: j, mint john)

Az Ext, barmennyire is furcsanak tunik, nem rossz. Eroltet picit nehany dolgot, ha egy-egy dolgot kell csak scriptesitened, akkor a jquery jobb valasztas, bar en neztem harom heten keresztul a widget-rendszeret, aztan irtam egy sajatot inkabb, menjenek a fenebe, hogy lehet igy feje tetejere allitani meg aluldokumentalni mindent... Egy komplett (feeling) projekt bukott emiatt egyszer.

A YUI meg... asszem a video utan meg fogod erteni (bar ha belepsz a yahoo mailre, ott is szembeotlo), az igazan jo javascript meg kliensoldali web tudaskozpont nem a google-nel van.

Lehet nem 5 eve volt, mikor indult a J2EE targy? Akkor csinaltatok valamit, Imre Gaborral (ugye Gabor akkortajt J2EE szervereket mert, Agi pedig .NET-ben mert hasonlot), es arra emlekszem, hogy vagy a tanszeki laborban, vagy az st nagyban allsz a katedra mellett, es mondod, hogy a glassfishnek kimertetek, es jobb a TPM-je, pedig csak valami demo valtozatotok van, ami levag x keres felett.

(Es akkor meg asszem nem glassfishnek hivtak, hanem java enterprise server personal editionnek).

De marha reg volt, az teny :)

Engem kizarolag a management felulettel fogott meg a GlassFish, tekintve hogy rendszergazdakent en ilyesmikkel talalkozom a legtobbszor, ehhez van osszehasonlitasi alapom. A Tomcat-e minden, csak nem jo, tul van egyszerusitve (mondjuk ki: tul buta). Tetszik, hogy nem kell xml fajlokban turkaszni ha valami rem egyszerut szeretnek beloni; tetszik, hogy a clusterezeshez sincs szukseg semmi varazslatra; es tetszik, hogy az egesz opensource.

Mivel en amugy sem vagyok tapasztalt Java developer, igy a teljesitmenyrol nem tudok semmi relevansat mondani, de azt kabe sejtem, hogy olyan nagyon-nagyon rossz nem lehet, ha ezt a termeket kicsit felspecizve el tudjak adni sulyos dollarokert.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

- Nincs tele az alkalmazásod EJB-kkel, sőt csak .war-jaid vannak és az EJB-ket is már átkonvertáltátok a webrétegbe.

Itt ugye a GFv3-ról beszélsz? Mert a GF azért több, mint egy JSP/Servlet konténer... :)

Nincs szükséged működő app szerver szintű failover clusteringre (bocs fiúk, de v2-ben egyszerűen túl sok a bug)

A v3-ban pedig teljesen hiányzik a cluster kód.

Sajnos én is csak olyan .war cuccok futtatására használom a GFv3-at (wiki.javaforum.hu például), amelyek nem igényelnek cluster alapokat. De a portál például JBoss cluster-ben fut, mert abban működik a cluster... :)
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD

Egyik se. Ha nem kell EJB (nem szokott kelleni ... :) ) akkor Tomcat. Ha kell, akkor JBoss.
A Weblogic nem open source, nálunk eleve kiesett. A Glassfish-el több a szopó fejlesztéskor, mint amit ad managementben. Szerintem.
A teljesítményen lehet vitatkozni, de nem érdemes, úgysem az appserveren múlik, hanem az alkalmazáson (a programozókon).

--
Gabriel Akos

"A teljesítményen lehet vitatkozni, de nem érdemes, úgysem az appserveren múlik, hanem az alkalmazáson (a programozókon)."

Érdemes megnézni különböző appserverekkel ugyanazt az alkalmazást. Tipikusan a web connector és a különböző pool-ok (thread ill. connection) kezelése kritikus és különböző karakterisztikát mutathat, még akkor is, ha valaki nem használ EJB-t. Ha meg használ, akkor meg bejön még sok más tétel is...

Mi mind a kettőt használjuk (JBoss és Glassfish), 99%-ban mind a kettő szuper, mondom az eddigi szívásainkat:

JBoss 4.2.3 (az 5-öst nem próbáltuk éles projekten)

-Nagy projektnél, fejlesztés során, sűrű deploy közepette deploykor fagy. Vagy a permgenspace fogy el (ezt VM config elodázza, újraindítás oldja) vagy rosszabb esetben teljesen idiótán viselkedik, meghatározhatatlan hibákkal, nem létező kódrészekre futva stb. Ekkor a server alatt a temp és a work direktorikat ki kell gyalulni és megoldódik. Viszont ez rutintalan fejlesztőnél általában 1.5 óra debuggolás után következik be, miután már a saját kódban nem talált hibát.

-Classloader mixup. Alapból kényelmes az egyszerűbb fejlesztésnél, bonyolultabb egymásra hivatkozó moduloknál hardcore szívás.

Glassfish 2.

-WS deploy esetén csak akkor hívható a web service, ha valaki már lekérdezte a WS xxxService?wsdl servletjét. Most úgy deployolunk, hogy deploy után web-es admin felületen rákattintunk :)

-Toplink Essentials. Nekem ez hónaljban szűk a hibernate után (tudom, lehetne azt is használni), legnagyobb gondom az, hogy nem tudja ezt:

ArrayList idArray;
...
Query query = em.createQuery("select c from MyObject c where c.id in(:array)");

query.setParameter("array",idArray);

-Toplink Essentials. Minden em.persist, em.merge után ki kell adni az em.flush-t, ellentkező esetben a kapcsolódó rekord nem találja meg a 2 sorral feljebb beinsertált objektum id-jét. (Az id nem adatbázis sequence-ből jön, hanem generált GUID)

Egyébiránt mind a kettő tök jól használható. A grizzly gyors mint az állat.

"Minden em.persist, em.merge után ki kell adni az em.flush-t, ellentkező esetben a kapcsolódó rekord nem találja meg a 2 sorral feljebb beinsertált objektum id-jét. (Az id nem adatbázis sequence-ből jön, hanem generált GUID)"

Minden egyéb híreszteléssel ellentétben a merge meg a persist != a db insert és update művelettel a JPA specifikáció szerint. Nem is kell id-nek lenni utánuk.

Insert és update csak flush esetén van, vagy tranzakció commit után (ami tartalmaz egy implicit flush-t). Szóval ez JPA by design ilyen, ha hordozható JPA kódot akarsz írni akkor mindenhol így kell használnod.

Kicsit még magyarázok, mert egyébként ez fontos, és én sem fogom elárulni, hogy hány év JPA használat után világosodtam meg.

Szóval, JPA alapja a PersistenceContext. Amikor valahogyan nyitsz egy új EntityManager-t, akkor azzal létrejön egy ilyen. Ha az EM-től lekérsz egy objektumot (find, query) akkor az az objektum kapcsolódni fog egy nyitott PersistenceContexthez.

Egy PersistenceContext alapesetben akkor záródik, ha vége van egy tranzakciónak. Ez lehet egy EJB Session Bean megfelelően annotált metódusából való kilépéskor, vagy akár explicit commit() esetén, tökmindegy. Amikor a PC záródik, akkor a hozzá kapcsolódó perzisztens objektumok minden változása elmentődik. Amíg a PC nyitva van, az "attached" állapotú objektumokkal bármit csinálhatsz merge vagy persist nélkül -> az is mind bele fog íródni az adatbázisba.

Tehát, kódilag:

@TransactionAttribute(REQUIRED)
public void doSomething() {
EntityManager em = ....;

Person user = em.find(Person.class, 1);
user.setName("Kovács Józsi");
}

Ez így, minden merge nélkül szépen átírja az 1-es id-jű user nevét.

Mikor kell merge? Akkor, ha detached állapotú objektumban lévő változásokat akarsz beírni az adatbázisba. Mikor detached egy objektum? Akkor, ha az a PersistenceContext, amitől alapesetben elkérted, már bezárult. Mikor zárodik egy EntityManager? Például minden tranzakció végén (ha nem extended).

@TransactionAttribute(REQUIRED)
public Person doSomething(Person user) {
EntityManager em = ....;
Person saved = em.merge(user)
return saved;
}

Fontos, hogy a JPA api merge metódusa új objektumot ad vissza -> nem az átadott objektumot teszi a PersistenceContext részévé, hanem egy új referenciát kapsz egy már attached állapotú objektumra.

Az a tapasztalatom, hogy a JPA-t nagyon sokan használják úgy, hogy a fentiekkel nincsenek tisztában -> nem látják át, hogy mi is az az EntityManager, mennyiben több, mint egy wrapper a JDBC fölé.

es lehet distributed cachet hasznalni ala, amugy :)

en azzal szivtam legutobb (pedig azthittem ertek hozza), hogy sima SE projektben ha findel visszakaps zegy olyan entityt, amiben van egy mapping egy masikra (List, Set), akkor azt nem populalja auto, kell egy em.refresh()...

neztem csak miert kapok NPEket :) (ez EE kornyezetben megy)

csak a gf reszre tudok reflektalni:
- a WS deployt nem tudom reprodukalni. hanyas gf? en hasznalok nagyon sok WSt (tobb szaz), es semmi gond.
- JPA2.0 tudni fogja, asszem.
- Joel mar leirta lentebb, hogy ez mitol van. batchekben mennek le a db fele a dolgok, igy autogenerated esetekre en mindig flush, refresht tolok.

amugy ha csak WSt hasznaltok, arra lehet kulon JAX-WS + grizzlyt hasznalni:)
ja, es a toplinket kidobhatjatok eclipselinkre, en azt hasznalok mar egy ideje.

Nem vitatkozni akarok, értem amit mondtok és el is fogadom, hogy így van, de itt nem autogenerated id-kről van szó. Máshol használunk mi is autogenerated id-ket, de itt Objektum szinten már minden (az id-is) ki van töltve csak egymásra hivatkoznak.

class A{
Long id;
String name;
}

class B{
Long id;
Long aID; // A-ra mutató ID, direkt nincs collectionre mappelve
}

Az adatbázisban A és B tábla között foreign key van.

A a = new A(); a.id=123l; a.name = "Elso";

B b = new B(); b.id=1l; b.aId=123l;

em.persist(a);
em.persist(b);
.
.

Amikor a függvénynek vége, adatbázis szinten a foreign key exceptiont dob. Gondolom az a baj, hogy nem olyan sorrendben mennek ki az insertek mint ahogy én azt megadtam. Ehhez persze az enity managernek joga van, csak leírtam, hogy más ne szívjon ezzel ha hasonló eset van.

Hoppa itt a kutya elasva, a JPA nem is tud B->A ManyToOne relaciorol, miert tudna, hogy A-t alobb kell lementeni, mint B-t. A Long aID mezot csereled le A-ra mondd meg neki hogy ManyToOne, es akkor jo lesz. A JPA objektumokkal dolgozik, es ezek kozotti relaciokat ertelmezi, es tolja ki adatbazisba. A JPA-ra ugy kell gondolni, mintha egy objektum perzisztencia lenne, amit lehet hangolni, hogy eppen milyen tablakba dolgozzon.

A glassfish verziója:
Sun GlassFish Enterprise Server v2.1 (9.1.1) (build b60e-fcs)

10-ből 5 ször jó, 5 ször meg nem. Az alkalmazás ear-ban van, abban ejb és war.
Most hirtelen persze nem tudom reprodukálni. Hiba esetén az a jelenség, hogy az ear deployol, az admin felületen ott is vannak a ws-ek, de ha hívni akarja a kliens (java és C++ gsoap) akkor olyan hibát dob, mintha nem is lenne deployolva ilyen web service. Ha utána bárki lekérdezi a wsdl-t, egyből megy a hívás. Ha találkozom vele, küldöm az exceptiont.

Esetleg lehet az megoldas, hogy a kliens appba belerakod a WSDL lekerest, mielott barmi tortenne. Ez egyebkent sem rossz dolog, mert igy meg lehet bizonyosodni arrol, hogy valamifele kapcsolat van a szerver fele... Persze ez csak egy kocakoder tippje, keretik a helyen kezelni.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Ezzel vitatkoznék. Mindenkinek az a szopó, amit még nem látott. Aztán legfeljebb megismeri (learning curve, ugye). Nekem pl. a JBoss a szopó, ha meglátom, hogy valaki azt használ egyből menekülhetnékem van a projekt közeléből. Ettől függetlenül végigcsináltam kb ugyanannyi fejlesztést JBoss alapokon, mint Glassfish-en, de a Zuzu Petaz érzés valahogy nem akar múlni ha JBoss a kiválasztott platform.

Tomcat helyett meg már tényleg inkább Glassfish. Vagy akár embedded jetty és akkor futtathatod az alkalmazást akár java -jar-ral is. De plain old Tomcat erősen felejtős.

Kezdem en is megszeretni az uveghalat. Sokkal kellemesebb a management felulete, es a fejlesztest is tudja egy kisse segiteni. Bar en meg csak most ismerkedek az egesz szerver oldali Java fogalomkorrel, a Tomcat valahogy sosem volt igazan bejovos.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Hat igen izlesek es pofonok, valaki szeret adminconsolon, webes feluleten gombokat nyomogatni, valaki xml file-okat szeret szerkeztgetni console-bol. Bar nekem kicsit maceras volt pl. WebSphere adminconsoljan megtalalni az x-edik almenuben epp azt a parametert amire szuksegem volt. Egyebkent az erdekes hogy a WebSphere senki nem emliti, bar ertem hogy miert. Talan a legnehezkessebb, es legdragabb mind kozul. Sajnos kell meg vele bajlodnom.

Mint valahol már írtam a glassfish CLI nagyon jó. Pl ilyen domain setup scriptjeim vannak:

#!/bin/sh
ASADMIN=/opt/glassfishv3/bin/asadmin
name=$1
app=$2
pw=$3

$ASADMIN --port $PRODPORT create-virtual-server --hosts=www.${name},$name --networklisteners=http-listener-1 --defaultwebmodule $app $app
$ASADMIN create-jdbc-connection-pool --port $PRODPORT --datasourceclassname=org.postgresql.ds.PGSimpleDataSource --restype=javax.sql.DataSource --property databaseName=$app:password=$pw:portNumber=5432:serverName=localhost:user=$app ${app}Pool
$ASADMIN create-jdbc-connection-pool --port $DEVPORT --datasourceclassname=org.postgresql.ds.PGSimpleDataSource --restype=javax.sql.DataSource --property databaseName=${app}_dev:password=$pw:portNumber=5432:serverName=localhost:user=$app ${app}Pool
$ASADMIN create-jdbc-resource --port $DEVPORT --connectionpoolid=${app}Pool jdbc/${app}
$ASADMIN create-jdbc-resource --port $PRODPORT --connectionpoolid=${app}Pool jdbc/${app}

WebSphere-t azt hiszem jobb nem emlegetni:)

--
The reason that half of us are in computing at all is that we see computers as things that we can make beautiful things out of..

Én egy Sun Web Server-t használok a 80-as porton, ami reverse proxy-zza a glassfish-t, de alapvetően igen. v3-ban b66 előtt voltak gondjaim a virtual hostokkal, de azóta működik szépen, 4 külön alkalmazás fut ugyanabban a jvm-ben különböző virtual hoston, ugyanazon a porton a /-en:).

Aham... es a v2 eseteben mi a helyzet? Az az igazsag, hogy egyelore a v2-t szeretnem megismerni, a v3 egyelore mozgo celpontnak tunik, az pedig nem elony, ha az ember egy tokismeretlen platformot akar megismerni...

Szerk: kozbe talaltam egy ilyent. Egyvalamit nem tudok: az apache atpasszintja a hostnevet? Vagy explicite a $ServerName ertekkel kell meghivni a glassfish-t?
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Tapasztalatok JBossal, alapvetoen GF kornyezetbol szabadulva:
- Mindenfele tuninghekkeles nelkul a nehanyadik redeploynal permgen terulet megtelik, meglehetosen zavaro ("-oke, kiraktam az appot, nezheted! -nem megy! -he? jahogy, restart. (1p mulva) -oke, ujra."), tomcattel ugyanez a helyzet.
- Az adminkonzol hianya jelentos, de nem fogjuk elvagni az ereinket, egyszeru integralt monitoring viszont nagyon kene. Az szopo, hogy az xmlekben nem teljesen egyertelmu, hogy mit es hova kell irni (uj fajlba, regibe, melyik regibe, milyen szintaxissal), igy aztan rohamosan terjednek a borzalmas mintak. Ennel azert egyertelmubb a glassfish, es azert ott is lehet turkalni, ha muszaj.
- Sokan nem tudjak, de a 4.2.3 es az 5.0.0 kozott van meg egy 4.3-as szeria is, csak rendkivul ostoban lettek osszerakva benne a libek, es emiatt vegtelen mennyisegu pici bug meg inkompatibilitas van. Nem is baj, hogy nem annyira ismert.
- GFv3 utan nagyon lassu az indulas :)
- Szani, hogy nagy cegek EE5 projektekben 4.2.3-as, hivatalosan nem EE5 certified rendszereket mutogatnak eladasra/hostingra, es meg buszkek is ra.

Az az igazan szar, amikor ot-tiz percig keresgetni kell, hogy a kollega eppen hol es miert ott definialta az uj queue-t, es hogy milyen parametereket lehetne meg beallitani. Ha egyertelmu lenne, hogy mit hova kell tenni kotelezoen, akkor nagyjabol okenak ereznem.

(Erdekes amugy, nalunk a JBosson nevelkedett emberek mennyire XML-baratok, bar ez johet onnan is, hogy meg boven pre-EJB3 meg pre-Java5 idokbol szarmaznak. A generics se musthave nekik, ha viszont van, akkor *minden* legyen elarasztva lehetoleg egynel tobb tipusparameterrel. De legalabb jol fizetnek.)

A permgenes hiba majdnem mindenhol elojon, de nem ennyiszer :)

A JBoss permgen probléma a JBoss ClassLoader hierarchiájának is betudható, sajnos számolni kell vele, de éles rendszeren az ember nem deploy-ol óránként, másrészt pedig fejlesztői rendszeren magasra lehet venni a PermGen space méretét.
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD

Classloader leak -et szinte barmi eloidezheti, sajnos az olyan app a ritkabb ahol nincs. Majdhogynem standard java cuccok miatt is eloall alapbol, nehe (Nem vagy kotve XY (zart) frameworkhoz) komoly nyomozassal kideritheto, es balkezzel vakarom jobb fulemet megoldassal elharithato.

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

A probléma akkor van, ha nem fában hivatkoznak egymásra az osztályok, hanem gráfban, és így az egymásra hivatkozó osztályok akkor sem takaríthatók ki, ha szigetet képeznek. Ezen dolgoznak, de egyelőre még van ClassLoader-leak, amire figyelni kell.
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD

Eleg, egy az application class loadere altal betoltott class objectjet atadni egy az application class loadere felett levo class loader (pl. container class loadere ) altal betoltott class peldanyanak. Amig az emlekszik ra, az application class loadere altal betoltott osszes class nem felszabadithato.

Ilyesmi elfordul sok logger cucc eseten.
Leak lehet amiatt is, hogy az alkalmazas letre hozz egy szallat, aminek futasa nem all meg undeploykor.

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

Es ki add jobb support-ot a SUN vagy az Oracle ?

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

Visszatérve az eredeti kérdésre.

A Weblogic ugye fizetős, de cserébe alapból azért többet tud mint a Glassfish. Van benne pl. beépítve SAML2 szerver, amivel elvileg automatikusan lehet identitást propagálni Weblogic szerverek között. (Glassfishben ehhez már minimum OpenSSO kell).

Van pl. elég jó Spring integráció (bár én sose használtam), a doksik szerint az admin felületről lehet piszkálni a Spring beaneket.

És elég jó scriptelhető is. Van egy Python konzolja, ahonnan minden JMX Bean elérhető és automatikusan elvégezhetőek beállítások.

Sőt, admin felületről kvázi makró rögzítő módon rögzíteni tudja a változásokat egy Python scriptbe, ami később újra lejátszható.

Persze vannak vele szívások is, melyik termékkel nincsenek, ráadásul a forrás se nyílt, ezért a bugyraiba nehezebb néha belátni.

És persze elég jó ára van. Kérdés, hogy adott helyzetben megéri-e a Glassfish-el szemben.

Szerintem meg mindig az a jo valasz, hogy attol fugg. Ha kifejezetten Spring-re epulo nagy rendszered van, ha szukseged van onmukodo identitas-propagaciora, ha csak a WebLogic-hoz ertesz profi modon, akkor ertelemszeruen WebLogic. Ha csak valami EJB kontener kell, amit egyszeru menedzselni, vagy clustert szeretnel csinalni egyszeru modon, esetleg kezdo vagy, es csak kene valami java szerver fejleszteshez - akkor GlassFish.

Szoval en azt mondom, merlegelni kell. Abban gondolom egyetertunk, hogy sosem az eszkoz hatarozza meg a celt, hanem a cel az eszkozt. Azt az eszkozt kell valasztani, amelyik a legtobb pluszt adja az adott celhoz, a legkevesebb negativ tulajdonsag mellett. Egy uzleti fejlesztes kelloen bonyolult tud lenni ahhoz, hogy ne bonyolitsuk egyeni preferencia szerinti szervervalasztassal. Szerintem.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.