- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
yossarian14
tag
Van egy Item class, és egy Price class. Az Item-hez tartozhat sok Price, amik pedig 1 itemhez vannak kötve, de a hibernate azért is generál hozzá egy kapcsolótáblát, pedig szükségtelen. Miért?
Ilyen a kapcsolat a két osztályban:
Item:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "item", orphanRemoval = true)
private Set<Price> prices;
Price:@ManyToOne(fetch = FetchType.LAZY)
private Item item;Próbáltam @JoinColumn-al is, akkor is ugyan az. Egy netes példában is pont így csinálta, és mind2 megelőzte a kapcsolótáblázást, de nekem nem.
Nem lehet, hogy véletlen egy korábbi próbálkozás eredménye ragadt bent a DB-ben?
Ha nem, akkor szerintem ennél több infó kell, hogy meglehessen válaszolni, bár én nem vagyok egy nagy Hibernate-expert.
-
floatr
veterán
Tudsz saját scope-ot is definiálni
-
Lortech
addikt
Na igen, ez a kérdés. Mert spring security nélkül, egy sima szűz springboot alkalmazásban, a restcontroller getmapping metódusainak httpsession id-je minden kérésnél különbözik, a session.setAttribute-ban állított dolog pedig mindegyik globális, mindegy milyen böngészőről/kliensről van a beállító kérés, mindegyiknek ugyan az lesz a getattribute valami értéke amit az egyik legutoljára settelt...
Most tényleg valami principal azonosítót kérjek le, és azokat kulcsként használva töltögessek egy adattároló map-et, ahonnan a kulcs alapján lekérdezhető az adott userhez tartozó adat?
Azt hittem hogy erre van valami belső megoldás mert azért nem hiszem hogy annyira réteg igény lenne.Egy spring alkalmazásban (is) a session életciklusa beállítás kérdése. Amit írsz, azt szerintem benézed, vagy spéci beállításod van (tehát nem szűz spring boot app ), nem ez a default működés.
Egy request feldolgozás viszonyában a session (id) alapvetően attól függ, hogy a böngésződ küldött-e a requestben session id-t (JSESSIONID cookie (default)) , és hogy mi a spring appod sessionCreationPolicy-je, ezektől függően fogja a Spring (újra)használni a kapott sessionid alapján a meglévő sessiont (az objektumot, nem az id-t) vagy újat gyártani vagy nem gyártani vagy teljesen ignorálni a sessiont (springen kívül továbbra is létrehozható session).a session.setAttribute-ban állított dolog pedig mindegyik globális, mindegy milyen böngészőről/kliensről van a beállító kérés, mindegyiknek ugyan az lesz a getattribute valami értéke amit az egyik legutoljára settelt
Ez nem így működik, pont az a session lényege, hogy egy session példányhoz és állapothoz (így a session attribútumaihoz) csak azok a kliensek férnek hozzá, amelyek azonos session id-val rendelkeznek.
Szerinted téged a spring session fixation védelme zavarhat meg, emiatt látsz különböző session id-kat és emiatt tűnik úgy, hogy a sessionök különbözőek (valójában ugyanazok a sessionök különböző session id-val), mégis ugyanazok az attribútumai. -
mobal
nagyúr
Mi a legegyszerűbb módja springbootos, jwt springsecuritys, frontenddel rest-en kommunikáló alkalmazásnál az adott sessionhoz, vagy userhez kötött, több requesten átívelő ideiglenes adattárolásra?
Igazából annyit kellene tárolni hogy adott user sessionben hány requestje volt az alkalmazás felé, floodot megelőzni.
Ha rest az API akkor szerintem stateless kell megoldanod úgy hogy újra tudd alkotni az adatokat.
Bucket4j-t nézted?
-
Lortech
addikt
Mi a legegyszerűbb módja springbootos, jwt springsecuritys, frontenddel rest-en kommunikáló alkalmazásnál az adott sessionhoz, vagy userhez kötött, több requesten átívelő ideiglenes adattárolásra?
Igazából annyit kellene tárolni hogy adott user sessionben hány requestje volt az alkalmazás felé, floodot megelőzni.
Magától értetődően legegyszerűbb maga a session (HttpSession), ha tényleg van... Ugye ez nem egyértelmű RESTful API-nál és JWT authentikációnál, aminek statelessnek kéne lennie.
Komolyabb alkalmazásnál floodot még az alkalmazás előtt célszerű megfogni, api gatewayen, proxyn, load balanceren stb. -
don_peter
senior tag
Te benne vagy a témában? Indítottam neki témát, ha esetleg lenne további infód és tapasztalatod szívesen venném itt: Flutter téma címe
-
mobal
nagyúr
-
yossarian14
tag
A Java 9-ben megjelent modulokat nem kötelező használnod. Ettől eltekintve pedig a munka nagy része a különböző dependency-k frissítése új verzióra. Persze, projekttől függően lehetnek extrémebb dolgok, de semmi olyan, amit már nem oldott meg valaki.
-
disy68
aktív tag
-
mobal
nagyúr
Sziasztok!
Olyan ták feladatot kaptam, hogy a swaggeres apin kapott tömeges feladatcsomagot (hash generálás, de nem crypto
) valamilyen felhőszolgáltatáson futtassak meg, majd a kész csomagot vissza az apin. Erre a fejemben összeállt egy fő alkalmazás, ami lekéri a feladatokat az api-tól, bedobálja a queue-be ahonnan a számoló kis alkalmazás példányok kiveszik, megcsinálják, majd a kész queue-be dobálják, ahonnan a fő alkalmazás kiszedi, és küldi vissza az api-nak.
Jól gondoltam ezt el? Milyen free szolgáltatás lenne ehhez a legegyszerűbb, és milyen kiinduló ponttal? (soha nem csináltam még felhős programozást, van aki az AWS-t ajánlja, de eléggé kaotikus az is)Szinkron vagy aszinkron megoldás kell? Kapsz egy requestet egy végpontra, ahol meg is várja a hívó fél a kimenetet vagy vissza kell szólond majd ha megvan a válasz?
Ehhez nem feltétlenül kell aws, ott az ingyenes heroku is. De lokálban is megcsinálhatod docker segítségével.
-
bambano
titán
Hashmap, meg minden erre alapuló ugye gyorsan tud keresni, kb függetlenül a benne lévő elemek számától.
De még is hogy találja meg azt, hogy a keresett hash az hol van? A doksi szerint linkedhashmap az alapja, de hogy találja meg a megfelelő node-ot, ha linkelve van? Hogy nem kell valahonnan elkezdve a linkeken lépegetni addig amíg meg nem találja a keresett keyt?Ha végiglépked, akkor csak azért gyorsabb mint egy list contains pl, mert nem equals megy többnyire, hanem hash==hash?
nem ismerem, hogy a jáva ezt hogy csinálja, de a rendes eredeti hash tárolási struktúra egyáltalán nem keres hash értéket. ettől gyors.
és úgy tartják fenn az elemek növekedése ellenére a gyorsaságot, hogy módosítják a hash függvényt. -
togvau
senior tag
Ez se nyert: https://pastebin.com/X4ibhvWh
Beletákolva valami httpclient függőséget már elindul, de amikor kellene csinálnia, akkor:org.springframework.web.client.HttpClientErrorException: 400 Bad Requestat org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:85)at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:707)at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:660)at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:620)at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:414)Az eredeti hiba a szokásos: https://pastebin.com/2RmS1DHS
ja igen, végül is műxik, ezt a szerver dobja vissza.
-
Lortech
addikt
helllo, adott egy java 8 (adoptopenjdk) maven springboot projekt.
Innen egy webservicet használnék (ekáer), úgy tűnik resttemplate-el. A programozás része eddig egyszerű volt, de a rendszergazda rész megint szívat, mivel köszönhetően a tetves google-nek ez is SSL...
Jön is az imádottsun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Ezen szeretnék túljutni a lehető leggyorsabban, és legegyszerűbben. Nem érdekel az úgynevezett "biztonság". Hordozhatóvá szeretném csinálni, ilyen cacertes minden gépen ahol fut létrehozós, mindent servicet amit használ letöltős dolgokat el szeretném kerülni.
Azt szeretném, hogy az intellij fejlesztőkörnyezetből, meg war-ba csomagolva és akárhol indítva is ugyanúgy működjön, mindenféle gépenként rendszergazdás tákolás nélkül.
úgy szeretném mint böngészőből, be az url azt jóvan, működik, nem cert marháskodik.Hogy érhetem el ezt? Googlen nem működő, vagy nem ide vonatkozó, vagy hiányos leírásokat találtam csak.
Áh, mavenes a projekt, ott a bibi, használj gradle-t, az ezt is megoldja.
Nyilván pontos válaszhoz kéne egész pontos infó, hogy a TLS handshake melyik ponton döglik, pl. openssl s_client kimenet, de ágyúval verébre megoldás itt:
https://stackoverflow.com/a/45444355 -
sztanozs
veterán
hogy lehet megaszondani, hogy a fájlt (string-ben van megadva a path majd Paths.get() ) az alkalmazás mellől olvassa? Tehát aprojektem mellé rakott fájlt akkor is ha IDE-ből indítom run-al, meg akkor is ha jar-ba van exportálva, és java -jar-al indítom.
Mert ugye ha simán fájl.txt akkor ide-ből indítva a projekt mappában keresi, jar-ba exportálva a jar mellett keresi, de mindenképpen relatív path maradjon, és kíndózon, linuxon ugyan az legyen a végeredmény. -
Szmeby
tag
Én arra se emlékszem amit múlt héten olvastam, főleg ha nem találkozok rendszeresen az ott olvasott dologgal. Sajnos nem fér el a sok számot, kis-nagybetűt, és most már speciális karaktert is kötelezően tartalmazó jelszavak, meg az évszak divatjainak megfelelő frameworkok felesleges infoi mellé.
Annyira nem közismert, hiszen akkor a google-n rögtön kidobott volna rá ilyen megoldást, még is, erre a hibára csak a rossz importos válaszú dolgokat dobta fel.
Igényes munkát nem akarok végezni, hiszen egy igénytelen ürülékrakást kell úgy ahogy használhatóvá tákolni, hiszen újraírásra (amivel igényessé lehetne tenni) nincs pénz
Mi a nevetséges abban, hogy egy hiányosságot fikázok? Ez egy marhaság. Default mindkettőt néznie kéne. De legalább is specifikus errorban jelezni, hogy máshogy kéne.
Sajnálattal hallom. Az én emlékezetem is egy aranyhaléval vetekszik. Javaslok egy jelszókezelőt, nekem bevált.
Bizonyára megtehetné, hogy mindkettőt nézi, persze. Csak ez az extra kényelem a háttérben iszonyatos komplexitást generál. A fejlesztők hoztak egy döntést, hogy ez a kényelem nem tesz hozzá annyit, hogy emiatt a framework mondjuk lomha legyen.
Persze ha tudsz egy olyan megoldást, ami nem rontja a framework hatékonyságát, mégis kényelmes, javaslom, beszélgess a hibernate készítőkkel, talán vevők lesznek az ötletre. A hibaüzi mondjuk jól hangzik.
-
floatr
veterán
https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/chapters/domain/access.html
Azért használ eltérő módszert a két elérésre, mert field access esetében kell proxy/introspection/reflection. A hiányosság itt a framework és a technológia ismeretében van. -
Szmeby
tag
Én például onnan tudom, hogy valamikor régen olvastam a hibernate dokumentációjában. Szerintem elég közismert dolog... legalábbis a dokumentációba belelapozó emberek között. Én úgy vagyok vele, hogy ha igényes munkát akarok végezni, akkor érdemes megismerni a használt frameworkot kicsit közelebbről is. Így amikor fikázom, talán kisebb eséllyel teszem magamat nevetségessé.

szerk.: A jelenség a transient módosítótól teljesen független.
-
floatr
veterán
JPA: eddig én a saját cuccaimban, és a munkáknál is az entity osztályoban a field deklarációk fölé raktam az annotációkat, pl a a kapcsolatok, vagy a @Transient-et is.
Mostani projektben a getterek fölött van, úgyhogy igazodtam ehhez, egy kivétellel amikor egy @Transient fieldet csináltam. Aztán folyamatosan elszállt runtime, hogy nem találja azt a fieldet... javax persistence transient volt pedig, de a spring datással is ugyan ez.
Aztán "áh ez már kb az imádkozás szint" átraktam a getter fölé, és megy...Ez WTF?
A hibernate az @Id annotáció alapján választ stratégiát arra, hogyan kezelje a bean adatait. Ha field-en van, akkor reflection-t használ mindenre, ha getteren, akkor a metódusokat. Vegyesen csak akkor lehet használni, ha felülcsapod a default stratégiát egy
@Access(AccessType.FIELD)annotációval, amit a field-re akasztasz rá.Imádkozás helyett specifikáció, vagy tutorial. Ez a középkorban is sokszor bevált volna.
-
togvau
senior tag
Látom, elég csak a kimenetnél megszabni a korlátozást, és az a bemenetre is vonatkozik.
De újabb probléma: a newClass-nak vannak tételei is listában, minden invoice-nak saját fajta... azok is egy közös abstract osztályból származnak, de hogy tudok nem fixen létrehozni tétel osztályt?
kimeno.callTetelekLista().getClass().getGenericSuperclass(); talán így meg van a listaelemek osztálya (már ha akkor is működik ha a call null-t ad vissza, mert nincs list még hozzáadva)
(mert futás időben nincs generikus)De hogy ha van egy metódus, hogy getItemType és abba egyenként fixen meg van adva entitynként, hogy mi tartozik hozzá, akkor be tudom szerezni a classt. Viszont hogy hozom létre, hogy hozzáadhassam a listához? newInstance oké
-
Drizzt
nagyúr
E helyett: Class<T extends AbstractInvoiceEntity> newClass siman Class<T> newClass kell.
-
disy68
aktív tag
protected static KimenoSzamlaEntity getInvoiceEntity(AbstractInvoiceEntity originalEntity) {KimenoSzamlaEntity kimeno= new KimenoSzamlaEntity();BeanUtils.copyProperties(originalEntity,kimeno,"parentInvoice", "identifier");List<KimenoTetelekItemsEntity> items=new ArrayList<>();for (AbstractInvoiceItemsEntity item: originalEntity.callTetelekLista()) {KimenoTetelekItemsEntity itm= new KimenoTetelekItemsEntity();BeanUtils.copyProperties(item,itm, "parentInvoice", "identifier");itm.setParentInvoice(kimeno);items.add(itm);}kimeno.setTetelekLista(items);return kimeno;}Erre valami tipp, hogy lehetne generikusabbá tenni? Pl hogy a "kimeno" típusa mondjuk bemeneti paramétertől függjön (de ne kelljen végig instanceofolgatni az összes lehetséges bemeneti osztályt), és amúgy extends AbstractInvoiceEntity.
protected static <T extends AbstractInvoiceEntity> T getInvoiceEntity(AbstractInvoiceEntity originalEntity, Class<T extends AbstractInvoiceEntity> newClass) {T newInvoice = newClass.newInstance();(...)return newInvoice;}
valami ilyesmi vagy átadsz egy factory-t, ami létrehozza a kívánt objektumot -
togvau
senior tag
Mi baja lehet?
SELECT new asd.dto.SzallitoiMegrendelesDTO(m.bizszam, AVG(tl.egysegAr), SUM(tl.mennyisegME1), SUM(tl.mennyisegME2), SUM(tl.mennyisegME3)) FROM Megrendeles m LEFT JOIN MegrendelesTetelek tl ON tl.parentInvoice=m WHERE tl.cikk... GROUP BY m.bizszamSumokat szépen megcsinálja. AVG viszont 0.0 a DTO-ban, ahol double típusnak volt megadva a field, mert ha bigdecimalra állítom adok meg sír, hogy nincs konstruktor double-val. DB-ben decimal típusúak amiket átlagolnia kéne, és ha a DB-n lefuttatom a queryt sima SQL-ben, jó az átlag is. Az entity-ben is bigdecimal, mégse engedi az. Fura, mert a SUM-ok azok bigdecimalok, és engedi a dto-ban is a bigdecimalt. AVG-nél nem.
meglett. Amikre igaz a feltétel, ott pont 0 az összes ár

-
mobal
nagyúr
Rá kellett jönnöm, hogy a spring data nem olyan okos, mint hittem, így ha a @Query-s repositoriy metódus szignatúrájában nem lista van, hanem pl string, akkor nem tol egy LIMIT 1-et a DB-felé, hanem működik amíg egy találat van, és exception amint több is van...
Szóval hogy lehet korlátozni 1-re a találatok számát, natív query nélkül?
Tényleg az a legegyszerűbb, hogy a service-ben csak kiveszem a lista első elemét? Tákolásra kényszerít?
(metódusneves query leírás nem játszik, túl bonyolult ahhoz a query (pedig nem is igazán bonyolult))Hát pedig query-nél neked kell ezzel foglalkoznod szerintem: [link]
Más, de Spring: tegnap migráltam SQL-ről Mongo-ra. Elég hamar ment szerencsére.
-
disy68
aktív tag
nem is akarok használni, de a példákban más megoldás nincs, lásd ott a fetch és mégse.
Az elméleletet tudom, meg azt is, hogy az jpa-nál ritkán stimmel a gyakorlattal, ahogy itt se.A gyors megoldás az lett, hogy a service-ben nyomok egy gettert a sub entitykre semmibe vezetett eredménnyel, és utána már jó lesz a servicen kívül is.
De inkább azt választottam, hogy a
@Fetch(value = FetchMode.SUBSELECT)-et átírtam FetchMode.JOIN-ra. Hogy ez most bug, vagy feature, nem tudom, mindenesetre logikát nem látok benne... úgyhogy a bug a valószínűbb.
Azt nem tudom mit csinál, nem is érdekel, ennek a rakás ürülék alkalmazásnak ez a legkisebb gondja
ha a fetch mód subselect, akkor n db kapcsolódó entity-vel n+1 query-t generál a hibernate, ez működik eager és fetch betöltésnél is, viszont a join fetch mód esetében 1 db query-t generál a hibernate, amivel lekéri a kapcsolódó entity-ket is, így ez instant eager betöltést jelent fetch type-tól függetlenül
én alapvetően a @NamedEntityGraph irányba mentem volna, ha nincs mód nagyobb refaktorra (bár ha ezt force-olja a projekt struktúra, akkor kb. mindegy, mert eager betöltés lesz a vége)
-
floatr
veterán
nem is akarok használni, de a példákban más megoldás nincs, lásd ott a fetch és mégse.
Az elméleletet tudom, meg azt is, hogy az jpa-nál ritkán stimmel a gyakorlattal, ahogy itt se.A gyors megoldás az lett, hogy a service-ben nyomok egy gettert a sub entitykre semmibe vezetett eredménnyel, és utána már jó lesz a servicen kívül is.
De inkább azt választottam, hogy a
@Fetch(value = FetchMode.SUBSELECT)-et átírtam FetchMode.JOIN-ra. Hogy ez most bug, vagy feature, nem tudom, mindenesetre logikát nem látok benne... úgyhogy a bug a valószínűbb.
Azt nem tudom mit csinál, nem is érdekel, ennek a rakás ürülék alkalmazásnak ez a legkisebb gondja
A @Transactional többek között pont erre jó, hogy egyazon sessionbe kerül minden. Mondjuk eleve nem szeretem a metódus annotációkat, de nem hiszem, hogy az bezavarna.
-
disy68
aktív tag
LazyInitializationException-t hogy lehet megoldani, EAGER-re állítás nélkül?
@Transactional ugye szokás szerint nem működik, a fő entity lekérdezése ugyan abban a @Transactional metódusban van, mint a subselectes getter hívása. Igaz, hogy nem is service layeren van, mert ez ugyan az a rakás... még mindig.@OneToMany(mappedBy="parentInvoice", fetch= FetchType.LAZY, cascade= CascadeType.ALL, orphanRemoval=true )@Fetch(value = FetchMode.SUBSELECT)public List<ItemsEntity> getItemList() {return itemList;}
Már volt ilyen gondom, máshol, csak már nem tudom hol, csak arra emlékszem, hogy ott sem volt jó egyik dolog sem az EAGER-t leszámítva, amit a google kidob erre a hibára
, de sikerült EAGER nélkül valahogy."ott sem volt jó egyik dolog sem az EAGER-t leszámítva, amit a google kidob erre a hibára"
aham, mint ez meg ez, amikben kifejezetten azt írják, hogy ne használj eager-t ilyen helyzetben (első 2 találat)
Vlad Mihalcea blogját amúgy tudom ajánlani, ha hibernate és/vagy jpa a témakör.
-
floatr
veterán
Ez generál a stdout-ra scriptet, amit utána tudsz használni
spring:
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
format_sql: true
logging:
level:
org.hibernate:
SQL: DEBUG
type.descriptor.sql.BasicBinder: TRACE -
floatr
veterán
Szeretnék egy két entity dolgot logolni, így beraktam az ős abstract entity-be, hogy
@Transientprotected final Logger logger = LoggerFactory.getLogger(this.getClass());aztán random leszármazott entity-knél:
java.lang.IllegalArgumentException: Could not resolve property name logger from Property set for beanMiért? Miért random, és hogy lehetne megcsinálni?
Most ezt így nehezemre esik megszakérteni, de minden osztálynak saját loggere van. Ha nem akarod mindig beírni azt az 1-2 sort, akkor ott van a lombok logger annotációja
-
floatr
veterán
Van egy fieldem amiben az osztályom amiben generikusan másik osztály van, az abstract osztályban van deklarálva kell ennek a generikusban lévő osztály ősének metódusa, de a leszármazott osztályban már nem elég az őse, kellenek a fejlettebb metódusok is, de castolni nem tudom, nem engedi.
Pl: nem optional az osztály, csak azzal tudom szemléltetni abstract class: protected Optional<AbstractOsztály> valami=new Optional<AbstractOsztály>();
Leszármazott osztályban is használnám ezt Optional<LeszármazottAbstractOsztály> valami2= (Optional<LeszármazottAbstractOsztály) valami;De nem engedi. Mi a megoldás ha egy ták projektnél, egy abstractban view osztályban deklarált abstract osztályú field, subclassban kiterjesztett metódusait használhassam a a leszármazott view osztályban, felüldefiniálás nélkül?
A generics kezelésnek kicsit nézzél utána, mert ez nem ilyen egyszerű. És tényleg mindenki jobban jár, ha egy kicsit érthetőbben fogalmazol, de ezt már mondtam korábban is.
-
Szmeby
tag
Van egy fieldem amiben az osztályom amiben generikusan másik osztály van, az abstract osztályban van deklarálva kell ennek a generikusban lévő osztály ősének metódusa, de a leszármazott osztályban már nem elég az őse, kellenek a fejlettebb metódusok is, de castolni nem tudom, nem engedi.
Pl: nem optional az osztály, csak azzal tudom szemléltetni abstract class: protected Optional<AbstractOsztály> valami=new Optional<AbstractOsztály>();
Leszármazott osztályban is használnám ezt Optional<LeszármazottAbstractOsztály> valami2= (Optional<LeszármazottAbstractOsztály) valami;De nem engedi. Mi a megoldás ha egy ták projektnél, egy abstractban view osztályban deklarált abstract osztályú field, subclassban kiterjesztett metódusait használhassam a a leszármazott view osztályban, felüldefiniálás nélkül?
Kicsomagolod, castolod a belét, becsomagolod. Mondjuk, amit az Optional.map() csinál, ha már az Optional a példa.
disclaimer: Remélem azt nem kell mondanom, hogy ha a kalapács nyelével akarod beverni a szöget, akkor ne csodálkozz, ha körülményes. Ha mondanom kell, akkor egy java software design témájú könyv elolvasása szerintem hasznos lenne. Valami a nagyoktól: Josh Bloch, Bob Martin, Kent Beck, Fowler, ...
Ja igen, zavarbaejtően sok állítmány és szleng került a mondataidba, nem vagyok benne biztos, hogy jól értem a problémát, de van egy olyan érzésem, hogy máshogyan illene struktúrálni azt a kódot.
-
M_AND_Ms
veterán
közben meglett, picit máshogy: mvn package
2 kérdés:
-Kellene valami tool amivel teljes java projekteket lehet összehasonlítani, java fájlonként, tartalomra. Total commander synchronize dirs volt eddig, de most nem... minden java fájlt különbözőnek érzékel, és különbözik is a mérete byte-ra, de a tartalom nagyrésze egy az egyben ugyan az. By content checkbox nem segít, karakterkódolás pedig azonos, nincs fájl végi sortörés különbség sem
-Van olyan tool amivel kigyűjhetőek, akár a pontosan egyező metódusok is? Mert az a szerencsétlen aki csinálta, még metóduson belül is 10 soros kódokat ismételget, azonos copy-paste metódusokból is sok van.
Persze az is hasznos lenne, ha a feltűnően hasonló kódrészletekre is figyelmeztetne, hogy azt egységesíteni lehet. -
floatr
veterán
-
mobal
nagyúr
-
disy68
aktív tag
docker build-el. Valami maven wrappert írt, hogy be kell rakni a projektbe, az benn is van.
Igen rákerestem, a java írja, hogy nem jó a jar. Pedig a hivatkozott jar még eredetiben simán indul, ugyan az alatt a 14-es jdk alatt.
Megnéztem az argumentumot, de nem találja, mivel a docker linux fájlrendszerében keresi, nem az igaziban."Valami maven wrappert írt, hogy be kell rakni a projektbe, az benn is van."
docker-maven-plugin? hogy néz ki hozzá a konfig a pom.xml-ben?"Igen rákerestem, a java írja, hogy nem jó a jar."
ha rákeresel a hibaüzenetre és hozzácsapod, hogy docker, akkor láthatod, hogy másoknak is volt ilyen problémájuk, a legtöbb esetben az argumentum átadással volt a gond, ami miatt a
JAR_FILEváltozó értéke üres, így a copy nem fut le jól"Megnéztem az argumentumot, de nem találja, mivel a docker linux fájlrendszerében keresi, nem az igaziban."
wut?
-
disy68
aktív tag
köszi, ez király dolog! Éreztem, hogy van valami ilyesmi

dockeresíteném (próbából) az egyik sima springboot teszt cuccomat, amiben embedded H2 van.
De ahogy egy régebbi node-os probálkozásomnál is, itt is egy soros semmit mondó hibaüzenettel száll el a run, de a build az rendben van mindig.Error: Invalid or corrupt jarfile /app.jarEz a dockerfile
FROM openjdk:14-jdk-alpineVOLUME /tmpARG JAR_FILEADD ${JAR_FILE} /target/wishlist-1.0-SNAPSHOT.jarCOPY ${JAR_FILE} app.jarENTRYPOINT ["java","-jar","/app.jar"]Le van buildelve a jar, ott van a helyén a targetban.
Még is. Amúgy ha arg-ot adnék meg azt, hol adjam meg? A formátumára vagyok kíváncsi.
Amúgy egy vindózos gépen fut, de lásd a backslashek per jellé vannak alakítva.A docker image-et hogyan hozod létre? Használsz-e maven/gradle plugint? Rákerestél-e a hibaüzenetre? Nézted-e hogyan kell argumentumot használni a dokumentációban?
-
mobal
nagyúr
köszi, ez király dolog! Éreztem, hogy van valami ilyesmi

dockeresíteném (próbából) az egyik sima springboot teszt cuccomat, amiben embedded H2 van.
De ahogy egy régebbi node-os probálkozásomnál is, itt is egy soros semmit mondó hibaüzenettel száll el a run, de a build az rendben van mindig.Error: Invalid or corrupt jarfile /app.jarEz a dockerfile
FROM openjdk:14-jdk-alpineVOLUME /tmpARG JAR_FILEADD ${JAR_FILE} /target/wishlist-1.0-SNAPSHOT.jarCOPY ${JAR_FILE} app.jarENTRYPOINT ["java","-jar","/app.jar"]Le van buildelve a jar, ott van a helyén a targetban.
Még is. Amúgy ha arg-ot adnék meg azt, hol adjam meg? A formátumára vagyok kíváncsi.
Amúgy egy vindózos gépen fut, de lásd a backslashek per jellé vannak alakítva.Ez Spring?
-
Superhun
addikt
-
floatr
veterán
Egy ideje ilyen esetekre VS Code konténert használok. Egy docker image-be összeállítja a fejlesztőkörnyezetet, amit utána tovább tudsz konfigolni.
-
mobal
nagyúr
Vindózon van egy openjdk 14, csak úgy kicsomagolva, hozzáadva a path-hoz, meg java_home beállítva.
Tennék fel mellé egy 8-as JDK-t is, de nem tudok. Az openjdk elirányít az orákle oldalára, ha 8-ast keresek, ahol csak telepíthető van, ami valahogy kisajátít minden javas alkalmazást, és az futtatja, de hogy hogy, azt nem értem, mert a path-hoz, és javahome-hoz nem ad semmit.
Linuxon meg csak simán az apt-al rakhatok fel 8-as, és legújabb javat is.
Hogy lehet megoldani, hogy az elsődleges a 14-es openjdk legyen, de adott projekthez, aminek a pom-jában 1.8 van, ahhoz a 8-ast használja? És hogy telepítem? Tényleg 7zippel kell kihackelni az oracle telepítőből?
Én már lassan két éve nem szórakozom csak ezt használom: [link]
-
mobal
nagyúr
nem. Az ugyan azt írja 20x, ahogy szokta, hogy nem talál megfelelő osztályt a szerializáláshoz (mert nincs is olyan félig összeszedett entity), de amúgy a json serializációig minden rendben, előtte kiíratom a visszaadott objektumot, onnan is látom, hogy spamet rak bele.
Nagyon furán működik ez a spring data.pl van 2 entity, 1-1 kapcsolattal. Kellene nekem a "gyerek" összes infoja, a szülő id-ja alapján.
@Query("SELECT p FROM UserProperties p INNER JOIN User u ON u.userProperties = p.id WHERE u.id=?1")@Query("SELECT u.userProperties FROM User u WHERE u.id=?1")
2 queryt eredményez mindkettő, ahol összejoinolja ahogy az első queryben van, majd még egy query ahol a User-t lekérdezi ugyan olyan where-el... tehát 2x megcsinálja ugyan azt. Akár lazy, akár eager a kapcsolat. Akkor is megcsinálja, a user repository findbyid-t nyomok.Ok hogy id alapján történik minden, ami szinte ingyen van, de na... Tényleg csak natív queryvel lehet beleverni, hogy egy queryvel megcsinálja ezt? Vagy a spring show sql nem azt írja ki ami tényleg történik? Vagy el van cseszve a H2 driver?
Ezt meg kéne tudni csinálni szerintem nativ query nélkül is. Régen csináltam hasonlót:
Optional<Deck> findByIdAndGame_Id(int id, int gameId);A
deckentity-nek pedig volt egy ilyen tulajdonsága:@OneToOne
@JoinTable(
name = "games_decks",
joinColumns = @JoinColumn(name = "deck_id"),
inverseJoinColumns = @JoinColumn(name = "game_id")
)
@JsonIgnore
private Game game; -
floatr
veterán
SELECT i.targetuser.id,i.id, i.targetuser.userProperties , i.interactiontime FROM Interaction i INNER JOIN Interaction it ON i.owneruser = it.targetuser WHERE i.owneruser.id = ?1 AND i.targetuser =it.owneruserInteraction entity User entitykre mutat, a userhez meg tartozik userproperties entity, 1-1 kapcsolatban.
Itt a fenti kimenet kellene, csak 1 queryvel (mert ez 2-t eredményez, 1x ez a query, majd anyiszor userproperties query, ahány sor az eredmény.Ezt hogy lehetne 1 querybe rakni konkrétan? @Transactional nem használ, ha join fetchelni akarom a userpropertiest, mindig sír, hogy a parent object nincs a select listben, akkor is ha ott van (pl nem csak targetuser.id hanem targetuser).
Ha most jobban végiggondolod, ezt SQL-ben sem lehet normálisan megcsinálni. SQL Server-nek van valami JSON-ös megoldása erre, de sosem használtam. Vagy egy nagy JOIN-ba pakolsz mindent, de akkor ismétlődés lesz, amit kézzel kell aggregálni stream-collector alapon, vagy külön kérdezed le, úgy viszont neked kell összekalapálnod az összetartozó adatokat, ha a lazy initet nem szereted.
Igazság szerint, ha ilyen adatmodelled van, érdemes elgondolkodni egy NoSQL DB-n, mint pl. a Mongo.
A H2/HSQL/Derby nem production-ready DBMS. Helyette inkább MySQL/MariaDB egy docker konténerben.
-
floatr
veterán
Egyrészt jó lenne, ha kicsit jobban leírnád a kérdéseidet, mert nem lehet követni, annyira csapongsz.
A JOIN FETCH egy JPA specifikus dolog, a Spring Data nem tehet róla, hogy néha kell. Ha használsz @Transactional-t, vagy open session in view filtert, akkor egy tranzakción belül, több dolgot is fel tud szippantani, mint szeretnéd.
Ha DTO-t használsz, akkor eleve máshogy fognak működni a dolgok.
Ha csak bizonyos mezőket szeretnél használni, arra ott vannak az implicit és explicit projekciók.
A fenti query a legtöbb DBMS-ben értelmezhetetlen. -
Szmeby
tag
nem. Az ugyan azt írja 20x, ahogy szokta, hogy nem talál megfelelő osztályt a szerializáláshoz (mert nincs is olyan félig összeszedett entity), de amúgy a json serializációig minden rendben, előtte kiíratom a visszaadott objektumot, onnan is látom, hogy spamet rak bele.
Nagyon furán működik ez a spring data.pl van 2 entity, 1-1 kapcsolattal. Kellene nekem a "gyerek" összes infoja, a szülő id-ja alapján.
@Query("SELECT p FROM UserProperties p INNER JOIN User u ON u.userProperties = p.id WHERE u.id=?1")@Query("SELECT u.userProperties FROM User u WHERE u.id=?1")
2 queryt eredményez mindkettő, ahol összejoinolja ahogy az első queryben van, majd még egy query ahol a User-t lekérdezi ugyan olyan where-el... tehát 2x megcsinálja ugyan azt. Akár lazy, akár eager a kapcsolat. Akkor is megcsinálja, a user repository findbyid-t nyomok.Ok hogy id alapján történik minden, ami szinte ingyen van, de na... Tényleg csak natív queryvel lehet beleverni, hogy egy queryvel megcsinálja ezt? Vagy a spring show sql nem azt írja ki ami tényleg történik? Vagy el van cseszve a H2 driver?
"pl van 2 entity, 1-1 kapcsolattal."
Na várj csak! Ha 1-1 kapcsolat van köztük, akkor miért OneToMany annotációt használsz? Mi történne, ha OneToOne-ra módosítanád?
-
Szmeby
tag
nem. Az ugyan azt írja 20x, ahogy szokta, hogy nem talál megfelelő osztályt a szerializáláshoz (mert nincs is olyan félig összeszedett entity), de amúgy a json serializációig minden rendben, előtte kiíratom a visszaadott objektumot, onnan is látom, hogy spamet rak bele.
Nagyon furán működik ez a spring data.pl van 2 entity, 1-1 kapcsolattal. Kellene nekem a "gyerek" összes infoja, a szülő id-ja alapján.
@Query("SELECT p FROM UserProperties p INNER JOIN User u ON u.userProperties = p.id WHERE u.id=?1")@Query("SELECT u.userProperties FROM User u WHERE u.id=?1")
2 queryt eredményez mindkettő, ahol összejoinolja ahogy az első queryben van, majd még egy query ahol a User-t lekérdezi ugyan olyan where-el... tehát 2x megcsinálja ugyan azt. Akár lazy, akár eager a kapcsolat. Akkor is megcsinálja, a user repository findbyid-t nyomok.Ok hogy id alapján történik minden, ami szinte ingyen van, de na... Tényleg csak natív queryvel lehet beleverni, hogy egy queryvel megcsinálja ezt? Vagy a spring show sql nem azt írja ki ami tényleg történik? Vagy el van cseszve a H2 driver?
Én inkább a Hibernate-re gyanakszom (vagyis az általad választott aktuális JPA implementációra), ő rakja össze az sql-t. A spring csak egy plusz réteget húz köré. Ezért is gondoltam azt, hogy az egyik megoldás egyből a hibernate-et szólítja meg, míg a másik átfolyik még néhány springes optimalizáción. Habár a spring egyik és másik modulja is képes gyökeresen eltérő "optimalizációkat" végrehajtani ugyanabból a kiindulópontból.
Szerintem sem sikerültek a legjobbra a hibernate default működési módjai ilyen-olyan esetekben, de tudod, ez ízlés dolga. A kedvencem, hogy Set, List, Collection, stb típusok esetén ceteris paribus teljesen eltérő lekérdezéseket rak össze végül. Külön öröm volt ezt debugolni.

Más fejlesztő más problémával meg örül neki, hogy pont úgy működik az általa összerakott izé, ahogy azt elvárja. A show_sql-nek nincs oka, hogy hazudjon.Megtanultam már, hogy minden hibernate által összeállított query-t le kell ellenőrizni, mert orbitális hülyeségeket, optimalizálatlan megoldásokat tud összerakni a háttérben. Vagy csak nekem vannak furcsa igényeim, ki tudja.

Örülök, hogy a fetch megoldotta a problémát.
Optimalizálj és jó lesz. 
-
togvau
senior tag
nem. Az ugyan azt írja 20x, ahogy szokta, hogy nem talál megfelelő osztályt a szerializáláshoz (mert nincs is olyan félig összeszedett entity), de amúgy a json serializációig minden rendben, előtte kiíratom a visszaadott objektumot, onnan is látom, hogy spamet rak bele.
Nagyon furán működik ez a spring data.pl van 2 entity, 1-1 kapcsolattal. Kellene nekem a "gyerek" összes infoja, a szülő id-ja alapján.
@Query("SELECT p FROM UserProperties p INNER JOIN User u ON u.userProperties = p.id WHERE u.id=?1")@Query("SELECT u.userProperties FROM User u WHERE u.id=?1")
2 queryt eredményez mindkettő, ahol összejoinolja ahogy az első queryben van, majd még egy query ahol a User-t lekérdezi ugyan olyan where-el... tehát 2x megcsinálja ugyan azt. Akár lazy, akár eager a kapcsolat. Akkor is megcsinálja, a user repository findbyid-t nyomok.Ok hogy id alapján történik minden, ami szinte ingyen van, de na... Tényleg csak natív queryvel lehet beleverni, hogy egy queryvel megcsinálja ezt? Vagy a spring show sql nem azt írja ki ami tényleg történik? Vagy el van cseszve a H2 driver?
join fetch megoldotta a 2 querys dolgot... de ezt miért nem tudja magatól? Főleg a default gyári queryknél, mint a findbyid.
-
Szmeby
tag
Van egy Entity, aminek vannak al entity-jei, Set-ben. E set fölött ezek az annotációk vannak:
@OneToMany(fetch = FetchType.LAZY, mappedBy ="user" )@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")@JsonIdentityReference(alwaysAsId = true)
Ez jól is működik, ha konkrétan ezt az entityt kérdezem le, spring data crudrepository findbyid-vel, szépen a set-ben lévő entityknek csak az id listáját adja vissza.De ha egy jpql query-ben van, ami egy DTO-t csinál, és annak az egyik tagja a fenti fő entity, akkor a @json annotációs gyerek entityknek visszaadja az id-jait, mellettük még másik fieldjét is, ami mellett egyébként még 2 van, amit meg nem ad vissza...
Nem értem, hogy itt miért nem az id listát adja vissza, és azt sem, hogy miért csak azt az 1 fieldet adja vissza, mikor ott van még 2.
Miért adja vissza ugyan azt az entityt 2 queryben teljesen különbözőképpen?
Azért, mert a szoftverfejlesztés bizonyos területein nem ismerik a sztenderdizálás fogalmát.

A debug logokkal sem jutottál közelebb a megoldáshoz? -
floatr
veterán
belefutottam egy hasonlóba: https://stackoverflow.com/questions/47640698/com-fasterxml-jackson-databind-ser-beanserializer-serialize-spring-jpa
Úgy tűnik, hogy ha rest-ben lekérdezett entity-ben van kapcsolat másik entity-vel (gazdájával), és ez oda vissza jelölve van (onetomany->manytoone), akkor jsonizáláskor végtelen ciklusba fut. Ezt megoldotta az, hogy a @Jsonignore-t raktam a gazda entity kapcsolat field-nél, így az egész gazda entity kimarad a visszaadott jsonből..
De mi van, ha én szeretném a gazda entity id-ját (mást nem) is visszaadni rest-en? Tudom, saját DTO létrehozással, és query utáni oda-vissza konvertálásával lehetne. De nincs rá valami annotációs okosság?
Belepakolsz egy @Transient annotációval jelölt metódust, ami get***Id néven visszaadja a kapcsolt entity azonosítóját.
De használhatod a gyerek-szülő kapcsolatban a JsonManagedReference és JsonBackReference annotációkat is, ami csak egyik irányban engedi a szerializációt kifejteni
-
bambano
titán
-
disy68
aktív tag
frissítettem linuxos kis szerveremen java-t 11-re. Az eddig java 8-on futó kis servlet most:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletNincs máven, és nem is szeretnék belemódosítani a jar-ba.
Van rá megoldás azon kívül, hogy visszateszem a 8-at?"Runtime" is meg lehet adni további dependenciákat pl. a CLASSPATH környezeti változóban vagy -classpath kapcsolóval: link
pl:java -classpath /path-to/servlet.jar MyApplication -
Ezekiell
veterán
frissítettem linuxos kis szerveremen java-t 11-re. Az eddig java 8-on futó kis servlet most:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletNincs máven, és nem is szeretnék belemódosítani a jar-ba.
Van rá megoldás azon kívül, hogy visszateszem a 8-at?Ha nem akarsz módosítani a Jaron, akkor vissza a java8, vagy adsz classpathot neki system envben. Vagy dockerben indítod java8al, és mehet a java11 a rendszerre.
-
mobal
nagyúr
megint szívás a keveréssel... spring MVC controller, JSF-el. Tökjó volt addig, amíg nem kéne egy jsf oldalt GET url paraméterrel megnyitni.
De ott elakadtam:@GetMapping(path = "/public/list/{id}")
public String publicwish(@PathVariable long id, Model model) {
System.out.println("Controller:"+id);
model.addAttribute("id", id);
return "public/list.xhtml";
}nem spring controllernél van az f:viewParam, de itt sehogy se működik. 1 darab id-t kellene csak a jsf managedbeannek eljuttatni, akárhogy. Ezt a model-t se tudom hogy lehetne elérni jsf-ből. A returnbe bármi mást írok, akkor 404 lesz. Így bejön az id a controllerhez, de a jsf-be nem megy tovább. Erre mi a megoldás?
Najó találtam rá egy megoldást, de az igen csúnya

A logikát pakold át @Service-be a kontrolleredből. Model helyett pedig dto-kat illik adni controllernek.
-
Superhun
addikt
nem túl fontos, csak optimalizációs kérdés:
van egy jpql query, hogy pl:SELECT w FROM Stuff s JOIN User u ON s.owner_id=u.id WHERE u.id=?1
De itt épp nem kellene semmi a User-ből, szükségtelen a join, az owner_id-re keresni a where-ben elég lenne.
TehátSELECT s FROM Stuff s WHERE s.owner_id=?1de így elszáll, hogy nem találja az owner_id-t, pedig DB szinten van ilyen, csak entity-ben ugye User owner van.
Ilyet így csak natív queryben lehet?
Vagy ilyenkor a DB okosan egyszerűsít, és tudja, hogy a 2.-al kiváltható az első query?Próbálj ki valami ilyesmit:
SELECT s FROM Stuff s WHERE s.owner.id = ?1
-
togvau
senior tag
Na beszívattam magam... már nagyon keveredtek a dolgok, nem akarom újraírni.
Szóval spring MVC, security+JSFMűködik minden, addig, hogy kellene az egyik jsf oldalon egy lekérdezés, ami az oldalt megnyitó belépett org.springframework.security.core.userdetails.User adatai alapján kérdez le.
@Controller-ben tökegyszerű, csak egy @AuthenticationPrincipal MaiUserDetailz user paraméter kell a metódusba. De ez csak @Controller-ben használható, és nekem a @Service-ben kellene, vagy ha nincs rá más megoldás, akkor a jsf beanjének átadni valahogy.
Erre valami ötlet?
megvan. SecurityContextHolder.getContext().getAuthentication().getPrincipal() mindenhol műxik

-
Superhun
addikt
-
Superhun
addikt
Ezt meg tudja nekem valaki magyarázni?
JSF frontend, springboot-mvc-data backend. Júzer módosító felületen, egy @PostConstruct init metódus van, ami betölti a júzer listát, egy @Autowired @Service metódust hívva, ami Crudrepositoryt hív.
Ez rendben is megy. Módosítok a felületen (jelszó változtatás), ami hasonlóképpen történik, de hogy a változások rögtön látszódjanak, a JSF managedbean (ami a spring miatt inkább @Component) metódusa ami a servicet meghívja, az újra meghívja az initet, ami szintén, csak a lekérdezést.
Ez megint oké. De ha 2. alkalommal is módosítok valamit, akkor hibernate lazyinitialization exceptionnal elszáll, és mindig ugyan ez lesz ezen túl, ha reloadolom az oldalt, akkor is.
Ha nem megyek el eddig a 2. módosításig, vagy előtte reloadolom az oldalt, nincs ilyen probléma. Akárhányszor nyomogathatom az újratöltést, annyiszor lekérdez, nincs lazy probléma.Mindegyik service metódus javax.transaction. @Transactional
A furcsaság amit itt észrevettem, hogy az első módosítás utáni frissítésnél, ha a managedbean metódus hívja meg az initet, akkor csak a fő tábla selectje megy le, az ahhoz kapcsolódó entityké nem. De ha böngészőben reloadot nyomok, akkor kapcsolódókat is selecteli.
Ugyan az a metódus 2 féle képpen működik?
Ez az egész nekem nagyon nem kerek. Ezt a részt hogy érted? "JSF managedbean (ami a spring miatt inkább @Component)"
A JSF managed beannek @ManagedBeannek kellene lennie, nem @Componentnek. JSF-et és Springet ilyen formában nem szabad keverni. Itt le van egy jó példa, hogy hogyan kellene a Spring+JSF-nek kinéznie: https://www.baeldung.com/spring-jsf -
disy68
aktív tag
pl
mvc.perform(MockMvcRequestBuilders.post("/user").header(HttpHeaders.AUTHORIZATION, "Bearer "+testToken).contentType(MediaType.APPLICATION_JSON_VALUE).content(json)).andReturn();
így. Ha kihagyom az autentikációs tokent, akkor is megy. Úgy megy, hogy semmilyen jogosultsági beállítást nem állítottam a tesztben. Ugyan ennyivel elindítva postmanből szépen unauthorized, ahogy kell.A másik, pedig hogy a beadott DML sql-ben lévő insertek lefutnak még egyszer (constraintviolationnal, mert már ugye betöltötte a DB-be), amikor egy ahhoz köze nincs, rest hívást csinálok először. Utána újra próbálva ugyan az a rest hívás lemegy.
Így an a DML beadva az application.properties-ben:@Transactional
@PostMapping(path = "/user")
@ResponseBody ResponseEntity<InfoResponse> createUser(@RequestBody UserDTO userDTO) {
User newUser = new User(userDTO);
return InfoResponse.createResponseEntity(ResponseTypes.SUCCESS, "new user id: "+userRepo.save(newUser).getId(),HttpStatus.CREATED);
}Nem írsz arról, hogy a MockMvc-t hogyan használod (a test class hogyan van annotálva). Ha
@SpringBootTestannotációval használod, akkor explicit be kell konfigurálni a security-t.
részlet a korábbi baeldung cikkből:@Autowiredprivate WebApplicationContext context;private MockMvc mvc;@Beforepublic void setup() {mvc = MockMvcBuilders.webAppContextSetup(context).apply(springSecurity()).build();}(...)De én továbbra is TestRestTemplate használatát javaslom, ehhez itt egy kis egyszerű minta.
A DB-s problémád pedig kicsit zavaros, az az "application.properties" részlet meg egy controller post methodja..
-
mobal
nagyúr
pontosan azt, amit írtam. De lefut az alkalmazás, elindul ugyan úgy mintha simán futtatnám, lefuttatja a teszteket, majd leállítja.
És most az újabb dolog amit szeretnék el,érni, az az, hogy ne csaljon a springboot junit test, és ne god mode-ban hívja meg a rest szolgáltatásokat, hanem autentikálni kelljen, csak úgy mintha postmanból hívnám.
Ez biztos unit tesz? Nekem már nem annak tűnik, ha autentikálni is akarsz.
-
disy68
aktív tag
pontosan azt, amit írtam. De lefut az alkalmazás, elindul ugyan úgy mintha simán futtatnám, lefuttatja a teszteket, majd leállítja.
És most az újabb dolog amit szeretnék el,érni, az az, hogy ne csaljon a springboot junit test, és ne god mode-ban hívja meg a rest szolgáltatásokat, hanem autentikálni kelljen, csak úgy mintha postmanból hívnám.
Ok, azt hiszem értem mi a félreértés. Ezt írtad: "maradjon futva a junit tesztek lefutása után". Ebből én unit testre asszociáltam és erről is beszéltem.
Erősen kétlem, hogy támogatná bármilyen test framework alapból, hogy utána fusson tovább az alkalmazás, ami a tesztek futtatása miatt indult.
A springboot junit test az meg nem csal, hanem azt csinálja, amit "mondasz" neki. Hogyan hívod most a tesztekben a "rest szolgáltatásokat"? Itt egy baeldung a témakörben. Meg egy TestRestTemplate részletesebb.
-
disy68
aktív tag
A unit test-eknek van valami futtató keretrendszere, ami segítségével futtatod a teszt osztályok metódusait, amiben használod az alkalmazásod elemeit. Ilyenkor nem fut a teljes alkalmazás, szóval nincs sok értelme így a kérdésnek. Mi a tényleges probléma, mit szeretnél elérni?
-
disy68
aktív tag
JPA-ban van arra automata lehetőség, hogy a fő entity, és a hozzá tartozó al-entity-ket egyszerre rakja a DB-be? Tehát van egy fő entity, amihez kapcsolódhat sok al-entity.
Mert fő entity save-nél csak a fő entity elemeit menti le, a benne lévő al-entityket nem.
Tényleg csak selectkor képes összeszedni mindent, máskor szájba kell rágni az egyértelműt?Cascade működést meg kell adnod. Itt van hozzá egy baeldung.
-
Drizzt
nagyúr
JPA-ban van arra automata lehetőség, hogy a fő entity, és a hozzá tartozó al-entity-ket egyszerre rakja a DB-be? Tehát van egy fő entity, amihez kapcsolódhat sok al-entity.
Mert fő entity save-nél csak a fő entity elemeit menti le, a benne lévő al-entityket nem.
Tényleg csak selectkor képes összeszedni mindent, máskor szájba kell rágni az egyértelműt?Cascade a funkcio amit keresel. Amugy altalaban nem annyira javasolt a hasznalata. Meg tudod adni egy tombben, hogy milyen muveleteket kaszkadoljon egy adott entitas objektumra, vagy entitas kollekciora.
-
floatr
veterán
Most kellett

Linkeltem fent a bugot, ami valahol van... exception alapján spring data-ban van, de a workaround az egy criteriaquery, aminél nem jelentkezik ugyan az a bug:@Query("select p.id from Photo p where p.user = ?1")List<Long> findIdsByUserId(long id, boolean restricted);
Ez elhasal, a linkelthez hasonló: org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [34] did not match expected type... -alMíg ugyan az a lekérdezés (kicsit még kibővítve), criteriaqueryvel, ugyan olyan metódusparaméterekkel, fut ahogy kell:
public List<Long> findIdsByUserId(long id, boolean restricted) {var cb= em.getCriteriaBuilder();var ids=cb.createQuery(Long.class);var root=ids.from(Photo.class);ids.select(cb.construct(Long.class, root.get("id")));var pred= new ArrayList<Predicate>();pred.add(cb.equal(root.get("user"), id));if (!restricted) pred.add(cb.equal(root.get("restricted"), false));ids.where(pred.toArray(new Predicate[pred.size()]));return em.createQuery(ids).getResultList();}fura. user= User entity kapcsolat, ami DB-ben egy BIGINT-et jelent user_id mezőben.
Nézd nem mondom, hogy hibátlan a framework. Tele van apróbb hiányosságokkal, dokumentálatlan sok helyen, és a dobott hibák félrevezetőek.
De ha alaposan ismered, nem csupán a tutorialokat bújod, akkor fel fogod ismerni az alapvető összefüggéseket. A fenti lazy init probléma nem bug. Így működik a JPA, és ha a @Transactional használata problémát okoz, akkor nagyon gyorsan igyekezz elsajátítani, mert mint mondtam: alap.Az iménti kódrészlettel van egy baromi nagy baj, nem is csupán a paraméterek száma miatt. A query, amit leírtál, egy JPQL SELECT. Annyiban különbözik az SQL-től, hogy objektumokat kezel (többek között). A
p.user=?1nem a táblában lévő oszlopra vonatkozik, hanem a Photo entitás user adattagjára, ami gondolom User típusú. A JPQL nem long értéket vár, hanem egy User objektumot. Helyesen így lenne:select p.id from Photo p where p.user.id = ?1
feltételezve, hogy a user azonosítója az id nevű property, így lehetne Long paraméterrel hívni. A restricteddel az a baj, hogy feltételesen csapod a query-hez a criteria API-s implementációjával. Ilyet @Query annotációval nem lehet. Ott fixen meg kell adni a JPQL-t, amit nem módosíthatsz, magyarán:select p.id from Photo p where p.user.id = ?1 and p.restricted=?2
lenne a végső JPQL (ha el nem néztem még valamit).Ne ess abba a hibába, hogy a frameworkben keresed a bugot, miközben helytelenül kódolsz.
-
Drizzt
nagyúr
Most kellett

Linkeltem fent a bugot, ami valahol van... exception alapján spring data-ban van, de a workaround az egy criteriaquery, aminél nem jelentkezik ugyan az a bug:@Query("select p.id from Photo p where p.user = ?1")List<Long> findIdsByUserId(long id, boolean restricted);
Ez elhasal, a linkelthez hasonló: org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [34] did not match expected type... -alMíg ugyan az a lekérdezés (kicsit még kibővítve), criteriaqueryvel, ugyan olyan metódusparaméterekkel, fut ahogy kell:
public List<Long> findIdsByUserId(long id, boolean restricted) {var cb= em.getCriteriaBuilder();var ids=cb.createQuery(Long.class);var root=ids.from(Photo.class);ids.select(cb.construct(Long.class, root.get("id")));var pred= new ArrayList<Predicate>();pred.add(cb.equal(root.get("user"), id));if (!restricted) pred.add(cb.equal(root.get("restricted"), false));ids.where(pred.toArray(new Predicate[pred.size()]));return em.createQuery(ids).getResultList();}fura. user= User entity kapcsolat, ami DB-ben egy BIGINT-et jelent user_id mezőben.
Igy ranezesre: ket fuggveny parametered van, mig a querynek csak 1. A @Queryben jpql expression van. Ha a user id-jere akarsz szurni, akkor: where p.user.userId =?
-
floatr
veterán
Jaj de bonyolult, és csúnya. DeltaSpike-nál létre lehetett hozni interfacet extends EntityRepository, ahol csak @Query elég volt, ahol meg vegyesen kellett @query, és rendes metódus is, ott abstract class extends AbstractFullEntityRepository, aztán abstract metódusnál csak @query, nem abstractnál meg minden más.
Vannak bajok ezzel a spring datával, belefutottam ebbe is [link], csak sima long-al. Akkor jön elő, ha entity kapcsolat van 2 tábla között. Bár a kapcsolat DB szinten sima id-kkel van meg (bigint-ek), id alapján queryben mégse lehet szűrni, mert bár a query paraméter long, ami jó a biginthez, de spring data azt már entity-nek látja, amivel nem stimmel a long...
Akkor lehet választani, hogy vagy entity szintű kapcsolatok, vagy optimalizált lekérdezések... bár criteriaqueryvel nem próbáltam még.Relatív, hogy mi a csúnya
van egy interface a Data metódusoknak, meg egy custom implementációhoz, már ha kell egyáltalán.Annyit azért nem árt fejben tartani, hogy a @Transactional alap. Nem hozunk létre tranzakciót kézzel, nem nyitunk db kapcsolatot. EntityManager-t a legvéső esetben szabad csak babrálni. Helyette érdemes a projekciókkal csinálni, amit lehet.
-
floatr
veterán
Köszi, így érthető!
Manuálisan pedig entitymanager begintransactionnel lehet kezdeni, és flush-al lezárni?Ezt viszont megint nem értem:
Ez volt: (működött az autowired)@Repository
public interface PhotosRepo extends CrudRepository<Photo, Long> {Ez lett:
@Repository
public abstract class PhotosRepo implements CrudRepository<Photo, Long> {
@PersistenceContext
private EntityManager em;
és mellé autowirednél:
.NoSuchBeanDefinitionException: No qualifying bean of type 'org..asd.db.repository.PhotosRepo' available: expected at least 1 bean which qualifies as autowire candidate.
Miért?Namost ez egy elég hosszú téma, de röviden itt van egy példa, ami alapján tudsz hozzácsapni összetetteb dolgokat egy JPA repo-hoz. Ezt most csak egy text editorban dobtam össze, de a lényeg itt van. Van egy JPA repository-d, amit a framework majd implementál magának. Kell egy új interface, amiben a saját új metódusaid vannak. Ezt implementálod egy külön osztályban, valamint az új interface-t hozzácsapod a JPA repo-hoz az extends-ben. Innentől kezdve a PhotosRepo típust injektálod be mindenhová, mert a Spring ez alapján készít saját implementációt.
// létrehozol egy inteface-t a saját metódusaidnak
public interface PhotosRepoCustom {...}// meghagyod a Spring Data repository-dat is, de hozzácsapod a saját interface-t is
@Repository
public interface PhotosRepo extends CrudRepository<Photo, Long>, PhotosRepoCustom {...}// implementálod az új interface-t
public class PhotosRepositoryImpl implements PhotosRepoCustom {
@PersistenceContext
EntityManager em;
public List<A> findAllCustom() {
....
}
}De a @Query annotációval használhatsz JOIN FETCH-et is egy query metódusban pl.:
@Repository
public interface PhotosRepo extends CrudRepository<Photo, Long> {
...
@Query("SELECT a FROM A a INNER JOIN FETCH a.b b")
public List<A> find();
} -
floatr
veterán
spring JPA tesztelgetés_
Van egy junit teszt class, ahol az egyik tesztben létrehozok B entityt, amit egy A entitybe illesztek (onetoone, lazy, nem cascade kapcsolat), és save a repoval.
Aztán, ha ezt le akarom kérdezni findAll-al az A entityket amihez ugye tartozik a B entity is, akkor exception: no session.
Ha Cascade.ALL-on van akkor nincs hiba. Ahogy akkor sem, ha a lekérdezős metódus springes @Transactional.
Nem értem, hogy hova tűnik a session? Mi köze egy független select-nek tranzakciókhoz?Amikor meghívod a lekérdezést a Repository metódusban, az elkér egy aktuális sessiont az EntityManager-től. Mivel lazy, azon a ponton nem oldja fel a hivatkozást, csak egy B proxy-t kap az A objektum. Amikor visszakapod A-t, a session már ment a lecsóba, és hiába hívod meg a gettert, a proxy már nem találja a session-t.
Na többek között erre is való a @Transactional, mert megmondja az EntityManager-nek, hogy hol kezdődik a session lifecycle. Ha nincs @Transactional, akkor a Repository metódusban kéne inícializálni a lazy relációkat. -
p76
senior tag
-
Drizzt
nagyúr
próbálom megérteni a streamek furcsaságait, de nem sikerül:
Arrays.asList(asd).stream().forEach(System.out::println);
Miért nem írja ki a lista tartalmát? Egy ref stringet ír ki, gondolom a stream-ét.for (int j : asd) {System.out.println(j);}
A klasszikus foreach meg simán működik, ahogy kell.Miért?
A streammel nincs baj, az Arrays.asListet használod rosszul. Az listát csinál a megadott tömb elemeiből. Jelen esetben egy egy elemű listád lesz, aminek az az egy eleme egy int[] lesz.
int[] ints = new int[]{0, 1, 2, 3};Arrays.asList(ints).stream().forEach(System.out::println);Arrays.asList(1, 2, 3).stream().forEach(System.out::println);Arrays.stream(ints).forEach(System.out::println);Eredménye:
[I@1218025c123
0123 -
zmb668
csendes tag
Sajnos 8 év után újra web servicekkel, és soappel ver a sors. Van egy webservice kliensem, aminek a requestjére érkező response, kb 10 darabb " unmarshalling exception: ? "-t okoz.
Hogy lehet a ?-et debugolni? Sajnos a ? cause nekem túl bőbeszédű, nem tudom melyik részét nézzem. Akkor rég úgy ment, hogy 654x újra és újra átnéztem mindent, majd újra... tényleg nem történt ezekben a borzalmakban fejlődés? Vagy van valami trükk?Ha bemasolnad a pontos stacktracet (beleertve a caused by reszeket is), - nyilvan kidobalva belole azokat a sorokat, amig a programodra utal - akkor talan tobbet lehetne mondani, de igy tippre karakterkodolasi hiba van.
-
Lortech
addikt
Sajnos 8 év után újra web servicekkel, és soappel ver a sors. Van egy webservice kliensem, aminek a requestjére érkező response, kb 10 darabb " unmarshalling exception: ? "-t okoz.
Hogy lehet a ?-et debugolni? Sajnos a ? cause nekem túl bőbeszédű, nem tudom melyik részét nézzem. Akkor rég úgy ment, hogy 654x újra és újra átnéztem mindent, majd újra... tényleg nem történt ezekben a borzalmakban fejlődés? Vagy van valami trükk?Most tényleg kérdőjel van az exceptionben, vagy csak nem akartad leírni a konkrét hibát?
Én először megnézném, hogy az adott requestre adott válasz érvényes-e a wsdl-re.
Pl. Soapui megmondja a response-on jobb klikkre.
Aztán leellenőrizném, hogy a wsdl nem változott-e időközben, ugyanazt a wsdl-t implementálja-e a végpont, mint amiből a kliens lett generálva (?).
Ha már muszáj debuggolni, akkor IDE-ben be tudsz állítani exception breakpointot az exception típusra. -
MrSealRD
veterán
Hát ha van public része a exceptionnek, akkor azt az 1-2 sort bedobhatod... Nekem legutóbb attól volt unmarshalling exception, hogy jött egy adatstruktúra amiben az egyik elem típusa date volt, és sima záró tag-et, küldtek érték nélkül. Na ezen totál eldobta magát... Először elkezdtem keresgélni, hogy hol tér el a séma, aztán végül ott volt benne, hogy nem tudta parseolni...nyilván mivel nem volt benne semmi.
-
MrSealRD
veterán
Sajnos 8 év után újra web servicekkel, és soappel ver a sors. Van egy webservice kliensem, aminek a requestjére érkező response, kb 10 darabb " unmarshalling exception: ? "-t okoz.
Hogy lehet a ?-et debugolni? Sajnos a ? cause nekem túl bőbeszédű, nem tudom melyik részét nézzem. Akkor rég úgy ment, hogy 654x újra és újra átnéztem mindent, majd újra... tényleg nem történt ezekben a borzalmakban fejlődés? Vagy van valami trükk?Hát lehet én tudok valamit rosszul, de nálunk ha ilyen séma eltérés van, akkor az unmarshalling nagyjából kidobja, hogy hol volt gondja... De én visszalépnék egyet. WSDL+XSD-k elvileg ott vannak. Abból meg kiderül, hogy mi kötelező és mi opcionális.
-
emvy
félisten
Én ilyet még nem láttam, csak azt hogy mánágereknek van egy büfé-ruhatár szak mellé nagy arcuk, pszichopatikus jellemzőik, félinformációkból "a szomszéd józsitól aki ismeri a testvérének a főnökének a fiát aki ért hozzá" tájékozódva, a divatos technológiákat nyomják keresztük "ha mások szeretik, nem lehet rossz"
Nem jo helyen dolgozol.
-
Aethelstone
addikt
Én ilyet még nem láttam, csak azt hogy mánágereknek van egy büfé-ruhatár szak mellé nagy arcuk, pszichopatikus jellemzőik, félinformációkból "a szomszéd józsitól aki ismeri a testvérének a főnökének a fiát aki ért hozzá" tájékozódva, a divatos technológiákat nyomják keresztük "ha mások szeretik, nem lehet rossz"
Ez azért erős túlzás...
-
emvy
félisten
En ugy latom, hogy a jol meno cegeknel a menedzserek ertenek a szakmahoz is -- jo esellyel maguk is onnan indultak. Egeszen meglepo lenne, ha egy kozgazdasz dontene a JSP meg az SPA kozott.
-
emvy
félisten
Menedzserek nelkul szerinted jobban mennenek a projektek?
-
floatr
veterán
Meg kell mondani a menágernek, hogy vagy most invesztál bele fejlesztésekbe X összeget, vagy később 10X-et kárelhárításra, javításokra, tarthatatlan supportra, és exponenciálisan növekedő költségigényű change requestekre.
-
G.Zs.
senior tag
Felejtsd el azt a ceget is ahol a manager talalja ki..

-
Aethelstone
addikt
Egyszerűen, ha nem lett elküldve az adott jsf oldalon legalább 1x már form, akkor nem biggyeszti be az outputlink a servlet mapping /faces-ét az url-be, ha pedig már volt form küldve, akkor igen... szépen fejlődik visszafelé a dolog, 9 éve még ilyen probléma nem volt, bár akkor is sok jsf, és AS bug volt.
Felejtsd el ezt a jsf témát....valami ajaxos frameworkkel sokkal többre mégy...
-
Lortech
addikt
Tudom milyen a userroles, azért írtam át org...akármi...database-re... csak lehet nem abban a fájlban ahol kéne. De éppen, hogy a standalone.xml-es gányolást akarom elkerülni, és valami projectben lévő xml-es megoldást használni, ami jbosshoz le van írva, de wildflyon úgy látszik már máshogy van, csak nincs leírva hogy, mert a normális dokumentáció az luxus...
Bárcsak ejb meg jpa logint írhatnék... de jó dolog is programozni, és nem konfigurálgatni, és azt kutatni, hogy az ami volt konfiguráció az most nem az, de nincs sehol leírva hogy mi... De hát 20% programozás, 80% xml matatás(konfiguráció), és hogy hol kell elhelyezni, és hogy kéne kinéznie az xml-nek.
Pedig a standalone/domain.xml-ben kell beállítanod a security domainedet. A security domain / realm az nem 1:1 egy alkalmazáshoz kapcsolt, hanem alkalmazások fölött álló koncepció. JAAS infrastruktúra és Java EE pedig nem ad standard megoldást arra, hogy hogyan kell az alkalmazáshoz security domaint rendelni. Ezért van az, hogy jboss-web.xml-ben kell megadni. Vagy standalone/domain.xml-ben default security domainnek beállítani.
jboss-web konfiguráció itt van említve: [link]
security subsystem pedig itt van leírva: [link]
Ebből látszik, hogy a Database / DatabaseUsers modul a webes admin konzolon
a org.jboss.security.auth.spi.DatabaseServerLoginModul-t jelenti.
Tutorial: [link]Fontos, hogy wildfly 11-től elytron alrendszer van és önmagában kevés a fenti legacy konfiguráció.
Migráció: [link] -
Lortech
addikt
Találtam egy ilyet [link]
Így tetszene, talán így nem lenne olyan szívás JAAS-t beállítani. De ez még jbossra van írva de itt nem írja hogy lenne ilyen "[domain_name]-jboss-beans.xml" a wildfly-ban.Na meg nekem adatbázisból dolgozó login modul kéne, de ha rákeresek wildflynál mindenhol azt írják, hogy code="Database" a jboss doc-ban meg egy ronda org.jboss.security.auth.spi.UsersRolesLoginModule-van, akkor gondolom wildflyban is hasonló kéne legyen nem?
Az kéne, hogy a jsf oldalakhoz JAAS belépés után lehessen hozzáférni, valamelyikhez adminként, valamelyikhez nem adminként, és a belépés után a belépett userről tudjak valamit (legjobb egy user entity lenne, de ha van egy username már az alapján is lekérdezhető az entity).
A JPA háttér a user entityket használja más táblákhoz kapcsolódva is, és a user entityből azonosítani is lehet mindent, de úgy látom jpa-s JAAS azonosítás nincs, csak sima jdbc, de az is jó lenne, csak hogy?Mert mindenféle összefüggéstelen egymásnak ellentmondó, ősrégi "tutorial" van erről...
UsersRolesLoginModule az egy fapad login module, property fájl alapú, nem tud db-ből authentikálni.
Amit én linkeltem, az direktben a datasource-on keresztül jdbc-zik, de simán lehet írni JPA alapú login module-t, írtam is már wildflyra, weblogicra.. Nem triviális, de nem is ördöngősség.
Pl. csinálsz egy EJB szolgáltatást ami JPA-n keresztül elvégzi az authentikációhoz szükséges ellenőrzést. A loginmodule-ból pedig JNDI-n keresztül lookupolod az EJB-det. A loginmodule-t csomagolhatod az alkalmazásodhoz is, nem muszáj külön modulként telepíteni.
Belépés után httpservletrequestből (JSF-ben facescontexten keresztül) elérhető a felhasználó a getUserPrincipal metódussal (getName normálisan a felhasználó nevét adja vissza), ezzel bekérdezhetsz az adatbázisodba. Van még isUserInRole is ugyanitt. -
togvau
senior tag
Köszi, éééés működik az egyik összefüggős táblába adás már, egy @ManyToOne hozzáadásával. Ennyi kellett. De fura, mert a jpa tools entity-tábla generátor megtalálta enélkül is az összefüggéseket (mert FK-zot), és jól generálta a táblákat ehhez.
A factoryt pedig már static singletonosítottam, és az entity manager is entitykezelő (session scoped) osztályonként singleton.
Másik (szintén kapcsolatban lévő) táblánál, mivel nincs ID-nek való egyedi adat, ezért külön int id van definiálva, simán @GeneratedValue.
De először is, egy hibernate_sequence nevű táblát keresve száll el, de a jpa tools sima sequence nevűt generál. Átneveztem, így elindítva már azon száll el, hogy ebben nincs next_val nevű oszlop IDENTITY stratégiával.
Egyik módszer sem működik. Komolyan olyan buta a perzisztenciaréteg, hogy nem tud egy üres táblában mondjuk csak simán 0-val kezdeni, és mindenféle táblák kellenek neki?Meglett, <property name="hbm2ddl.auto" value="update"/> ennyi kellett a persistence.xml-be.
Nagy haladás van, bár a jaas túl bonyolult, szerintem marad a saját autentikáció. -
Lortech
addikt
És ezt a merget-t hova kell tenni?
Mert így ugyan az a hiba. (getgod() konkrétan az adatbázisból kérdezi leg a god entity-t, ami egy user.
EntityManager em= getFactory().createEntityManager();
em.getTransaction().begin();
Event evt= new Event(new Date(),em.merge(getGod()),event, success);
em.persist(evt);
em.getTransaction().commit();
em.close();#9626 az még lehet más más állapotból volt, most username van, és amiatt sír, hogy "Unknown column 'username' in 'field list'"
De érdekes, mert az events-ben nincs username, hanem username_username-t generál oda a jpa tools, ahogy az applicant osztályban is applicant van, és applicant_username-t generál az adatbázisba. A username az events-ben és az applicant entity-ben is igazából egy hivatkozás az XUser entity-re
@Entity
public class XUser implements Serializable {
private String name;
@Id
private String username;
private String password;
private UsrType type;
@Entity
@Table(name="Events")
public class Event implements Serializable {
@Id
private Date date;
private XUser username;
private String event;
private boolean success;
@Entity
@Table(name="Applications")
public class Application implements Serializable {
@Id
@GeneratedValue
private int id;
private XUser applicant;
private float amount;
private boolean approved;Lehet bugos a JPA Tools table from entities generátora?
Szerk:
kipróbáltam azt hogy stimmeljen pontosan a név, tehát@Entity
@Table(name="Events")
public class Event implements Serializable {
@Id
private Date date;
@Column(name="USERNAME_USERNAME")
private XUser username;
private String event;
private boolean success;De ez sem nyert:
"Cannot add or update a child row: a foreign key constraint fails (`ulytestdb`.`events`, CONSTRAINT `FK_Events_USERNAME_USERNAME` FOREIGN KEY (`USERNAME_USERNAME`) REFERENCES `xuser` (`USERNAME`))Nem definiáltál az entitásaidba relációkat, legalábbis nem látszik. Anélkül nem nagyon fog menni és FK be fog utagni, meg nyilván generátor se fog tudni jó db sémát generálni így. Ajánlott olvasmány: JPA relációk, de úgy általában JPA.
EntityManager em= getFactory().createEntityManager();
em.getTransaction().begin();
Event evt= new Event(new Date(),em.merge(getGod()),event, success);
em.persist(evt);
em.getTransaction().commit();
em.close();Ezzel itt az (lehet) a baj, hogy amint lezárod az EntityManagert, az összes managed entitás példányod, amit a persistence contextben használtál, detached lesz. Ennek pedig az a következménye, hogy a még be nem töltött, lazy load relációk nem tudnak majd betöltődni, ill. az objektumok módosítása esetén nem lesznek automatikusan perzisztálva sem.
-
Aethelstone
addikt
Vannak így létrehozott adatbázis táblák, JPA entitykből:
CREATE TABLE Applications (ID INTEGER NOT NULL, AMOUNT FLOAT, APPROVED TINYINT(1) default 0, APPLICANT_USERNAME VARCHAR(255), PRIMARY KEY (ID))
CREATE TABLE Events (DATE DATETIME NOT NULL, EVENT VARCHAR(255), SUCCESS TINYINT(1) default 0, USER_USERNAME VARCHAR(255), PRIMARY KEY (DATE))
CREATE TABLE XUSER (USERNAME VARCHAR(255) NOT NULL, NAME VARCHAR(255), PASSWORD VARCHAR(255), TYPE INTEGER, PRIMARY KEY (USERNAME))
ALTER TABLE Applications ADD CONSTRAINT FK_Applications_APPLICANT_USERNAME FOREIGN KEY (APPLICANT_USERNAME) REFERENCES XUSER (USERNAME)
ALTER TABLE Events ADD CONSTRAINT FK_Events_USER_USERNAME FOREIGN KEY (USER_USERNAME) REFERENCES XUSER (USERNAME)
CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(38), PRIMARY KEY (SEQ_NAME))
INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0)Xuser létrehozása megy, de eventet már nem lehet, mert:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'user' in 'field list'Akkor is ezt dobja, ha az eventben lévő user példányt létrehozom, és az megy az event entity-be, de akkor is ugyan az, ha konkrétan a JPA-s lekérdezésből jött user példány van az eventbe irányítva.
Ez mitől van? Hogy lehet a wildfly hibernate-jének a végső SQL parancsait kiirattatni mondjuk a konzolra? Az lehet segítene a hiba keresésben.
Mondjuk egyik fizikai tábládban sem látok 'user' mezőt.
-
Lortech
addikt
És ez mit jelent hogy rossz az entity db mappingem? Az entitykből lettek generálva a táblák.
Egyébként most megcsináltam fordítva, a meglévő táblákból generáltam az entityket, így kiegészült pár mappedby-al, meg onetomany, meg manytone annotációval, 2 user hozzáadás ment, bár event akkor is "detached entity passed to persist", de aztán már a user hozzáadás is ugyan ez. Most már generálni sem tudok az entitykből táblát, mert az meg más exceptionnel száll el.
Szóval állítom vissza az ezelőtt mentett workspacet...Azt értettem alatta, hogy az entitásban/db-ben a probléma mezőt/oszlopot nem jól definiáltad.
Pl. nem jó oszlopnevet adtál meg.
Detached entity passed to persistnek számos oka lehet. Kézzel állítasz be kulcs mezőket mentés előtt? Másodjára persisttel már nem fog menni, mert már létezik adott kulcsú mező, viszont az entity detached állapotban van, mivel még a persistence contextedbe nem töltődött be (pl. merge-dzsel tudod manageddé tenni). Látatlanban okosabbat nem tudok mondani. -
Lortech
addikt
Vannak így létrehozott adatbázis táblák, JPA entitykből:
CREATE TABLE Applications (ID INTEGER NOT NULL, AMOUNT FLOAT, APPROVED TINYINT(1) default 0, APPLICANT_USERNAME VARCHAR(255), PRIMARY KEY (ID))
CREATE TABLE Events (DATE DATETIME NOT NULL, EVENT VARCHAR(255), SUCCESS TINYINT(1) default 0, USER_USERNAME VARCHAR(255), PRIMARY KEY (DATE))
CREATE TABLE XUSER (USERNAME VARCHAR(255) NOT NULL, NAME VARCHAR(255), PASSWORD VARCHAR(255), TYPE INTEGER, PRIMARY KEY (USERNAME))
ALTER TABLE Applications ADD CONSTRAINT FK_Applications_APPLICANT_USERNAME FOREIGN KEY (APPLICANT_USERNAME) REFERENCES XUSER (USERNAME)
ALTER TABLE Events ADD CONSTRAINT FK_Events_USER_USERNAME FOREIGN KEY (USER_USERNAME) REFERENCES XUSER (USERNAME)
CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(38), PRIMARY KEY (SEQ_NAME))
INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0)Xuser létrehozása megy, de eventet már nem lehet, mert:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'user' in 'field list'Akkor is ezt dobja, ha az eventben lévő user példányt létrehozom, és az megy az event entity-be, de akkor is ugyan az, ha konkrétan a JPA-s lekérdezésből jött user példány van az eventbe irányítva.
Ez mitől van? Hogy lehet a wildfly hibernate-jének a végső SQL parancsait kiirattatni mondjuk a konzolra? Az lehet segítene a hiba keresésben.
Valószínűleg rossz az entity-db mappinged, de ez abból amit írtál, nem látszik.
Logolás: org.hibernate (vagy specifikusabb) kategóriára fel kell venni egy loggert és hozzá egy handlert:
[link]
Jboss logging teljesen oké, nem kell log4j vagy egyéb implementáció. -
Lortech
addikt
WARN [org.hibernate.jpa.internal.EntityManagerFactoryRegistry] (default task-3) HHH000436: Entity manager factory name (provajder) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'
Ha
@ManagedBean(name="AnnoTestAdd")
@RequestScoped
public class TestAdd {
private EntityManagerFactory factory= Persistence.createEntityManagerFactory("Ulyprov");
private String username;
private String name;
....Semmi sem történik a JSF-ből való metódushívásra (semmi üzenet), ha:
@ManagedBean(name="AnnoTestAdd")
@RequestScoped
public class TestAdd {
private static final EntityManagerFactory factory= Persistence.createEntityManagerFactory("Ulyprov");
private String username;
private String name;
És akkor sem történik semmi ha applicationscoped-re változtatom.(most már jól emlékszem hogy régen is 10% volt a programozás, 90% a keretrendszerek lelki világának, és bugjainak a kitesztelése
)És mindez azért történik, mert
<h:selectOneMenu value="#{AnnoTestAdd.type}">
<f:selectItems value="#{AnnoTestAdd.type}"/>
</h:selectOneMenu>
Ha ez nincs, működik.
ez még is mi a....?Na ez az az irány, amit nem kéne erőltetni.
Javaslom, szervezd EJB-be az üzleti logikádat és az adathozzáférést, és azt injektáld a JSF managed beanbe. Mert az nem arra való, hogy direktben JPA-zz és tranzakciót kezelj benne.
AZ EJB-be pedig injektáld az entitymanageredet pl. az általam fentebb írd módon. Így nem kell foglalkoznod az entitymanager létrehozásával, életciklusával (pl. hogy többször létrehozod a factory-t, mint ahogy tetted).
BalusC tutorialjait, megoldásait érdemes olvasni, ő jó forrása a JSF-fel kapcsolatos megoldásoknak: [link]JAAS-hoz: a login-config.xml az jboss szerinti leíró, wildfly-on máshogy néz ki.
wildfly login module pl (standalone.xml vagy domain.xml megfelelő profiljában):<security-domain name="xysecdomain">
<authentication>
<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
<module-option name="dsJndiName" value="ds jdni név"/>
... többi opció ...
</login-module>
</authentication>
</security-domain>De mindez megtehető webes admin konzolból is.
Aztán jboss-web.xml-ben kell egy <security-domain>xysecdomain</security-domain> hivatkozás, ami a webalkalmazásodat összekapcsolja a security domainnel wildfly-ban.selectItem vs enum passz, szerencsére már rég JSF-eztem.
-
Lortech
addikt
Köszi, közben rájöttem, hogy egyszerűen a createEntityManagerFactory paramétere rossz providerre mutatott, mert 8 éve jpaztam utoljára, és a kódrészlet amiből kicopyztam ugyan azt az azonosítót használta több dologra... így meg is lett a kavarodás.
Libeket majd utólag rendezem. Meg megpróbálok minél többet annotációba tenni, ha már egyre többet lehet. Én még a 454676 darab xml-be írogatós időszakba jpa jsf-eztem

De a jaas... az még mindig sötét, ugyan abból az adatbázisból kellene dolgoznia mint a JPA... de hogy?Wildfly picketboxot használ jaasra, van olyan login module, hogy
DatabaseServerLoginModule.
Meg lehet adni neki datasource-ot paraméterként és jdbc-vel hozzáfog férni a db-dhez. Nem tudom, friss-e a leírás, de bele lehet nézni a login module forrásába. -
Lortech
addikt
Ok, rájöttem, hiányzott a form keret
De most jött a "No Persistence provider for EntityManager named".Mit írjak a persistence-be a provider helyre? Csak hibernate-s provider stringeket találok ha ráguglizok, de nem működik. Vagy milyen JPA implementációt használ ez a wildfly?
Eclipse data source-ként be van állítva, de gondolom az egy másik rendszer rendszerének a rendszere, és nincs átjárás

Kézzel úgy tudtad feloldani helyesen a jsf-et, hogy a wildfly-odban lévő verziót (az appszerverben lévő verzióval pontosan megegyező) adtad hozzá, bármely más jsf lib hozzáadása lehet, hogy elfedi a hibaüzenetet, de problémát okozhat (és semmiképp se csomagold bele az elkészült artifactodba függőségként)
Hibernate a jpa implementáció wildflyban. Provider helyére: org.hibernate.ejb.HibernatePersistence kell.
A Wildfly szervereden definiálsz egy datasource-ot (standalone/domain.xml-ben kézzel
, vagy jboss-cli-ben vagy webes admin konzolon), majd a persistence.xml-ben (ear-ban META-INF könyvtárba, war-ban WEB-INF/classes/META-INF könyvtárba) beállítod a datasource-ot.<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="mysqlpu" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/mysqlds</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
</properties>
</persistence-unit>
</persistence>Ezután a managed beanekből már tudod injektálni az em-et:
@PersistenceContext(unitName = "mysqlpu")
protected EntityManager em; -
togvau
senior tag
Már megoldottam (kézzel), volt 2 perc. Most a JAAS-al küzdök, a jsf oldalak authentikációját kéne megcsinálni vele, de ahány leírás róla, annyi egymásnak ellent mondó beállítás van. Úgy tűnik az nem megy hogy honnan szedje az adatokat (jelszó, role).
Na meg wildfly-on futtatott jsf egyszerű gombja aminek futtatnia kéne egy metódust, nem csinál semmit. Belöki az oldalt, klikk rá, és semmi. Konzolon sem, debug módban sem, semmit sem ír a szerver, meg más sem.
Ok, rájöttem, hiányzott a form keret
De most jött a "No Persistence provider for EntityManager named".Mit írjak a persistence-be a provider helyre? Csak hibernate-s provider stringeket találok ha ráguglizok, de nem működik. Vagy milyen JPA implementációt használ ez a wildfly?
Eclipse data source-ként be van állítva, de gondolom az egy másik rendszer rendszerének a rendszere, és nincs átjárás

-
Lortech
addikt
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>Eclipse: Can not find the tag library descriptor for "http://java.sun.com/jsf/core"
Mi baja? Wildfly-ra van bekonfigolva, runtime provided library-ra.
Egyébként manapság mi a célszerűen használandó dátum-idő osztály? Adatbázisban lesz eltárolva. Jó az öreg java.util.Date?
Húzd be a wildfly jsf függőséget (wildfly 11.0.0 verziót feltételezve):
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-jsf</artifactId>
<version>11.0.0.Final</version>
</dependency>Vagy telepíts jboss tools az eclipse-edbe, és add hozzá a runtime-ot.
-
Retekegér
MODERÁTOR
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>Eclipse: Can not find the tag library descriptor for "http://java.sun.com/jsf/core"
Mi baja? Wildfly-ra van bekonfigolva, runtime provided library-ra.
Egyébként manapság mi a célszerűen használandó dátum-idő osztály? Adatbázisban lesz eltárolva. Jó az öreg java.util.Date?
-
mobal
nagyúr
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>Eclipse: Can not find the tag library descriptor for "http://java.sun.com/jsf/core"
Mi baja? Wildfly-ra van bekonfigolva, runtime provided library-ra.
Egyébként manapság mi a célszerűen használandó dátum-idő osztály? Adatbázisban lesz eltárolva. Jó az öreg java.util.Date?
A "jó öreg" 1.8 óta tök új.
-
mobal
nagyúr
Nem a maven a bloatware, hanem a többi. A maven csak felesleges faxni. Igen, hibamentesebb, és profibb a kézi, de főleg gyorsabb

Soha sem bírtam a divatos dolgokat, úgy is néhány év múlva a "maven fúj"/"spring fúj"/"akármi fúj" mert jön egy újabb divatos tool, amit kovács géza mánáger aki a fősulin dreamweawerrel összekattintott egy html oldalt, megmondja(előírja)
Hát a cégeknél még arra sincs fantázia hogy saját interjúkérdést kitaláljanak, a nemzetközi divatot követi mind (hashtable keresztkérdések)."Nem a maven a bloatware, hanem a többi. A maven csak felesleges faxni."
Ez a mondatod után kérlek fejezd be te és a többiek is ezt a témát. Nem lesz egyetértés csak felesleges feszültség keltés.
Ez mindenkinek szól, nem akarok törölgetni.
-
floatr
veterán
Nem a maven a bloatware, hanem a többi. A maven csak felesleges faxni. Igen, hibamentesebb, és profibb a kézi, de főleg gyorsabb

Soha sem bírtam a divatos dolgokat, úgy is néhány év múlva a "maven fúj"/"spring fúj"/"akármi fúj" mert jön egy újabb divatos tool, amit kovács géza mánáger aki a fősulin dreamweawerrel összekattintott egy html oldalt, megmondja(előírja)
Hát a cégeknél még arra sincs fantázia hogy saját interjúkérdést kitaláljanak, a nemzetközi divatot követi mind (hashtable keresztkérdések).Szóval JSF, JPA meg mysql... A JPA nem bloatware? Az igazi profik JSP-ből SQLeznek direkt connectionökkel. Minek ez a nagy felhajtás a frameworkökkel?!
Kissé odaver ez a vélemény minden fejlesztési metodikának. Hidd el, nem poénból találták ki őket, egyszerűen csak az a gond, hogy a szoftverfejlesztések kis százaléka szól arról, hogy van egy tetszőlegesen kis scope, azt lefejleszted, aztán felejtős. Az igények változnak, a kódbázis nő, újabb modulokra van szükség, integrálni kell más rendszerekkel... és itt jön a cost of change görbe, ami egy ilyen hozzáállással pár lépés után az egekbe szökik. Az a vicc, hogy erre már a PHP Group is régen rájött
-
Cathfaern
nagyúr
Nem a maven a bloatware, hanem a többi. A maven csak felesleges faxni. Igen, hibamentesebb, és profibb a kézi, de főleg gyorsabb

Soha sem bírtam a divatos dolgokat, úgy is néhány év múlva a "maven fúj"/"spring fúj"/"akármi fúj" mert jön egy újabb divatos tool, amit kovács géza mánáger aki a fősulin dreamweawerrel összekattintott egy html oldalt, megmondja(előírja)
Hát a cégeknél még arra sincs fantázia hogy saját interjúkérdést kitaláljanak, a nemzetközi divatot követi mind (hashtable keresztkérdések).Én igazából azt nem értem, hogy ha ilyen hozzáállással tolod, akkor miért javázol. Ehhez a lightweight vonalhoz más nyelvek sokkal jobban illenének, a java nem erről szól.
-
Aethelstone
addikt
Nem a maven a bloatware, hanem a többi. A maven csak felesleges faxni. Igen, hibamentesebb, és profibb a kézi, de főleg gyorsabb

Soha sem bírtam a divatos dolgokat, úgy is néhány év múlva a "maven fúj"/"spring fúj"/"akármi fúj" mert jön egy újabb divatos tool, amit kovács géza mánáger aki a fősulin dreamweawerrel összekattintott egy html oldalt, megmondja(előírja)
Hát a cégeknél még arra sincs fantázia hogy saját interjúkérdést kitaláljanak, a nemzetközi divatot követi mind (hashtable keresztkérdések).Azt hittem, hogy az ilyen arcok, mint Te, már rég kihaltak...szórakoztató olvasni a gondolataid

-
Lortech
addikt
De azért, büszke vagyok rá, hogy lightweight, kompakt cuccokat tudok összehozni, amit egy másolás után lehet is indítani anélkül hogy egy 6 terabyte-os vinyót megtöltenénk keretrendszerrel, meg a keretrendszer keretrendszerével, és a keretrendszer keretrendszerének a keretrendszerének a függőségkezelő keretrendszerével, amivel lehet a végső keretrendszert keretrendszerelni
De sajnos a divat nem erre visz
hanem hogy "vegyééé új gépet azon menni fog így is"A maven nem bloatware, a Javás világ jelentős része használja, nem azért, hogy szívassa magát, hanem hogy megkönnyítse vele a saját életét.
Az elkészült artifactok méretét nem befolyásolja érdemben (opcionális maven leírókat leszámítva), hogy mavent használsz, ellenben 2 perc alatt lehet egy működő webalkalmazás vázad egy megfelelő archetípusból generálva, ami azonnal telepíthető, war/ear release-t készít. Sőt 1 perc bekonfigurálni egy maven plugint, ami deployol is neked a wildflyra. Csak érteni kell hozzá.
De a te kézzel összevadászott librarys gányolásod biztos gyorsabb, hibamentesebb, profibb lesz. -
cucka
addikt
De azért, büszke vagyok rá, hogy lightweight, kompakt cuccokat tudok összehozni, amit egy másolás után lehet is indítani anélkül hogy egy 6 terabyte-os vinyót megtöltenénk keretrendszerrel, meg a keretrendszer keretrendszerével, és a keretrendszer keretrendszerének a keretrendszerének a függőségkezelő keretrendszerével, amivel lehet a végső keretrendszert keretrendszerelni
De sajnos a divat nem erre visz
hanem hogy "vegyééé új gépet azon menni fog így is"Amire itt vered a melled, az pusztán annyi, hogy eddig csak sufniprojekteket láttál, ahol 1-2 ember összekalapál valamit és a deployment annyiból áll hogy felmásolod a gépre a pendriveról.
Egy normális méretű projekten fel sem merül ilyen kérdés, hogy mennyi diszket foglal a keretrendszer.
Ha ez egy létező probléma lenne, akkor mondjuk össze kéne trombitáljak két senior arcot, hogy megbeszéljük a problémát és kitaláljunk egy megoldást. Egy ilyen egy órás meeting költsége órabérben kiszámolva drágább lenne, mint egyszerűen csak venni egy nagyobb diszket.De na, majd ha egyszer olyan cuccokon dolgozol, ahol egy tucat fejelsztő dolgozik ugyanazon a kódbázison és az alkalmazást 10-15 évig karban kell majd tartani és továbbfejleszteni, akkor majd olvasd ezt visssza és röhögj magadon hogy mekkora amatőr voltál..
-
Taoharcos
aktív tag
De azért, büszke vagyok rá, hogy lightweight, kompakt cuccokat tudok összehozni, amit egy másolás után lehet is indítani anélkül hogy egy 6 terabyte-os vinyót megtöltenénk keretrendszerrel, meg a keretrendszer keretrendszerével, és a keretrendszer keretrendszerének a keretrendszerének a függőségkezelő keretrendszerével, amivel lehet a végső keretrendszert keretrendszerelni
De sajnos a divat nem erre visz
hanem hogy "vegyééé új gépet azon menni fog így is"Akkor te most assemblyben programozól, vagy már rögtön gépi kódot írsz?

Új hozzászólás Aktív témák
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Minidisc walkman - tapasztalatok - tanácsok
- Háztartási gépek
- One otthoni szolgáltatások (TV, internet, telefon)
- Xiaomi 17 Ultra - jó az optikája
- Apple MacBook
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Parfüm topik
- Milyen videókártyát?
- Sony MILC fényképezőgépcsalád
- Napokon belül váratlan versenyzővel bővül a VGA-piac
- További aktív témák...
- Teljesen ÚJ - iPhone 17 Pro 256 GB Kártyafüggetlen - Fóliás - 0 ciklus - Apple garancia
- Intel Core ULTRA 9 285K +32GB 7600MHz Patriot Viper XTREME 5 DDR5 kit! (Bolti ár: kb 600ezer Ft!)
- RYZEN 7 5700X3D (8 mag/16 szál, 96MB L3 cache)! GARANCIA/SZÁMLA (a Te nevedre kiállítva)!
- Intel Core i3-4160, 16GB DDR3 félkonfig - Alaplap, CPU, RAM, SSD, hűtő
- 2 darab Metalica VIP Superior 2 napos jegy csere 4 darab egynaposra
- Samsung Galaxy S23 FE 128GB,Újszerű,Dobozaval,12 hónap garanciával
- Lenovo Legion Slim 5 Ryzen 7 7840HS 16GB 1000GB RTX 4060 OLED 120Hz 1év garancia
- SKhynix - 16GB DDR4 Notebook RAM (2x8GB) - 2400MHz
- BESZÁMÍTÁS! Asus TUF Gaming OC RTX 4080 16GB videokártya garanciával hibátlan működéssel
- Bomba ár! Lenovo TP Yoga 370 - i5-7G I 8GB I 512SSD I 13,3" FHD Touch I Cam I W11 I Gari
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

) valamilyen felhőszolgáltatáson futtassak meg, majd a kész csomagot vissza az apin.

, vagy jboss-cli-ben vagy webes admin konzolon), majd a persistence.xml-ben (ear-ban META-INF könyvtárba, war-ban WEB-INF/classes/META-INF könyvtárba) beállítod a datasource-ot.


