- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Luck Dragon: Asszociációs játék. :)
- Szevam: Mennyire tipik Z-gen viselkedés? Tipizálható-e egyáltalán?
- Magga: PLEX: multimédia az egész lakásban
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Fűzzük össze a szavakat :)
- body007: Magyarország kifosztásának története
- sziku69: Szólánc.
- Elektromos rásegítésű kerékpárok
- lezso6: Nem látszik a kurzor Chrome alatt a beviteli mezőkben?
Új hozzászólás Aktív témák
-
vgergo
aktív tag
Sziasztok
Az alábbi kód megértéséhez kérnék segítséget:
Forráskód:
package proba;
public class NewClass {
static void aa(int i) {
i++;
}
static void bb(Integer i) {
i++;
}
static void cc(int[] i) {
i[0]++;
}
static void dd(int[] i) {
i = null;
}
public static void main(String[] args) {
int a = 9;
Integer b = 9;
int[] c = {9};
int[] d = {9};
System.out.println(a);
aa(a);
System.out.println(a);
System.out.println("-------------------------------");
System.out.println(b);
bb(b);
System.out.println(b);
System.out.println("-------------------------------");
System.out.println(c[0]);
cc(c);
System.out.println(c[0]);
System.out.println("-------------------------------");
System.out.println(d[0]);
dd(d);
System.out.println(d[0]);
}
}
Eredmény:
run:
9
9
-------------------------------
9
9
-------------------------------
9
10
-------------------------------
9
9
BUILD SUCCESSFUL (total time: 0 seconds)6. helyen miért 10 szerepel, míg a többi helyen csak 9?
Segítséget előre is köszönöm! -
Szmeby
tag
válasz
Lortech #6895 üzenetére
"Amúgy hol vannak a resteasy lib-ek? WEB-INF/lib-ben van mindkét war-ban ugyanaz a verzió?"
Igen, mindkér war WEB-INF/lib könytárában vannak a jarok. Ugyanaz a verzió, bár szerintem ez már nem sokat számít."Én a "-verbose:class" -t is megnézném, hátha valami összefüggés kiolvasható belőle."
Jaja, tegnap már mentem vele egy kört, de elég nagyok ezek a warok, hogy az eclipse console 2 war esetén is kifusson a maxra húzott pufferből.Köszönöm mindenkinek a tippeket, még szenvedek vele egy kicsit.
Legrosszabb esetben majd futnak külön jettyben.Érdekességképpen:
Thread.currentThread().getContextClassLoader()
/* WebAppClassLoader=webapp2 */
org.jboss.resteasy.specimpl.ResteasyUriBuilder.class.getClassLoader()
/* WebAppClassLoader=webapp2 */
javax.ws.rs.core.UriBuilder.fromUri(absoluteUri).getClass().getClassLoader()
/* WebAppClassLoader=webapp1 */
javax.ws.rs.core.UriBuilder.class.getClassLoader()
/* sun.misc.Launcher$AppClassLoader@74f2ff9b */
javax.ws.rs.ext.RuntimeDelegate.class.getClassLoader()
/* sun.misc.Launcher$AppClassLoader@74f2ff9b */
javax.ws.rs.ext.RuntimeDelegate.getInstance().getClass().getClassLoader()
/* WebAppClassLoader=webapp1 */org.jboss.resteasy.core.ThreadLocalResteasyProviderFactory (ami egy RuntimeDelegate) rendelkezik egy "org.jboss.resteasy.spi.ResteasyProviderFactory defaultFactory" field-del (ami szintén egy RuntimeDelegate). Bár threadlocal az osztály neve, de azt a funkcióját épp nem használja semmire, hanem a defaultFactory-val dolgozik, amihez a webapp1 anno már készített egy példányt. Ezen a példányon keresztül gyűrűzik be a rossz classloader a másik webapp-ba.
Az UriBuilder mélyén minden a webapp1 classloaderével készült.
org.jboss.resteasy.specimpl.ResteasyUriBuilder.class.getClassLoader()
/* WebAppClassLoader=webapp1 */
new org.jboss.resteasy.specimpl.ResteasyUriBuilder().getClass().getClassLoader()
/* WebAppClassLoader=webapp1 */Feltételezem, úgy lenne ez szép, ha a közös libek közös classloaderrel töltődnének be (külön webapp-ban?), csak hát erős a gyanúm, hogy a sok war libjei más-más közös részhalmazzal rendelkeznek.
Vaaagy, kicsomagolom a warokat egy helyre, és minden fusson a system classloaderrel.
Ez már nagyon hekkes lenne. -
floatr
veterán
válasz
Aethelstone #6894 üzenetére
A jboss-deployment-structure.xml file-ban lehet definiálni, de talán van rá valami szabványos megoldás is a MANIFEST.INF-ben megadható dependency formájában.
Nem fogok most ennek utánajárni asszem, de én itt keresgélnék.
-
Lortech
addikt
Nincs általános válasz, normálisan nem kéne ilyen probléma legyen két war között. A frameworköknek és konténereknek kéne megoldani, hogy ilyen ne legyen, mégis gyakran előfordulnak ehhez hasonló érdekességek.
A RuntimeDelegate lehet speciális, mivel javax-es package-ben van, és elképzelhető, hogy ezt a jetty a system classloaderrel tölti. Valami közös szülő classloadernek lennie kéne a két alkalmazás között, ami okozza a problémát, másként érvényesülne az, hogy a szóban forgó osztályok a war-ok WEB-INF/lib WEB-INF/classes-eiből töltenek, mivel ez prioritást élvez, és a két "különböző" verzió nem akadna össze.Meg egyáltalán... nem a thread contextclassloaderét kellene használnia egy objektum legyártásakor? Vagy ilyenkor a legyártást végző osztály classloaderét örökli az új objektum? Ezekszerint az utóbbi.
Utóbbi. A createUriBuilder működhetne úgy is, hogy a thread context classloaderrel tölt be egy implementációt, de a bemásolt kód nem ezt teszi (az se biztos, hogy ez a sor indukálja a class betöltését).
Amúgy hol vannak a resteasy lib-ek? WEB-INF/lib-ben van mindkét war-ban ugyanaz a verzió?
Én a "-verbose:class" -t is megnézném, hátha valami összefüggés kiolvasható belőle. -
Aethelstone
addikt
A Jbossnál ez úgy megy(ahogy emléxem), hogy megadható, hogy a különféle EAR fájlokat ugyanazzal a classloaderrel töltse be. Ami azért fancy, mert a cucc innentől fogva semmilyen más app szerverbe nem telepíthető
Amennyiben a kód kihasználja ezt a remek feature-t
Legalábbis a 4-es JBoss tudta ezt, azzal találkoztam utoljára.
Egyébként szerintem nem túl szerencsés, hogy a WAR-okat ugyanaz a classloader töltse.
-
floatr
veterán
JBoss tud olyant, hogy egy közös war-ba lehet telepíteni a közösen használt libeket. Mondjuk az sem sokkal jobb megoldás, de kicsit furcsállom ezt a classloader összeakadást. Most nézem, hogy maven plugin is van arra, hogy egy konkrét war-ból kimásolja a libeket az újba jettyhez.
Én mondjuk tutira kitesztelném ezt a dolgot egy saját jarba forgatott singletonnal, ami logol mindent, ami az életciklusával kapcsolatos.
-
Sk8erPeter
nagyúr
válasz
M_AND_Ms #6874 üzenetére
"Csókoltatom a könyv íróját!"
Nem lőttél mellé, nem akarok szemét lenni, de szegénykém egy kókler. Sok tekintetben megragadt a tudása valahol a kilencvenes évek végén, kétezres évek elején, szerintem nem igazán képzi már magát. Ezt onnan tudom, hogy BME-n még régebben felvettem nála egy webfejlesztéssel kapcsolatos tárgyat (kellett a kredit, gondoltam akkor már érdekeljen), és az előadásain a kínok kínját éltem át, amikor például megmutatta a JavaScript-kódjait, és a saját maga által sok-sok éve írt tákolmány fos kódot nem értette, látszott, hogy elakad, agyalnia kellett rajta, hogy az mit is csinál, már nekünk, a hallgatóknak volt égő, készültem rá, hogy jelentkezem, és elmagyarázom neki, mit csinál a saját kódja (de türelmesen vártam, mert így is elég kínos volt a helyzet), de 5 perces hümmögés után valahogy rájött, vagy skippelte a diát. Ősrégi, elavult módszereket alkalmazott, a kódok összecsapottak voltak... na most ennek fényében el lehet képzelni, mennyire lehetnek jók a Java-kódjai és -feladatai. Igazából megdöbbentő számomra, hogy BME-n taníthat (na nem mintha nem lehetne még sok nevet dobálni, akinek finoman szólva nem up-to-date a tudása).Szerk.: az egészből a következtetés igazából annyi, hogy szerintem azt a könyvet nem érdemes komolyan venni, így tanulni sem belőle, bár sosem olvastam, de az előbbi példa lehet, hogy elég is volt rá.
-
Szmeby
tag
Szoktatok több wart közös jvm-ben futtatni?
Én most egy embedded jettyvel küzdök. Adott néhány war, egy jettyben, de külön contextHandlerben. Látszik, hogy mindegyik war kap saját classloadert, még jó is lenne, ha ezek nem akadnának össze úton útfélen.
A probléma gyökere, hogy a resteasy egy uri feloldásakor a javax.ws.rs.core.UriBuilder-t használja (pontosabban annak egy resteasy-féle leszármazottját), az pedig a (szintén resteasy-féle) javax.ws.rs.ext.RuntimeDelegate kvázi-singletonhoz. Itt borul a bili, mivel a webapp1 már létrehozta ezt a singletont a saját classloaderével. Lazy init, hurrá!
public UriBuilder createUriBuilder() {
return new ResteasyUriBuilder();
}Érdekes, hogy amikor ráhívunk ennek a példánynak a createUriBuilder() metódusára, akkor az a webapp1 classloaderével betöltött objektumot gyártja le, függetlenül attól, hogy a metódus hívásakor a webapp2 környezetében járunk, a currentThread contextClassLoadere is a webapp2 classloaderére mutat.
Nem volt még alkalmam megismerkedni a classloaderek világával, valakinek van ebben tapasztalata? Hogyan is kellene - illene - több wart futtatni 1 embedded jetty alól?
Meg egyáltalán... nem a thread contextclassloaderét kellene használnia egy objektum legyártásakor? Vagy ilyenkor a legyártást végző osztály classloaderét örökli az új objektum? Ezekszerint az utóbbi.És persze a problémát az okozza, hogy a visszakapott UriBuilder objektumot ez a szerencsétlen castolná önmagára... vagyis majdnem, hiszen az cast során már képes a webapp2 által betöltött típust használni.
Eredmény: ClassCastException -
floatr
veterán
válasz
Aethelstone #6882 üzenetére
Akkor egy mongodb elég lesz alá. Vagy clusterben gondoltad?
-
jetarko
csendes tag
Én is túlbonyolításnak érzem, de hát kísérletezek
A csak db-be tárolással az a gondom, hogy ha MVC-ben vagyok, akkor a modelhez mindig adjam hozzá azt a szöveget ami ott megjelenik ez sok-sok model.add sor is lehet vagy nem tudom, hogy lehetne máshogyan.Az új nyelv futásidőben való hozzáadás az én megoldásomnál bonyolult, mert entitáson keresztül kezelem a db-t és ha új nyelvet akarok, akkor bővítenem kéne az entitásomat és erről fogalmam nincs, hogy lehetne futásidőben, vagy teljesen máshogyan kéne felépítenem az entitás rendszert, tuti lehetne trükközni, de még nem jöttem rá.
-
Szmeby
tag
válasz
jetarko #6862 üzenetére
A magam részéről feleslegesnek tartom ennyire túlbonyolítani a dolgot. Ha statikus szövegről van szó, akkor annak a pártján vagyok, hogy tároljuk property fájlban, nyelvenként külön-külön:
messages_hu_HU.properties
messages_en_US.properties
stb...
Egy új nyelv bevezetése pofonegyszerű... persze ehhez matatni kell a fájlrendszeren.Amennyiben vannak olyan szövegek, amelyek gyakran változnak, akkor azok lehetnek adatbázisban (akár in-memory db, akár ennek rendszeres backup-jával). Igazából attól függ, hogy mi a célja, mire használod a szövegeket, mennyire érzékeny adatok ezek, stb.
Azzal, hogy két helyen tárolod a cuccokat, magadra vetted ezek szinkronban tartásának terhét. Ha ez az igény, akkor nincs mit tenni. Gondoltál a teljesítmény problémákra is, csinálsz hozzá pár komponens tesztet, ezeket akár egy CI rendszerben, akár időnként kézzel megfuttatod, és nincs vele teendő. Legfeljebb majd később átírod, a szoftver úgyis mindig fejlődik.
Sosincs jó megoldás, mindig a körülményektől, a felhasználási módtól függ. Mindig kell kompromisszumokat kötni, de ha már ezt teszem, igyekszem úgy, hogy a lehető legegyszerűbb maradjon a végeredmény. Csak ezt tudom tanácsolni neked is. -
plaschil
aktív tag
FirePath-al nézem meg. Vagy nem erre vagy kíváncsi?
-
floatr
veterán
válasz
Aethelstone #6876 üzenetére
Én első körben egy springet húznék alá, és a garázs management-et egy megfelelő perzisztenciával támogatott szolgáltatás végezné, a garázst elhagyó járműveket a fizetési felszólítás státuszba rakná, vagy archiválná
-
plaschil
aktív tag
Sziasztok!
Selenium-os kérdésem volna. Találkozott-e már valaki olyan problémával, hogy az abszolút xPath nem működik?
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"html/body/div[1]/div[2]/div[1]/div/div[1]/div/div/div/div[2]/div/div/div[1]/table[4]/tr/td/div/div/button[2]"}
Command duration or timeout: 20.05 secondsKipróbáltam prohardveren, facebookon, google-n, ha a relatív xPath-t kicserélem abszolút xPath-ra, gond nélkül megy. De a tesztelni kívánt oldalnál a fenti hibát dobja.
Thread.sleep-et tettem bele, wait-et is, de semmi.Sajnos csak az abszolút xPath jöhet szóba, mert a felületen lehetnek azonos nevű elemek, pl. gombok, azonos css-el, azonos class-al, és bizonyos részben random ID-val. Pl. név+random szám. Semmi más nem különböztet meg 2 vagy több elemet, csak az abszolút xPath.
-
Csak a megfelelo fogalmazas kedveert: Java-ban semmifele 'peldanyt' vagy 'objektumot' nem lehet 'kinullozni'. Egy referenciat lehet atallitani null-ra.
-
Aethelstone
addikt
Lehet, hogy nem vagyok ideológiailag elég képzett, de ha Java-ban egy példánynak adunk egy remek null értéket, akkor az egy dolog, hogy azonnal nem lesz legyalulva, majd a GC elintézi vmikor, de onnantól fogva az a példány már nem használható szerte szana az alkalmazásban...innentől nem értem ezt a felhajtást...vagy rosszul olvastam el a hozzászólásokat?
-
cacattila
csendes tag
válasz
geckowize #6869 üzenetére
Ez esetben egy rendkívül ronda trükkel bár elérheted amit akarsz,viszont ez nem megbízható, ugyanis a GC-re hagyatkozol, arra meg nem nagyon vagy befolyással, és őszintén kétlem, hogy a feladatban ilyet kérnének, tekintve a körítést. Lényeg a lényeg, ha felülírod a finalize() metódust, akkor amikor a GC megszünteti az objektumot, akkor ez a fv 1x meghívódik. Ismétlem, nem tartom valószínűnek hogy ez a feladat célja,ugyanis erre nem lehet építkezni, mivel ilyenkor a számláló csökkentésének időzítése nem determinisztikus a program szempontjából. Gyanítom egy destruktorral rendelkező programnyelvhez való példát próbál a tanár Java-ra erőltetni, ez így kicsit veszélyes dolog.
-
M_AND_Ms
veterán
válasz
WonderCSabo #6873 üzenetére
Már csak azért is, mert az a = null csak a referenciát nullozza, attól még az a Car példány létezik és még más referencia is hivatkozhat rá. Tehát totális hiba a számláló csökkentése azért, mert az a-t nullozzák.
Csókoltatom a könyv íróját!
-
skoda12
aktív tag
válasz
WonderCSabo #6871 üzenetére
Nem írta a feladat, hogy automatikusan működjön. Legyen public a static számláló és akkor lehet kézzel csökkenteni nullozás után.
-
DNReNTi
őstag
válasz
WonderCSabo #6868 üzenetére
Csak tippelem:
car = null; //car nyilván egy Car objektum -
geckowize
őstag
válasz
WonderCSabo #6868 üzenetére
Ahogy én értelmeztem a Main-emben, szerintem úgy értendő.
Car a = new Car("AAA-111", da);
a = null; -
geckowize
őstag
Sziasztok
Elég beginner levelen vagyok Java-ból és gyakorlok egy könyv segítségével (Gál Tibor: Java programozás, Műegyetemi kiadó, 2002) és elakadtam egy feladatnál, amelyet hosszas guglizás követett, de mégsem jutok semmire.
A feladat a következő:
Konstruáljon meg egy osztályt egy parkolóban lévő autók nyilvántartására! Az
osztály tartalmazzon két példányváltozót a rendszám és a belépési idő, tovább
egy statikus változót a parkolóban jelen lévő autók számának tárolására. Az
utóbbit mindig növeljük eggyel, ha egy autó belépésekor létrehozunk egy új
autó objektumot, illetve csökkentsük eggyel, ha megszüntetünk egy autó
objektumot a null hozzárendeléssel.Ebből az utolsó rész nem megy, azaz, nem tudom a csökkentést hol végezzem. Mainben persze meg tudnám írni (simán meghívok egy függvényt a nullá tétel után), de nyilván nem ez a cél, a Car osztályban kellene valahogy megvalósítani, azonban mivel ez nem C++ és nincs destruktor, a finalize()-nak meg nem garantált a lefutása, nem tudom hogyan kellene figyelni, hogy egy-egy példányt null-á teszek.
Eddig a kód a következőképpen néz ki:
Car.java:
import java.util.Date;
public class Car {
private String licensePlate;
private Date arrival;
private static int numOfCars;
public Car(String lp, Date arr) {
this.licensePlate = lp;
this.arrival = arr;
numOfCars++;
}
public static int getNumOfCars() {
return numOfCars;
}
}Main.java:
import java.util.Date;
public class Main {
public static void main(String[] args) {
Date da = new Date();
Car a = new Car("AAA-111", da);
Date db = new Date();
Car b = new Car("BBB-222", db);
System.out.println(Car.getNumOfCars());
a = null;
b = null;
System.out.println(Car.getNumOfCars());
}
} -
DNReNTi
őstag
Hola,
Szeretném inicializálni az alábbit:
JetBrains IDEA + Maven + PrimeFaces + jBoss.Már hajam kitépem, mert egyszerűen képtelen vagyok egy ilyen project-et legalább a "hello world"-ig eljuttatni. Az eddig legjobb eredmény, hogy Maven kivételével ment minden, de akkor meg a PrimeFaces p: tag-ekkel nem tudott mit kezdeni a deploy, mivel Maven ekkor nem volt, a függőségeket nem tudtam behúzni. Szétolvastam már az internetet, találtam is példát, olyat is ami letölthető forrást ad, de azzal sem vagyok előrébb, az output üres, pedig változtatás nélkül letoltam. Próbáltam Tomcat-et is, azzal totális kapufa voltam.
Kicsit vakon vagyok még a Java világában, bocsi ha szakmailag nem helyes a fogalmazásom. Tehát magyarul: hogyan kezdjek egy java projektet, amiben PF-et szeretnék használni, és legalább odáig el tudok jutni, hogy kiírjak egy betűt?
Köszi!
-
jetarko
csendes tag
Na megcsináltam.
Fejlesztés közben a tokeneket tárolom 1db properties fájlban, lehet 10 nyelv, akkor is csak egyben tárolom.
Írtam egy fv-t, ami a property fájl alapján a tokeneket felveszi db-be, ha van értéke a fájlban, akkor az értéket beszúrja, ha nincs akkor az értékhez a token kerül be maga.
A másik fv az adott nyelvhez tartozó property fájlt módosítja a db tartalma alapján. Ha ezt meghívom, akkor vagy 1db token értékét cseréli az adott nyelv property fájlban, vagy a db-ben tárolt összes értéket kiírja a fájlba.
A db-be kerüljenek tokeneket csak akkor kell lefuttatni ha új token kerül a property-be, ekkor az új token bekerül db-be. Innentől csak a 2. fv dolgozik.
Erre írtam egy felületet, ami onblur műveletre ajaxosan frissíti az adott property fájlban és db-ben szereplő értéket is.
A cacheSeconds 1-re van állítva. Jelenleg 100 tokennel nagyon gyorsan változtatva a frontenden az értékeket remekül működik, a context újratöltéstől semmi memória nem növekszik.
Ugye ez által futás közben bármikor beletudok nyúlni a token értékekbe, de a rendszer mégis a property fájlok alapján dolgozik, amihez gondolom valami gyors fa van építve, nem kell szarakodnom folyamatos db basztatás, cachelés dolgokkal.
Azt még nem találtam ki, hogy ezzel a megoldással futás közben új nyelvet, hogy tudok hozzácsapni, de majd még agyalok rajta.
A hibája ennek amit jelenleg látok, hogy a property fájl frissítéskor a fájl egésze újraírodik, ez ha nagyon sok token van lehet sokáig tartana. Ezt letesztelem hamarosan mennyi idő lehet 1milla tokent fájlba írni. A másik pedig az lehet, ha sok ember nagyon gyorsan sok tokent módosít egyszerre, de hát ezt nem tudom egymagam leszimulálni
A db réteg fölöslegesnek tűnik és majdnem, hogy az is, de ha cserélem a war-t a tomcatemben és közben egyik token értékét átírtam, akkor a régi propertiekkel felül csapom a jelenlegit és elveszett a módosítás, ha nem szedem le előtte a property fájlt.
Vélemény? -
floatr
veterán
válasz
jetarko #6859 üzenetére
Sajnos a szabadidőm érdeklődés hiányában egy ideje elmaradt, így nem tudok írni. Ha most sikerülne megoldani, hogy háromfelé osztódjak, akkor sem lenne elég, és ráadásul össze is vesznék magammal úgy, hogy egy ideig nem beszélnénk egymással
(#6858) Aethelstone naja, volt hogy dBase-ben ment az "ügyviteli" alkalmazás. Abban az időben a réteg a nikotin volt a billentyűzeten, amit kézhez kaptam.
-
jetarko
csendes tag
floatr: Az oldaladon nem lesznek már újabb mesék?
Szívesen olvasnám, jó a stílus és a témák is érdekesek
-
floatr
veterán
válasz
Aethelstone #6856 üzenetére
Szerintem az a gányolás, amikor összevissza kell konvertálgatni, hogy kiküszöböljük az egyik rétegben a másik rétegből adódó problémákat
-
floatr
veterán
válasz
Aethelstone #6854 üzenetére
Lehet h nem jött le, de szabályozott init-re gondoltam, nem AS módszer szerint.
Annyi felesleges kört futottunk már ezekkel a dolgokkal, és mindig csak magunkat szívattuk meg azzal, hogy még ezt is optimalizálni akartuk. Ha annyira teljesítménykritikus az alkalmazás, hogy nem bír kivárni egy connection-nel annyit, hogy a jsp legyártja az output-ot -- ugye lefordított classról beszélünk itt is, akár egy controller/service esetében -- akkor ott már nem ezen fog múlni a dolog, hanem már magán a perzisztencián és az adatbázison. A jsp nagyságrendileg hamarabb végez, mint amennyi ideig tart az adat előállítása.Ha most egymás után lerajzolgatod egy grafikonra, hogy mi mennyi ideig tartott: pl. entity lekérdezés, 2-3 külön init, beanmap/reflection alapú konverziók kontra entity, 1-2 init, rakat println meg még 1-2 init, akkor az esetek nagy részében azt fogod látni, hogy a grafikonon a 100%-ból elég kis szeletet harap ki a JSP, akárcsak a konverziók. Ismerek olyanokat, akik képesek nagyon lassú JSP-ket gyártani, de ez szerencsére a ritkábbik eset. Még a velocity/freemarker feldolgozás is lényegesen gyorsabb, mint az IP alapú adatműveletek.
-
DNReNTi
őstag
Hola,
Állásinterjúm lesz frontend pozícióra, egy cégnél ahol java-t használnak. A frontend része miatt nem is aggódok, de a java miatt igen. (Belső info: lesz szó java-ról az interjún). Na most van egy bő heten a randevúig, kérdés: hogyan rázzam gatyába magam java-ból addig? Ajánlott olvasmány, doksik, szoftverek, bármi?
Thx. -
Mukorka
addikt
válasz
Aethelstone #6849 üzenetére
Pont erre gondoltam pedig. Tehát azt hogy mi kell épp és mi nem csak különböző beanekkel tudod megoldani vagy már eleve úgy kérdezed le az entitást vagy mindig lekérdezel minden lazy tagot.
-
Aethelstone
addikt
válasz
Mukorka #6848 üzenetére
Rosszul érted.
public class FooEntity {
private Set<String> names;
private Set<Integer> values;
}
public class FooBean {
private Set<String> names;
private Set<Integer> values;
private List<Bar> bars;
}Nos, ebben az esetben a FooEntity-ből FooBean lesz, de csak azok a property-k kapnak értékek a Bean-ben, ahol az Entity-ben is van. Nyilván a FooBean bars tagja nem kap semmilyen értéke by default, mivel nincs megfelelő Entity tag. Semmi köze a DAO osztályokhoz.
-
Mukorka
addikt
válasz
Aethelstone #6841 üzenetére
Hát nálunk a DAO és a business réteg egyben van. Minden logika ejb-ben van de konkrét crud műveletek nincsenek kiszervezve dao rétegbe hanem benne vannak a releváns ejb-ben.
A te példád szerint tehát ha van egy entitásom 5 lazy collection-el és 3 féle logika alapján dőlhet el hogy épp mit fetchelek fel akkor a service rétegedben 3 tök különböző (nyílván egymás leszármazottjai) dto osztályod lesz hogy a reflectionös cucc működjön? Ez elég gázul hangzik
(#6847):
Riporthoz írsz viewt amit felmappelsz és kész. nyílván ez globlális riportokhoz jó, ha sok az adat és bemenő paraméterrel kell dolgozni akkor valóban kell rendes sql-t írni.
-
moriak
tag
válasz
jetarko #6842 üzenetére
Csak addig fogod használni az ORM-et amíg nem feltétlenül 'móricka' alkalmazásokat írsz. Reportokhoz igen is szükség van SQL-re. (már ha relációsban gondolkozunk) Nem kell félni tőle, meg kell tanulni szépen használni és könnyebb lesz a Hibernate használata is. Hibernate mellett van még a jOOQ is. Kicsit másabb a működés, de nem feltétlenül rosszabb.
Sebességet pedig 'alacsonyabb' szinten kezd el nézni. Tessék szépen a [Hikari]-t alkalmazni!!!
Amúgy kérdésedre viszont pofon egyszerű a válasz: perzisztens réteg ahogy a kolléga belinkelte. -
Szmeby
tag
válasz
jetarko #6843 üzenetére
"A másik mód az lenne, hogy db-ben tárolok minden token és értéket..."
Ismerek olyan rendszert, ahol adatbázisban tárolják az üziket. Megvan az előnye és a hátránya, ahogy a property fájlnak is. Megjegyzem, ott nem a Properties osztályt használják erre, hanem van rá egy egyedi megoldás.Én a magam részéről a property fájlt favorizálom, mert nem látom azt az üzleti esetet, hogy ezeknek az üzeneteknek futásidőben változniuk kéne. Van egy programod, támogat 30 különböző nyelvet. Az jó esetben 30 property fájl, csókolom.
Ha adatbázisban lenne, akkor tuti készítenél hozzá valamit, amivel menet közben szerkeszteni is lehet. Az 30 db textarea. Ilyenkor történik az, hogy "ó, csak a magyar/angol nyelvűt írom át, a többi nem érdekes". És elszabadul a pokol.
Vagy pl. hogyan tervezed kiírni a "Nincs adatbázis kapcsolat" hibaüzit, ha azt adatbázisban tárolod?
Jó, persze a kivételeket bele lehet tolni a kódba, vagy property-be...Természetesen lehet olyan szöveg, ami gyakran változik, annak valóban nem property fájlban a helye, de a labelek, hibaüzik, stb. szerintem nem ilyenek.
-
werszomjas
addikt
Sziasztok.
Remélem jó helyen járok.
Az alábbi oldalon nektek megy a java?
Hiába telepítem a java alkalmazást, nem akar menni. Se chrome, se mozilla, se explorer.
Ezt írja:
Nem megfelelő futtatókörnyezet
Ha ezt az oldalt látja, az azt jelenti, böngészője nem, vagy csak részben alkalmas az e-Jelentés rendszer futtatására.A probléma oka: nincs engedélyezve a JAVA alkalmazások futtatása
A hiba elhárításához kérjük vegye fel a kapcsolatot számítógépe rendszergazdájával, és kérje meg, engedélyezze az e-Jelentés weblapjáról származó JAVA alkalmazások futtatását.
-
jetarko
csendes tag
Spring mvc még mindig
A stringeket az oldalakról kihelyeztem properties fájlokba(messages_hu,en stb), ez egyrészt elég borzalmas a karakterkódolás miatt, de perpill se xml, se db-be nem bírtam áthelyezni, ezért túlteszem magam rajta.Ezt már nem rég kérdeztem, hogy lehetne módosítani futás időben ezeket a tokeneket és most foglalkoztam vele. Úgy oldottam meg, hogy a spring.xml-ben a ReloadableResourceBundleMessageSource bean-ben a cacheSeconds-t beállítottam egy számra. A kódban pedig a Properties osztály segítségével manipuláltam az értékeket. Ez működik is, megváltozik az érték, de azt nem bírtam megcsinálni, hogy direktbe a fájlt is felülírja amiből olvas, de az értéket mégis megváltoztatja az oldalon.
Ezzel az a baj, ha újraindítom appot, akkor maradnak a fájlban lévő értékek. Erre azt tudom csinálni, hogy kiíratom minden módosításkor(mondjuk félóránként, hogy ne minden egyes átíratásnál) egy fájlba az értékeket és azt bemásolom a properties fájlba, amikor indítom. Ezzel egyrészt meglennének a változtatások is, aminek nem tudom van-e értelme.A másik mód az lenne, hogy db-ben tárolok minden token és értéket, majd változáskor ez alapján töltöm fel a properties fájlokat, de ezt nem bírtam megcsinálni, semmi értelmes példát nem találtam erre még.
Azt olvastam, hogy ezeket a properties fájlokat egy futó alkalmazásnál újratölteni nagyon nem ajánlott.
Ez igaz erre az esetre is? Vagy ez a context újratöltögetés teljesítmény igényes tud lenni? -
jetarko
csendes tag
Azt szoktam olvasni, hogy aki nem tud rendesen SQL-t írni, annak jó lesz az ORM, mert úgyis lassú utasításokat írna. Aki meg az ORM-t használja gány módon, akkor az is borzasztó lassú tud lenni.
Alapvetően az sql, pl/sql sose ragadott magával, de az orm tetszik, ezért inkább ezt tanulmányozom jobban
Én itthon nyilván 50soros 4-5táblás dolgokkal szórakozok, ezért az eager-t se érzem, de azt látom, hogy csak azt használni rossz koncepció lenne komolyabb dolognál.
Ha egy alkalmazásnak 1-2részét annyira optimalizálni kell, hogy az ORM nem elég, akkor a dao-ban írnak csak sql-t vagy akkor az hol helyezkedne el és hogyan?Ennek a JTA, DTO dolgoknak utána nézek, ezek teljesen ismeretlen fogalmak számomra.
-
Aethelstone
addikt
válasz
Aethelstone #6840 üzenetére
Egyébként a Serialization policy is jó, de mi inkább azt az utat választottuk, hogy bean transzformálási szabályokkal korlátozunk. Egy kvázi automata eszközt használunk, ami reflectionnal megy végig és az azonos nevű tagokat transzformálja. Ami pedig nincs benne a Bean-ben vagy máshogy hívják, azt nem transzformálódik.
-
floatr
veterán
válasz
Aethelstone #6836 üzenetére
Magyarán DTO-t használsz két réteg közt a backenden. Nálam a review-n nem menne át
Mostanában legtöbbször SOA alapú rendszereket fejlesztünk, ahol web service-szerű cuccokig utazik az entitás. Ott a serialization-nel le van szabályozva, hogy mi mehet tovább. Szerintem bűn másodlagos, harmadlagos adatábrázolást ráhúzni egy működő struktúrára, ha van eszközöd normális módon kezelni a meglévőt, ráadásul épp ezzel csapod agyon az ORM-et, hogy a service-ig nem jut el a lényeg.
A teljesítményproblémákra azt tudom mondani, hogy persze hogy gyorsabb a háttérben egy SQL végrehajtása, mint többé (eager kontra lazy init), de csak mondom, hogy a hibernate/jpa önmagában egy nagy teljesítményprobléma.
A prezentációs réteggel kapcsolatban viszont nem értem mire gondolsz. Ha a kliens oldalra, akkor nyilván, de JSP-ben simán elfér egy implicit lazy init, amikor oda jut a sor.
-
Aethelstone
addikt
-
Mukorka
addikt
válasz
Aethelstone #6836 üzenetére
Nem tetszem érteni amire gondolsz.
-
Mukorka
addikt
válasz
Aethelstone #6833 üzenetére
De ha már nincs session akkor hiába hivatkozik rá.
Nálunk egyébként lazy minden és ahol olyan eset van ahol kell valami ott van rá külön fv ami azt is betölti amit kell. -
Aethelstone
addikt
válasz
jetarko #6831 üzenetére
Nem teljesen értem, de a lazy-nek nem pont az lenne az értelme, hogy csak azt tölti be, amire szükség van éppen? Ha nem hivatkozol arra a Collectionra, akkor nem töltődik be, ha meg igen, akkor behúzza. Persze, nyilván nem szabad detacholni, de ez már egy másik kérdés.
-
floatr
veterán
válasz
jetarko #6831 üzenetére
OpenSessionInViewFilter?
Már látom a tiltakozó kezeket, mert vannak rá elméletek, hogy ez miért nem tudományos, de nálunk majdnem mindegyik projektben ez van, vagy az EntityManager-es párja.
Sokat próbálkoztunk olyan paraméterekkel, ahol megadod, hogy melyik collection-t kéne szintén betölteni a dao-ban, de aztán mindig belefutottunk olyan esetekbe, ahol nem lehetett előre tudni, hogy melyikre lesz szükség, és melyikre nem, aztán betöltöttük mindegyiket - elég tudományos ez is.
-
jetarko
csendes tag
Eddig mindig elvoltam eager fetch-el, de most már rendesen akarom írni ezeket, ezért ahol kell áttérek lazy-re. Az jó elképzelés, hogy annyi dao fv-t írok, amennyi esetem van?
Pl entitásban van 10 onetomany lista és az egyikben csak egyiket töltöm meg (Hibernate.initialize), a másikban 2-t és így tovább, ahogy a logika kívánja. Vagy van ennél optimálisabb megközelítés is? Hibernate+Spring -
Dyingsoul
veterán
Sziasztok!
Tudtok valami forrást ahol vannak java gyakorlati feladatok esetleg tutorialokkal/megoldásokkal együtt? Az utóbbi fél évben nem volt java-s tárgyam de most fel szeretném frissíteni a dolgokat. Keresgéltem neten de nem találtam olyan feladatgyűjteményt vagy tutorial sorozatot ami alapoktól indul (mondjuk annak nagy részét csak átgörgetném) és esetleg megoldás vagy segítség is van mellette.Amire konkrétan gondolok:
-Feladat leírása
-Esetleg részletkód a feladat elejéből de ez nem fontos
-Több feladat ami végigmegy a java alap vagy közép szintjéig (öröklődés, interfészek, kivételkezelés, absztrakt osztályok, jó kis listás feladatok rendezésekkel, stb).
-Olyan szintű megoldás vagy magyarázat amivel biztosan meg tudom oldani az adott feladatot akkor is ha előtte nem tudtam mit kellene csinálnom.Az angollal nincs probléma tehát jöhetnek nyugodtan olyan linkek is.
Lehet, hogy az ilyen típusú tutorial csak a fejemben létezik, de gondoltam egy kérdést megér itt a topikban.
Addig is marad nekem a Thinking in Java jobb híján (bár sokak szerint nem is kell jobb de én a gyakorlati dolgokat szeretném fejleszteni most).
LMGFY linkeket nem kérek köszönöm. -
_Sevi_
tag
Sziasztok!
Akadt egy kis problémám a jar filével. Van egy olyan programom ami fájlt kezel (ír/olvas) [a program javafx segítségével készült, eclipsben]. A programban van egy olyan rész ahol combobox segítségével lehet a fájlban írni (kiválasztasz valamit a combobox-al és azt be írja a fájlba). Ez mind szépen működik egészen addig amíg nem készítek jar fájlt a projektből. Amikor ugyanezt a műveletet akarom végrehajtani jar fájl futtatása utána akkor mindenféle szeméttel rakja teli a fájlt. Minden egyes fájl nyitás olvasás/írásnál UTF-8 segítségével történik.
Writer writer = new OutputStreamWriter(new FileOutputStream("C:\Valami\Valami2\file.txt"), "UTF-8");
BufferedWriter bf = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileDir), "UTF8"));illetve ha string-et írok fájlba azt is lekezeli
String data = "valami";
Charset.forName("UTF-8").encode(data);
A combobox-nál így történik az értékadás:@FXML
private ComboBox<String> Comb1;
..
..
Comb1.getItems().addAll("Igen","Nem");
..
Szerintem valahol itt lesz a hiba.
A válaszokat előre is köszönöm.Üdv;
Sevi -
"process ütemezés, memória management, I/O is jól odaver a Windowsnak. Tisztességesen scriptelhető, parancssorból is jól használható"
OMG, semmi baj nincs azzal, ha van preferenciad, etc., de attol, hogy nem ismersz egy adott rendszert, az teged minosit, es nem a rendszert.
Mindket rendszer tokeletesen scriptelheto, parancssorbol hasznalhato, az I/O meg memoriamenedzsment dolgokat inkabb hagyjuk is.
Azert tanulja meg a Linuxot, mert nagyon elterjedt szerveroldalon, van, amire kenyelmesebb hasznalni, es tagitja a latokort, ne pumpaljuk mar a hulyeseget a fejebe az elejen, hogy 'az jobb, es kesz'.
-
bucsupeti
senior tag
válasz
jetarko #6819 üzenetére
vágj bele, nem fogod megbánni, csak adj egy kis kifutást a dolognak, mielőtt megállapításokat teszel. A lányom 16 éves. 13 éves korában a netbookjára feltettem egy ubuntut. azóta nem hajlandó megválni tőle és teljes megelêgedéssel használja a mindennapi dolgaira (tanulás, kapcsolattartás, prezentációkészítés, dokumentumszerkesztês stb)
Ja és olyan problémákat hogy belassul, vírusos stb... elfelejthetsz...
-
Pimpő
tag
válasz
jetarko #6819 üzenetére
A Linuxban jóval több lehetőség van mint a Windowsokban. Az alap dolgokban, mint process ütemezés, memória management, I/O is jól odaver a Windowsnak. Tisztességesen scriptelhető, parancssorból is jól használható. A szoftverek installálása, törlése, kultúráltan, csomagkezelővel történik.
Csak akkor vágj bele, ha van türelmed hozzá. A kezdeti lépések nehezek lehetnek, mert a Windows-os gányolás linuxon általában nem működik. Más szemlélet kell hozzá. Sokat kell kezdetekben guglizni, kérdezni, kisérletezni.
Nekem a kedvenc disztróm a Fedora, szerintem annak a legjobb a csomagkezelője (rpm, yum). Az Ubuntu viszont jobban támogatot (két gépemen is az van), több mindenen elfut.
Linuxnál még az is szívás lehet, hogy gyakran újjítanak, cserélgetnek komponenseket, technológiákat, amikkel ugyanazokat a dolgokat lehet megcsinálni, csak másképp. Ez további tanulást és utánnajárást igényel és sokszor akkor amikor az embernek marhára nincs kedve és ideje foglalkozni vele.
Linuxon nagyobb a szabadság. Pl. az ablakezelőt is megválaszthatod. A fő disztrók alapból vmi trendi ablakkezelővel érkeznek (Unity, gnome-3). Azonban ezeknek más a filozófiájuk, mint a megszokott Windows-os GUI-nak, és nem is annyira produktívak (hiába hazudják azt róluk). Ezért érdemes lehet vmi hagyományos ablakkezelővel installálni a rendszert, mint pl. XFace, gnome-mate. A könnyítés kedvéért vannak olyan install médiumok, amik default-ból ezekkel teszik fel a rendszet, pl: Fedora XFCE spin, xUbuntu.
-
jetarko
csendes tag
Egy ideje már nagyon úgy érzem váltani kéne linuxra. Eddig nem tetszett és nem is igazán ismerem a linuxot, de pl a directory átnevezés windowson nem ment, linuxon azonnal. Az éles rendszerek elvileg linuxon futnak, ezért gondolom értelmes lenne fejleszteni is azon, amin fut majd. Tudom h run anywhere , de mégis itt van a példa, hogy nem igaz ez teljes mértékben.
Ha nem csak java-zom, akkor főleg egyre jobban érzem, hogy ez a windows szenvedős tud lenni.
Írtátok korábban, hogy azon érdemes fejleszteni, ami jobban fekszik embernek, de a kérdés, hogy megérné-e szenvedni heteket h váltsak? -
WonderCSabo
félisten
válasz
Sk8erPeter #6815 üzenetére
Emlékeztem rá, csak lusta voltam kikeresni, köszi.
-
floatr
veterán
Esetleg ha már egyébként valami rendszerbe akarod illeszteni, könnyen lehet h ott van a StringUtils a felhasználható elemek közt
-
M_AND_Ms
veterán
Nem elegáns, de velős
public static void main(String[] args) {
Integer parseInt = null;
try {
parseInt = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
System.out.println("Hiba! Nem szám");
return;
}
System.out.println("Ok! Ez szám: " + parseInt);
}Szerk: ahogy Aethelstone is javasolta
-
Sk8erPeter
nagyúr
"Igen az utóbbira gondoltam én is, csak a megvalósításában még nem vagyok annyira perfekt"
Nem nagy művészet:
http://prohardver.hu/tema/java_topic/hsz_6769-6769.html -
_kovi_
aktív tag
válasz
Aethelstone #6813 üzenetére
Köszi!
Igen az utóbbira gondoltam én is, csak a megvalósításában még nem vagyok annyira perfekt. -
-
_kovi_
aktív tag
válasz
WonderCSabo #6811 üzenetére
Köszi !
De az args[] az String, ergó nem eszi meg a char-t.. -
WonderCSabo
félisten
-
_kovi_
aktív tag
Sziasztok!
Hogy lehetne legegyszerűbben ellenőrizni egy parancssori paramétert, hogy a felhasználó biztosan számot ütött -e be. Reguláris kifejezések nélkül.
Mint pl. C-ben az isdigit(). -
glutamin
őstag
válasz
WonderCSabo #6808 üzenetére
Kipróbáltam. Tényleg nem szereti az első sort. De utána már mehet. Valamint a HTML kommentformátum is jó volt. Felkiáltójelet kihagytam az előbb. Most már nyugodtan alszom
Köszi a segítséget
-
glutamin
őstag
válasz
WonderCSabo #6806 üzenetére
Most kipróbálgattam. 1.7-tel, 1.6-tal is jó. Komment volt a ludas. XML-en belül mi a kommentezés jele? (//, /*, <-- nem jó)
-
WonderCSabo
félisten
válasz
glutamin #6805 üzenetére
Nem valszeg volt ott a hiba, hanem biztos ott volt a hiba, hiszen az error trace pontosan le is írta. Még azt is, hogy az első sorban a prolog előtt van valami felesleges adat.
Java 1.6-ra vissza váltás mondjuk szerintem annyira nem jó ötlet, minek? Ez oldotta meg a problémát? -
glutamin
őstag
Na sikerült. Még mindig vannak hibaüzenetek, de a tutorial szerint ez most nem érdekes. Valszeg a hibernate.cfg.xml fájlban volt hiba. Kommentezést kiszedtem. Projektben a JAVA környezetet átkapcsoltam 1.7-ről 1.6-ra. Utána már csatlakozott. Akkor még egy adatbázisjelszó javítás volt és most itt tartok:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Hibernate: insert into UserDetails (userName, userId) values (?, ?)Hétvégén nekifekszem és végigzongorázom az alap SQL műveleteket, aztán lassan megnézem mi az a Maven
-
Szmeby
tag
válasz
glutamin #6802 üzenetére
Pont ellenkezőleg, ott akad el először. Az a root cause.
Mikor hiba történik az pl. kivételt (exception) generál, ez megszakítja az adott blokk végrehajtását, a kivétel elkezd visszafelé vándorolni a stack-en. Teszi ezt addig a pontig, amíg azt egy catch ág el nem kapja. Normális esetben a catch blokk csinál is valamit, vagy feloldja a hibát és minden megy tovább onnantól a maga medrében, vagy pl. tovább dobja azt akár egy másik kivételbe csomagolva. Az ilyen elkapom-továbbdobom megoldások eredményezik a "caused by" blokkokat a stacktrace-en. Mire a felhasználó/fejlesztő találkozik a hibával, a kiváltó oka sokszor el is tűnik a felszínen. Ezért érdemes először alul keresni az igazi okot.
Itt ragadnám meg az alkalmat, hogy megjegyezzem, ne csináljatok üres catch blokkokat, mert ott elveszik a hiba, és később nehéz lesz megtalálni. -
glutamin
őstag
Ez pl eszembe sem jutott hogy az utolsó hibaüzenettől kezdjem el nézni. Gondolom ott akad el végleg.
Még nagyon az elején vagyok ennek a HIBERNATE-es dolognak. Korábban PHP/ASP, MySQL/JET Database vonalon már foglalkoztam webes adatbázisos alkalmazással, de most ez nekem még elég kínai.
-
Szmeby
tag
válasz
glutamin #6799 üzenetére
Ha hiba van, az ajánlott megoldás:
Megkérdezni a guglit az utolsó caused by hibaüzenetről.
Első találat.
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Autós topik
- Autóápolás, karbantartás, fényezés
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Philips LCD és LED TV-k
- Napelem
- Kedvenc zene a mai napra
- Elektromos autók - motorok
- Nintendo Switch 2
- Kuponkunyeráló
- További aktív témák...
- AKCIÓ! GAMER PC: Új RYZEN 5 4500-5600X +RTX 3060/3070/3080 +Új 16-64GB DDR4! GAR/SZÁMLA! 50 FÉLE HÁZ
- UHH! HP EliteBook 840 G8 Fémházas Laptop 14" -45% i5-1145G7 4Mag 32/512 FHD IPS Intel Iris Xe Magyar
- Xiaomi Redmi Note 13 Pro 5G - 8/256 - Media Markt garancia
- Xiaomi Redmi 9at - 2/32 - szürke
- Xiaomi Mi8 - 6/128 - fekete
- Új monitor állvány - csak össze lett szerelve
- Game Pass Ultimate előfizetés azonnal, élettartam garanciával, problémamentesen! Immáron 8 éve!
- AKCIÓ! MSI B450 R5 5500 16GB DDR4 512GB SSD RTX 2060 Super 8GB GDDR6 Rampage Shiva Zalman 500W
- TELJES KÖRŰ IT BESZERZÉS
- Bomba ár! Dell Latitude E5570 - i5-6300U I 8GB I 256GB SSD I 15,6" FHD I HDMI I CAM I W10 I Gari!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest