van egy jboss szerverem, amin a contextListener destroy eventje alatt szeretnék bizonyos memóriában tartott dolgokat az adatbázisba menteni, jdbc-vel
olyan hibát kapok, hogy a managed connection akármi amitől a connection-öket kapom már le van zárva, mire én a destroy eventből menteni szeretnék, és ehhez connection-t kérek
lehet az, hogy ez a koncepció elvi hibás és a destroy alatt már nincs connection pool, vagy nem biztos hogy van, vagy ezt valami teljesen más okozza (ami nem zárható ki, simán lehet, sőt majdnem biztosan van resource flow a dolog körül)
nem tudom úgy megfogalmazni a kérdést, hogy a google is értse és olyat dobjon ki ami releváns
Sajnos ugy tunik (meg azert probalkozom vele), hogy nem hibatlan a linken talalhato megoldas. Meg sem hivodik a feluldefinialt writeTo metodus a transfer soran. (egy beagyazott osztaly lehet a bunos, mas metodus dolgozik - nem a feluldefinialt writeTo- ha DataSource-szal peldanyositjak a classt.) A file persze foltoltodik ahogy kell, csak eppen nem hasznalja az emlitett eljarast.
Egyebkent en hasonloval probalkoztam, de a foltoltesnel, nem a letoltesnel. Ekkor annyiban tovabb bonyolodott a helyzet, hogy nem kuldhettem at a web service-on az alap DataHandler tipust, hanem a leszarmaztatott tipus kellett. (Hiszen a serveren nem tudtam volna os osztalyt castolni a gyerekre) Elegge homalyos ez a terulet nekem egyelore meg. Az sem vili, hogy megy at a DataHandler, ha az en leszarmaztatott tipusom eseten meg exception jon, hogy nincs parameter nelkuli konstruktora a tipusomnak. (Ugyanis a DatatHandler-nek sincs ilyen) Persze parameter nelkuli konstruktort is meglehetosen korulmenyes csinalni, ugynais az ososztalynak sincs ilyen. :))))))) Ezt meg ki is kerultem valahogy egy nagyon csunya "trukkel", de persze igy sem mukodott a rendszer, mert a mime type-ok miatt jottek az exceptioniok.
Azt gondolom, server oldalon nem nagyon kellene piszkalni semmit, mert kliens oldalon kell a progressbar. Tehat mellekes, hogy glassfish, vagy mas.
"Akkor az a gond, hogy ennél csak magasabb szintű API-k állnak rendelkezésedre?"
Igen, valammi ilyesmirol van szo, szoval nem szeretnek http klienst irni. Letoltesnel be kell elozni a DataHandlert valahogy, peldaul a mar korabban emlitett leszarmaztatott osztallyal, foltoltesnel is valami hasonlo dolog lehet a nyero.
Koszi a linket, ez nagyon hasznos lehet, mert en is pont ezen a modon szerettem volna megoldani a dolgot (felulirni a DataHandler egyik writeTo metodusat) hatha kiderul, hogy kellett volna jol csinalni.
Értem, de valahogy nem látom a problémát, igaz, nem ismerem a Glassfisht, de tetszőleges HTTP kérésnél egyszerűen kiolvasom a headerből a file hosszát, aztán meg rántom be az adatokat a streamen, miközben egy másik szálon követem, hogy mennyit húztam már át.
Akkor az a gond, hogy ennél csak magasabb szintű API-k állnak rendelkezésedre?
Amikor a kov. sorra kerul a vezerles, a file mar teljes egeszeben letoltodott a mem-be a serverrol. Innentol fogva en mar csinalhatok amit akarok, semmit nem er az egesz.
Figy! Irtam en mar progressbaros feltoltot AS3-ban. Php volt szerveroldalon (semmi extra modul nem volt hozza, mert a M.....center webhostingjan volt). Egyszerre barmennyi file-t foltol, letolt (ha megszakad a letoltes, folytathato, ahol abbamaradt). De mindez meg semmi. Kozben kecskepornot neztem a bal szememmel. Nna?
Egyebkent kosz, hogy beleugatsz, mert pont ezert tettem fol a temat a forumra, hogy "beleugassanak" masok.
Az elozoeket osszevetve: Egy DataHandler (@XmlMimeType("application/octet-stream")-el annotalva ) tipust kuld web service-on keresztul a server. Megneztem a DataHandler forrasat, probaltam leszarmaztatni sajat class-t, es azt kuldeni a kliensnek. (DataHandlernek raadasul nincs ures konstruktora sem) elvereztem a mime tipusokon. (Nem tudom most megmutatni az exceptiont, mert nincs nalam a kod)
Mindezeket azert irom, mert nem az a helyzet - amit folyamatosan bizonygatni kell itt a forumon ahelyett, hogy a web service-rol lehetne beszelni - hogy arra nem veszem a faradsagot, hogy odabokjek a guglinak. Semmilyen talalat nincs web service-os file atvitelre, ahol lenne valamifele progressbar. Nekem viszont, mint nem tulzottan hozzaertonek, azok a talalatok, mint amilyet te is kuldtel nem nagyon segitenek (nem tudom hogyan kossem hozza az en DataHanler tipusomhoz). Nem akarok en itt kesz kodot latni. Valami olyan tipus kellene, amiben at tudom kuldeni a binarist MTOM-mal, es hozzaferest ad a file-atvitel soran, a tobbit mar megoldom en.
reszlet a datahandler egyik publicvoid writeTo(OutputStream os) throwsIOException metodusabol:
"Oke. alapbol tenyleg igy van, de van php alatt megoldas, last amit irtam..."
Hogy kulon modullal meg lehet oldani, mar huszonotszor megirtuk mindketten, te is en is. Te leirod huszonhatodszor is. Nna most, en vettem a faradsagot, es megneztem a korabbi hozzaszolasaiadat, es nem ugy tunik, mintha nem tudnal haromig szamolni. Ergo itt valami ugratasrol van szo. En voltam lassu, mostmar vettem a lapot. :))))))))))))
php-nal: ha legalabb elolvastad volna amit irtam, nem irnal ilyen butasagokat. Oke. alapbol tenyleg igy van, de van php alatt megoldas, last amit irtam...
php-nel mi volt a problema? Az, hogy mikor hozzanyulhatnal a file-hoz a a serveren a kododdal, mar regen font van a teljes allomany a serveren. Progressbar kilove.
mi a problemam kliens oldalon (letoltesnel)? Hogy a web service hivasat megvalosito utasitast kovetoen, mar cs.szhetem az egeszet, mert lent van a memoriaban az egesz file.
DataHandler dh = fws.fileDownload("a.jpg");
(olyan butasagok jutottak az eszembe, hogy szalak, meghogy ha file-ba menne a dolog, akkor lehetne azzal jatszani) De gyanitom, hogy van ennel joval egyszerubb megoldas is.
magamat idezem: "(vannak ezt kikerulni kepes modulok "vagymik" php-hez, de errol szerintem egy webhostingos szolgaltatonal ne is almodjunk)"
teged: "Egyrészt, ha legalább egy micronnyi időt rászántál volna, és legalább rákeresnél, hogy ne érezd teljesen tudatlanul, akkor kapásból látod, hogy van megoldás php alatt is."
Ezt a kettot hogy hozod ossze?
Egyebkent ez az egyszeru megoldas szerinted, hogy kikunyizom a szolgaltatonal, hogy telepitse mar fol azt a modult? Most is mondom: alapbol nem tudsz progressbaros php-js kodot irni. Persze kulon modul telepitesevel igen. De ezt irtam mar korabban is. Ezert a fenti megjegyzesed azt mutatja nem olvastad el, amit irtam. Na ez kilove.
Igy nez ki a letoltos szerveroldali kod: ( a class annotalva @MTOM annotacioval)
@Override public @XmlMimeType("application/octet-stream") DataHandler fileDownload(String name) { File file = new File("/home/xxxxx/" + name); FileDataSource fd = new FileDataSource(file); DataHandler dh = new DataHandler(fd); return dh; }
Odaig jutottam hogy ehhez nem erdemes hozzanyulni. Visziont kliens oldalon van egy StreamingDataHandler-es lehetoseg.
Nem talaltam sehol a neten olyan cuccot ezen kivul, amibol kiindulhatnek. Egyaltalan nem tunik trivialisnak a dolog, fokeppen, hogy nem profi java-s vagyok.
Elhiszem hogy en vagyok a setét, ezzel gond nincs. De.
Egyrészt, ha legalább egy micronnyi időt rászántál volna, és legalább rákeresnél, hogy ne érezd teljesen tudatlanul, akkor kapásból látod, hogy van megoldás php alatt is. Ajánlom a google: php file upload with progressbar. Rohadt bonyolult keresési szöveg elismerem. Szóval apc támogatással van. Ergó ez kilőve.
A másik, leírtad a java kódot, amibe tulajdonképpen a megoldás is benne van, csak vélhetően úgy keresed a megoldást itt is mint a fenti esetben.
Igen, lehetséges mindkét általad leírt esetekben. A java-java példához, hogy javaslatott lehessen tenni, tudni kellene mi is van abban a fws.fileUpload hivásban. Esetleg ha belenéznél Te is biztos meglátnád, hol lehet megfogni, azt amikor az adatokat kiírja. Vagy ha pontosabb infó kell, akkor a webservice-be is kell egy hívást tenni, amivel le lehet kérdezni, mennyi ment át. Ez utóbbi megoldás hajaz a fenti php(perl,ruby,lofasz,....) - ajax-os megoldásra is.
De persze nem fontos megoldásban gondolkoznod, nyugodtan fikázz mindenki mást, az egyrészt tuti megoldás, másrészt jobban alszol tőle, még ha nem is jutsz előbbre.
"Van annak elvi akadalya (mint pl php-javascript parosnal) hogy egy web services-os file atvitelnel progressbarral megjelenitsem az atvitel allasat?"
Talan lehettem volna egyertelmubb igy:
"Van annak elvi akadalya, hogy egy web services-os file atvitelnel, AHOL A SERVER ES A KLIENS IS JAVA-s, progressbarral megjelenitsem az atvitel allasat?"
Mentsegemre: ezt itt egy java forum. (de mint mar mondtam, valoban lehettem volna egyertelmubb)
"speciel php-js -nel sincs akadalya :)"
Lehetett volna egyertelmubb a peldam is. Nem az volt a pelda peldaerteke, hogy vekonykliensrol van szo, hanem hogy annak ellenere, hogy te mast mondasz, igen is van akadalya egy php-ajax parosnal a progressbarnak. (Azt gondoltam, hogy ennek az oka "koztudott", ezert ertheto lesz, miert hozom ezt peldanak. Megint nem voltam eleg egyertelmu.)
"nezd meg a web service foltolto metodusa-t, hogyan lehet vele megoldani" Jo, megnezem, hogy hogy lehet vele megoldani. :)))))
"egeszitsd ki/ird at a web service foltolto metodusa-t, hogy tudja ezt." Jo, atirom, hogy tudja ezt. :))))
Azt gondolom, neked fogalmad sincs a dologrol, azert adsz ilyen hasznos tanacsot. Ez egyebken rendben is van, mert peldaul nekem sincs rola fogalmam, hogy lehet megoldani.
En ezert kerdeztem meg itt, a forumom, es te?
Ha megoldom (mert megoldom valahogy) folteszem ide, masok okulasara is.
kis kavar van nalad kliens-kliens temakorben talan. Eloszor php-ajax-ot emlegetsz peldanak, tehat szerver es webes bongeszo kommunikacioja, majd irsz egy peldat egy java progira mint vastag kliens. Talald ki mit akarsz eloszor is.
Ha ez utobbi vastag klienses, akkor nezd meg a web service foltolto metodusa-t, hogyan lehet vele megoldani a kijelzest feltoltes allapotarol, vagy egeszitsd ki/ird at a web service foltolto metodusa-t, hogy tudja ezt.
File file = new File("c:\jasperReports.pdf"); FileDataSource fd = new FileDataSource(file); DataHandler dh = new DataHandler(fd); fws.fileUpload("jasperReports.pdf", dh); //itt fsw.fileUpload a web service foltolto metodusa
ez pedig a letoltes:
DataHandler dh = fws.fileDownload("a.jpg"); // elkerem a web service-tol a file-t File file = new File("e:\xxxx\" + "a.jpg"); OutputStream fos = new FileOutputStream(file); dh.writeTo(fos); fos.close();
Szamomra az a kerdes, mert azt nem tudom, hogy megoldhato-e. Azert kerdeztem ezt, mert evvel kapcsolatban vannak ketelyein. Az vilagos, hogy ha kliensoldalon folszeletelem a filet, akkor tudok egyfajta progressbart varazsolni a proceduraba, bele is kezdenek ebbe a kisse korulmenyes valtozat lekodolasaba, ha "bebizonyosodna" hogy egyszerubben nem oldhato meg.
En ott akadtam el, hogy csinaltoam egy MTOM-os web service-t, amivel kivaloan lehet file-okat foltolteni, letolteni. (egyebkent vastagkliensrol van szo, es ssl-es basic autentikacios mizeria van benne, de ez talan mellekes is) Itt jott a kepbe, hogy kellene progressbar.
Nem az a kerdes, hogy megoldhato-e, mert viszonylag egyszeru. A kerdes az, Te hol akadtal el vele? Az nem derul ki, folyton csak azt kerdezed ilyet csinalt-e mar valaki :) Az a kerdes, hogy Te elkezdted, hol akadtal el?
ez eleg off, de szerintem php-ajax-nal azert van nemi akadaly. Eloszor is, hogy amig a superglobalisok nincsenek meg , addig nem fersz hozza semmihez a serveren, $files[] (vagy mi a turo volt a phpnel ez) pedig superglobalis. Innentol bukik az egesz, mert mire megmukkanna a php-s kodod, mar regen font van a file. Kliens oldalon a javascripttel meg nem lehet szeletekben folkukdeni a file-t. (vannak ezt kikerulni kepes modulok "vagymik" php-hez, de errol szerintem egy webhostingos szolgaltatonal ne is almodjunk). Flash-php az mar mas, olyat csinaltam mar. Szimultan tetszoleges mennyisegu filet fol lehet nyomni. (progressbarral, savszelesseg kijelzessel, stb) (bar szerveroldalon ott is eleg sok buktato van.)
Tehat anelkul, hogy folszeletelnem a filet, megoldhato-e javaban a progressbaros web service-s fol/le toltes? Csinalt valaki ilyet mar? (gugliban nem talaltam csak .NET-es cuccot)
Van annak elvi akadalya (mint pl php-javascript parosnal) hogy egy web services-os file atvitelnel progressbarral megjelenitsem az atvitel allasat?
(anelkul pl. hogy kisebb darabora vagnam a file-t es igy kuldenem at az eteren, es a darabok szamabol es mertebol kalkulalnam a progressabrhoz szukseges ertekeket)
5 masodpercenkent pollozza a mysql servert. Mi lehet ez? Lattatok mar ilyet? Eleg idegesito, mert a mysql server logjat is teleszorja. Mire kellhet ez a glassfishnek?
111128 11:57:35 3038 Connect egyUser@192.168.10.201 on egyTabla 3038 Query /* mysql-connector-java-5.1.13 ( Revision: ${bzr.revision-id} ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' OR Variable_name = 'init_connect' 3038 Query /* mysql-connector-java-5.1.13 ( Revision: ${bzr.revision-id} ) */SELECT @@session.auto_increment_increment 3038 Query SHOW COLLATION 3038 Query SET NAMES latin1 3038 Query SET character_set_results = NULL 3038 Query SET autocommit=1 3038 Query SET sql_mode='STRICT_TRANS_TABLES'