- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
- Feltalálta a Google a keresőmotort
- Samsung Galaxy S25 - végre van kicsi!
- Fotók, videók mobillal
- Megvan a Xiaomi 17 Max bemutatójának dátuma is
- Samsung Galaxy S26 Ultra - fontossági sorrend
- Google Pixel topik
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Apple iPhone 17 - alap
- iPhone topik
- Bemutatkozott az iQOO első T-szériása
-
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
-
Aethelstone
addikt
-
urandom0
őstag
-
Aethelstone
addikt
-
Tothg86
aktív tag
Valahogy így:
@Embeddable
public class AccountId {
private String accountNumber;
private String accountType;
...
}
@Entity
public class Account {
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name="accountNumber", column=@Column(name="account_number")),
@AttributeOverride(name="accountType", column=@Column(name="account_type"))
})
private AccountId id;
...
}az @AttributeOverrides szekciót azért tettem bele, mert ezzel pontosan el tudod nevezni a DB mezőket. A hibernatenek van olyan NamingStrategy-je (jpa/component-path), hogy hajlamos elécsapni a generált neveknek prefixként azt, hogy "id_"
Sikerült, nagyon köszönöm!
-
Tothg86
aktív tag
Ebben a cikkben leírnak két lehetőséget, de én is használok több munkahelyi projekten összetett kulcsot. Az EmbeddedId-t javaslom, de pár dolgot nem árt észben tartani.
Az ID-t így te adod meg, nem a hibernate generálja. Emiatt egy új rekord mentésénél (save/saveOrUpdate) a hibernate egy selectet fog kiadni, hogy leellenőrizze, van-e már azzal a kulccsal adat a DB-ben. Ezt ki lehet kerülni mondjuk egy EntityManager.persist(...) hívással egy custom repo implementációban, ha te tudod garantálni a PK egyediségét. Ha sok adatot importálsz, problémát tud okozni.
Az ilyen táblák általában kapcsoló/kapcsolatleíró táblák, és az összetett kulcs elemei külső kulcsok (FK), amik más táblákra mutatnak. Ilyenkor a hibernate csak trükközve tudja leírni a relációt másodlagos mappeléssel, vagy a kulcsban mappelt relációval, bár nem mindig van szükség arra, hogy össze tudj kapcsolni kódban is két objektumot.Köszönöm szépen!
Az az egy nem világos most, hogy egyelőre egy tök szimpla lekérdezéshez, a példában szereplő két mezőt (account number és account type) ugyanúgy kell mappelnem az account osztályban, hogy melyik oszlopban van az adatbázisban? Én úgy szoktam, hogy nem bizom a hibernatere, hanem mindig megadom melyik adatbázis oszlophoz mappelje. -
Tothg86
aktív tag
Köszi!
Egy konkrét kérdésem is lenne.
Van egy munkahelyi tábla, amiben nincsen auto increment ID, nincs semmilyen primary key sem. Szembesültem azzal (ha jól értem), hogy a hibernate megköveteli az egyértelmű azonosítást. Mivel nincs a táblában ID, ezért egy darab azonosítót nem tudok hozzárendelni. Olvastam, hogy van lehetőség összetett kulcs hozzárendélésére az EmbeddedID annotation-nel.
Jól értem? Egy netes példában az volt, hogy egy külön osztályt hozok létre a kulcsnak, és itt jelölöm, hogy @Embeddable. De ez már beleszámít a mappingbe? -
Foglalt név
addikt
Ha mérlegre kéne tenni, hogy hány alkalommal futottál bele ilyen jellegű függőségi problémába, és hány alkalommal nem kellett egy projekt elindításánál neki köszönhetően összegereblyézned a libeket, akkor gyanítom, hogy az utóbbi lenne a jellemzőbb.
Nyilván mindenki azt használ, amit akar, meg amit megszabnak neki, de ne tegyünk már úgy, mintha megkeserítené az életét egy fejlesztőnek.Szerintem az összegereblyézés nem feltétlen a megfelelő előny. Ha a lib-eket berakod direktben a repo-ba, akkor robusztusabb és gyorsabb is, mint ahogy a maven levadássza őket.
Én úgy vélem projektfüggő mit, és hogyan használsz. A mai divatos eldobható szösszeneteket én is inkább összecsapom valamiben.
Ha elő kell vennem egy régi cuccot, aminek az életideje évtizedekben mérhető, csak éppen befut rá egy feature request, akkor azonban mindig meglepődöm, hogy érdekes módon az időm java részében fejlesztek és a végén lefordítom az aktuális java verzióval egy szem hiba nélkül.
Szemben azzal, mikor gradle, spring vagy valamelyik másik framework-ben az idő 60%-ban próbálok rájönni, hogy sikerült egy több százezer fejlesztő által használt keretrendszert kiadni egy olyan patch szintű upgrade-el ami nem visszafelé kompatibilis.
Persze a felháborodásom azon is múlik, hogy CD pipeline-t kell írni a korábban említett őskövülethez, amit legközelebb akkor fogunk kiadni, mikor már nem lesz gitlab. -
Drizzt
nagyúr
-
yossarian14
tag
-
Sirpi
senior tag
És amennyiben nincs is szükséged, hogy elérd ezeket a metódusokat, mindig az interface-t használd típusnak, ne a konkrét megvalósítást, mert így bármikor ki tudod cserélni a tényleges típust (pl. LinkedList-re) anélkül, hogy a kódod egyéb részeihez hozzá kellene nyúlnod.
-
BE4GLE
senior tag
Metódus-referenciát akartam írni, de elbabráltam.
Ha a Literacy osztályban implementálsz egy static compare metódust a Double::compare mintájára (ahogy a lambdában csináltad), akkor úgy is lehetne a streames kód, hogy:.sorted(Literacy::compare)Rövidebb nem lesz összességében, de elegánsabb, és nálam egy kód reviewn is hamarabb átmegy

Hát igazából, ha már ott implementálja, akkor simán override-olhatja a compareTo metódust, és akkor üresen is hívhatja a sorted() függvényt.
-
Ablakos
addikt
-
axioma
veterán
Örülök h sikerült ennyiből meglátni minden aspektusát.
#11881 Drizzt
Többek között azért is más a minőség, mert sokkal jobban végiggondolt az egész. Szinte már waterfall
#11879 btraven
Ha már rendszerszemlélet, dobd bele egy bootba, kapja meg webfluxon a nevet, majd küldje el egy ELK-nek a generált szöveget. Tedd a szöveg generálást egy service-be, amire írhatsz 1 darab unit tesztet, minden másnál mókolsz, meg integrálsz, és többször becsapod magad.#11882 axioma
Ezért mondom, hogy ehhez túl cinikus vagyok. De az már megint nem agilis, ha droidokkal dolgozol. Ráadásul a tesztelt kód többszörösét megírod, ahol a tesztben ugyanúgy lehet hiba, amin átsiklasz, mert rosszul tesztel.Vak vagyok, kevertem a ket mikulast, mea culpa... es azt gyorsolvastam h engem cinikusozol, hiaba nem is allt ossze az agilis sztoriddal. [Pedig szabin vagyok, igaz lakasatrendezes miatt nem tul kipihent.]
A velemenyem all, csak nem neked kellett volna cimeznem. -
axioma
veterán
Túl cinikus vagyok a TDD-hez

Az utóbbi években csak olyan agilis projektekben dolgoztam, ahol az agilitás leginkább arra vonatkozott, hogy menetközben találja ki a megrendelő, hogy mit is akar (vagy nem). A projektek óriási keretrendszereket használnak, amiben az egyes funkciók deklaratív elemeken keresztül automatikusan készülnek el. Ritka volt az, amikor nem változott hétről hétre a követelmény, és nagyon kevés része volt a kódnak az, amiben unit tesztre érdemes dolgok történtek.
Ha ilyen projektekre valaki rávág egy coverage kritériumot, mert az jól mutat, a teljes csapat egy emberként áll fel, és megy át a konkurenciához.
De hello ${username} példakódban piszkosul jól mutat...Vagy csak olyanok kozott dolgozom akik a problemat oldjak meg a szoftver letrehozasaval es az implementacio helyesseget tesztelik megfelelo szintu tesztekkel utat helyesebbnek tartjak.
Tesztet irni TDD-hez DE ugy, hogy az tenyleg minden lehetseges implementacio eseten minden hibat elkap, akkora befektetes, hogy annyi ido alatt az _egyik_ implementaciot tesztelessel egyutt egy-harom masik problemara is megcsinalja [JOL]. Teljes tesztet elore megirni ugy, hogy egy lehetseges implementacio mar a fejeben van, az meg a menet kozben kiderulo donteseknel csinal lyukat [aztan vagy betomik vagy nem... talan ahol merge feltetelbe fut].
Egy esetben jo lehet: az "agy" irja a teszteket, a code monkey-k/juniorok/etc. meg az implementaciot. De akkor sem biztos hogy kicsit is hosszabb tavra nezve.
[Termeszetesen az elozoleg irt kiveteleket fenntartva, altalanosabb meretu/beagyazottsagu/bonyolultsagu fejlesztesi feladatokra.] Es persze SZVSZ. -
btraven
őstag
Túl cinikus vagyok a TDD-hez

Az utóbbi években csak olyan agilis projektekben dolgoztam, ahol az agilitás leginkább arra vonatkozott, hogy menetközben találja ki a megrendelő, hogy mit is akar (vagy nem). A projektek óriási keretrendszereket használnak, amiben az egyes funkciók deklaratív elemeken keresztül automatikusan készülnek el. Ritka volt az, amikor nem változott hétről hétre a követelmény, és nagyon kevés része volt a kódnak az, amiben unit tesztre érdemes dolgok történtek.
Ha ilyen projektekre valaki rávág egy coverage kritériumot, mert az jól mutat, a teljes csapat egy emberként áll fel, és megy át a konkurenciához.
De hello ${username} példakódban piszkosul jól mutat...Ha már Hello World.
Azt hogy kell TDD-ben csinálni?
Hogy állapítja meg a teszt hogy kiírta-e a képernyőre hogy Helló világ?
És a jó pozícióba. Nem csak Helló vi és a lág meg kilóg oldalt. -
BE4GLE
senior tag
Túl cinikus vagyok a TDD-hez

Az utóbbi években csak olyan agilis projektekben dolgoztam, ahol az agilitás leginkább arra vonatkozott, hogy menetközben találja ki a megrendelő, hogy mit is akar (vagy nem). A projektek óriási keretrendszereket használnak, amiben az egyes funkciók deklaratív elemeken keresztül automatikusan készülnek el. Ritka volt az, amikor nem változott hétről hétre a követelmény, és nagyon kevés része volt a kódnak az, amiben unit tesztre érdemes dolgok történtek.
Ha ilyen projektekre valaki rávág egy coverage kritériumot, mert az jól mutat, a teljes csapat egy emberként áll fel, és megy át a konkurenciához.
De hello ${username} példakódban piszkosul jól mutat...Amit leírtál az távolról sem agilis fejlesztés. A rossz menedzsment mindig rányomja a bélyegét a projektminőségre. Ez nem a TDD hibája.
-
zapikanka
tag
-
Aethelstone
addikt
Ez teljesen életszerű, hogy ritkán találkozunk ilyesmivel, mert ahogy korábban már írtam, a tipikus usecase az, hogy a stringek valami db-ben laknak, ahonnan csak keveset szedünk elő, hogy baxtassuk őket. Db helyett lehet elastic, rabbit, kafka, solr, akármi..
-
Drizzt
nagyúr
Nem gyakori, de nem art, hogyha van az embernek az eszkotaraban valami, amivel tudja kezelni adott esetben. Nyilvan valos statisztikam nincs a dologrol, de egyebkent azert egyaltalan nem ritka, hogy sok duplikalt string van a heapen. Az mar ritkabb, hogy ezek hosszu eletuek is legyenek egyben. Es elsosorban akkor jon el az a szint, ahol erdemes kezelni.
-
Drizzt
nagyúr
Van amikor bitbaszas, de van amikor a heaped 95%-a ismetlodo stringekbol all. Akkor nem az. Az megint egy mas kerdes, hogy az ilyen esetben nem biztos, hogy a problema megoldasara idealis architecturalis megoldas lett kivalasztva.
-
Aethelstone
addikt
-
Aethelstone
addikt
-
fatal`
titán
-
Szmeby
tag
Az ilyen kérdések nem segítségkérésre valók, lévén nem konkrétak. Talán együttérzésre vágyik, ventilálni jár ide. Nincs ezzel semmi baj, a lelki támogatás is fontos. Mondjuk én személy szerint nem tudok velük mit kezdeni, de hátha valaki igen.
btraven: Gratula a játékhoz!
-
sztanozs
veterán
gondolom eddig nem volt összecsomagolva JAR-ba, csak úgy ott álltak az osztályok, és most, hogy JAR-ba van pakolva nem tudja elérni a becsomagolt resource-okat (vagy nem rakta be őket a csomagba).
-
btraven
őstag
-
nevemfel
senior tag
-
mobal
nagyúr
-
mobal
nagyúr
-
Szmeby
tag
Szerencsére már megtehetem, hogy a megrendelő arcába mondom, működő kódot egy majom is tud írni... kis túlzással. Szóval rengeteg pénzt spórolhat, ha inkább felvesz egy pár juniort, aki összerakja neki az appot gombokért. Ők ráadásul minden szóra engedelmeskednek, nem jönnek ezzel a nem lesz hatékony / átlátható / felhasználóbarát marhaságokkal. Ő is "jól" jár, és az én idegeimet is megkíméli.

Mindenkit bátorítanék erre, különben sose tisztul a piac, ha a fejlesztő nem áll ki a technológiai oldalért. -
skoda12
aktív tag
Még sosem néztem konkrétan ezt a kódot, de "gyönyörű". Néha van olyan érzésem, amikor a runtime forrását túrom, hogy a nagy részét juniorok vagy biorobotok írják. Van egy partnerünk, aki szokott kódot auditálni, és az elemzéseik szerint botrányos minőségű a nagyobb frameworkök forrása (is)
Ez szerintem minden kódra igaz. Voltam zöldmezős projekteken. 1 év után azok is úgy néztek ki, mint bármi más, amit 5 éve fejlesztenek 2 vendor céggel. Nagyon sok nagyon különböző képességű ember nyúl a kódokhoz, valószínűleg hatással van az egészre a felülről érkező nyomás is, a szűkös határidők, változó elvárások, stb. Régen én eléggé beleálltam a code reviewkba, de borzasztó sok konfliktusom volt belőle és inkább elengedtem. Funkcionális hibák esetén is inkább privátban chaten szólok az embereknek. Páran nagyon nem tudják kezelni, amikor nyílvánosan kapnak 5-6 kommentet egy PR-re.
-
btraven
őstag
Nálam ezt csinálta a Java. Benne van a fájl végén a write exception.
Amikor beolvasom akkor elszáll read exception-nal, de a stacktrace-ben a mentett write exceptiont is kiírja.
Először nem is értettem hogy hívódik meg a save metódus vagy mi van.
java.io.NotSerializableException volt. -
fatal`
titán
-
mobal
nagyúr
-
fatal`
titán
-
mobal
nagyúr
-
#68216320
törölt tag
Maradtam a pom.xml-nél. Kényelmes, ha minden ilyesmit látok egy helyen.
Más:
Hogyaza... frissítettem az STS-t és valami gond van az Eclipse-el.
Ezt a hibaüzenetet kapom: [kép]
Azt hittem a desktop gépemen van valami gond, megcsináltam a laptopon is, de ugyanez lett a vége. Ilyenkor most mivan? -
#68216320
törölt tag
-
btraven
őstag
-
Aethelstone
addikt
Nah jah, egyelőre nálam is hobbiprojekt. Céges melót nem bíznék rá egyelőre. Főleg úgy, hogy idea/eclipse már csukott szemmel is megy, itt meg sokat kell baxakodni

-
Aethelstone
addikt
-
Aethelstone
addikt
-
Aethelstone
addikt
Btw, szoktam kisérletezni a vscode-dal, meglepően jó cucc java fejlesztéshez, csak még szokni kell, de kb minden működik, ami a nehézsúlyú ide-kben :)
-
btraven
őstag
Én már megszoktam egyébként hogy mindent parancssorból a legjobb használni

git-et is úgy nyomom. -
mobal
nagyúr
-
Aethelstone
addikt
Teljesítményben jobb, de clean coding miatt is preferálják. A mavenben nem szokványos taszkokat, ami filekelezés/deployment témában befigyelhet, csak custom osztályokkal oldhatsz meg, ami rendkívül jó kódrejtésben

A groovy mondjuk nem a kedvencem, de ha kotlinos a projekt, akkor eleve adja magát.Ok, de a kotlin, mint jelenség még mindig kisebb százalékát érinti a projekteknek. Egyrészt. Másrészt meg szerintem ha nem szokványos taszkok vannak, azok legtöbb esetben design problémák. De tényleg ugorjunk

-
Drizzt
nagyúr
Mi az előnye a teljesítmény mellett? Sokkal rugalmasabb: deklaratív és procedurális egyben. Ha valami nem szokványos dolgot kell megoldani, elég egy kisebb scriptet írni benne. Nem vagy kötve a CI/CD képességeihez, és lokálisan is meg tudod azt tenni, amit a CI/CD pluginekkel támogat
Azt sem tartom valós problémának, hogy annyit kéne vele bíbelődni, hiszen a fejlesztőkörnyezetek már eléggé támogatják a nulláról kezdést is, ahogy a maven esetében. Sokkal körülményesebb a maven, de igazán nem akarok téríteni, nyilván nem kötelező, ha valaki nem akarja. Végülis lehet írni SOAP-os vagy RMI-s alkalmazást is manapság, az is működhet...Off az off-ban: szoktam találkozni olyan emberekkel, akiknél megfigyelhető az a felfogás, hogy csak abba az irányba hajlandóak elmozdulni, amerre a kényszer viszi őket. Ők általában egy idő után benne ragadnak egy adott technológiai stackben, ami egy ideig fel sem tűnik nekik. 10 évvel később viszont már riasztó, amikor még mindig servletről beszél, és oracle + jdbc a DB megoldás mindenre
Remek, de ezekre nincs szuksegunk. Egyszer jo lenne atterni, de joval nagyobb annak az ara, mint amit itt sugallsz. Mindenkeppen eltart egy ideig, mig egy programozo csapat atszokik egy masik build tool-ra. Nyilvan van az a helyzet, amikor a relativ koltsege az atallasnak kisebb, mint a relativ haszna. Nalunk jelenleg nem az.
-
Drizzt
nagyúr
A megfelelő build alap összerakása elhanyagolható erőforrásigényű egy átlagos projekt többi feladatához képest. Nyilván nem a legkritikusabb helyzetekben kell fejest ugrani az ismeretlenbe, de ezzel a mentalitással bele lehet ragadni technológiákba. Amúgy pont devopsos szempontból nem értem a dolgot, hiszen épp a gradle az, ami sokkal kezesebb groovy/kotlin oldalról. Compose-os projektekben befonnánk egymás haját, ha mavent kellene használni.
"A megfelelő build alap összerakása elhanyagolható erőforrásigényű egy átlagos projekt többi feladatához képest." Nem ertek egyet. Ez csak akkor igaz, ha az adott build rendszerhez es az azzal szembeni kovetelmeneykhez is valaki nagyon ert. Igazabol aztan utana tok mindegy, hogy pipeline-bol mavent, vagy gradle-t hivok meg.
Projektek atlagos build ideje ket perc mavennel. Intellij meg ugyis feldolgozza az egeszet belso projekt formatumra, ami sokkal gyorsabb, foleg ha szelektiven akarsz valamit futtatni. Kiprobalnam en is elesben a Gradle-t, de nem igazan varok tole semmi valos hasznot a mi use case-unkben. Ha nagyon nem lesz semmi dolgunk, akkor majd rakerul arra is a sor. A mostani maven service template-jeink tokeletesen megfelelnek az elvarasainknak, a lecserelesukben sokkal tobb lenne a potencialis risk, mint a potencialis benefit. -
mobal
nagyúr
-
sztanozs
veterán
-
mobal
nagyúr
-
sztanozs
veterán
Sajnos szerintem ez csak akkor fut le, amikor tényleg kihúzták a számokat - viszont találtam a pythonhoz time-machine modult is - azzal biztos működnie kéne

-
btraven
őstag
Egyébként is kezdek rájönni hogy a legjobb a Java API-t nézni. Ott tömören pár sorban minden le van írva.
T reduce(T identity, BinaryOperator<T> accumulator)T result = identity;for (T element : this stream)result = accumulator.apply(result, element);return result;
Kell ennél több?
-
togvau
senior tag
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.
húúú nem hittem volna, hogy ennyire gagyi

sajnos nincs kapacitás az 5642 divatos framework lelki világát, bugjait, hiányosságait bemagolni.
Hogy sikerült rátalálni? Én akárhogy is kerestem rá guglin, csak olyan jött ki, hogy nem azt a transient-t használja ami oda kell, hanem másikat. -
togvau
senior tag
Igen, elvileg így kéne, ezért is volt reflexből ez az első próba ezzel, de "túl szép, hogy igaz legyen".
Nem zavart be, csak nem oldotta meg a dolgot. Az égvilágon semmi változást nem okozott. -
togvau
senior tag
1 sor, vagy 1 annotáció, édesmindegy. Azt nem értem, miért viselkedik így véletlenszerűen.
És hogy miért száll el olyan entitynél is amiben nincs log, csak az ősosztályában, ahol deklarálva van a logger. -
togvau
senior tag
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. -
sztanozs
veterán
-
sztanozs
veterán
-
#68216320
törölt tag
-
togvau
senior tag
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.
Ha feljoinolom a hozzá tartozót (userpropertiest), akkor is több queryt csinál. Fetch joinolni meg nem lehet, mert nem tudom mi neki a szükséges parent, mert már az összes entityt kipróbáltam a select listába rakni, de mindig azt írja, hogy a parent nincs a select listában.
Nem is production volt a cél, akkor már nem kell percenként újraindítgatni.
De meglett a megoldás, valami cachelési feature okozza, amit a jdbc url végére ;MV_STORE=FALSE rakásával ki lehet iktatni. -
togvau
senior tag
ja tényleg, transient, jó ötlet! A többit is megnézem majd.
Most a hype UI-val ismerkedek (angular), és abban van egy ilyen a példában, hogy : import { Observable } from 'rxjs/Observable';
erre azt írja, hogynode_modules/rxjs/Observable"' has no exported member 'Observable'.ts(2305)Mit kéne ezzel csinálni, hogy ne írja?fogalmam nincs mit csinálok,de ilyen npm install rxjs-t nyomtam, de nem nyert, lett valami rxjs a node modules-ban, de a kisbetűs observable mappában nincs observable fájl.
szerk: meglett, a vscode megtalálta ott, ahol nincs, de biztos így van, hiszen javascript ahol minden lehet bármi is, meg semmi is.
-
Ezekiell
veterán
Csak 30-ára 3 crashlogom van. Megtartottam párat, hogy majd utánanézek, de még egyelőre inkább sajnáltam magam, mint időm lett volna rá. A code insight környékén (is) van valami gáz. Viszonylag nem kicsi a projekt, van 8 konténer, és a legborzasztóbb tényleg az, hogy néha az IDE indítás után egyszerűen az alap classpath sem látszik, mert összekavarodik a gradle sync.
Na, a gradle sync az tényleg tud kavarogni, ezt aláírom. Szerencsére 1 gombnyomás megoldja.
De ha nálad ennyi crash van, akkor ott nálad lesz valami probléma. Mondanám, h reinstall mindent, de ha ilyen tanácsot kapnék, nekem is a "b*szódjmegteis" lenne az első gondolatom

-
Ezekiell
veterán
Alapvetően nem lenne rossz, de...

Leszámítva az apró kis hm... sajátosságait mostanában eléggé bosszantó, hogy napi szinten 3-4 alkalommal hullik darabokra. Ilyet régebben még az eclipse sem csinált a legrosszabb pillanataiban sem.
Egyetlen dolog van az ideaban, ami tényleg tetszik, az a lambda-kezelés és a kapcsolódó code assist. Érdemes figyelni a VS Code-ra, mert nagyon jön fel, hónapról hónapra fejlesztik.Nálam igazán rohadt nagy projektektől kezdve microserviceekig minden van IDEA-ban, de sose crashelt még. Ha bármi mást kellene használnom, falnak mennék
(Pedig fejlesztettem Eclipseben is éveket, meg VSben is) -
mobal
nagyúr
Alapvetően nem lenne rossz, de...

Leszámítva az apró kis hm... sajátosságait mostanában eléggé bosszantó, hogy napi szinten 3-4 alkalommal hullik darabokra. Ilyet régebben még az eclipse sem csinált a legrosszabb pillanataiban sem.
Egyetlen dolog van az ideaban, ami tényleg tetszik, az a lambda-kezelés és a kapcsolódó code assist. Érdemes figyelni a VS Code-ra, mert nagyon jön fel, hónapról hónapra fejlesztik.A probléma a teg készülékedben lehet. Egy kezemen meg tudom számolni hányszor crashelt össze az elmúlt fél évben (0). Gradle + spring micro servicek néha nyitva 3-4-5 (bár ez full irreleváns).
-
mobal
nagyúr
A legjobban az tetszik, hogy a sonar oldalán lévő leírás és javaslat is tele van agyatlan anti-patternekkel. Sajnos a sonar tele van hülyeséggel, nem véletlen, hogy meghagyták a lehetőségét annak, hogy kikapcsolj egy-egy szabályt

Ha DTO-kat gyártasz akár rétegenként, akár microservice-enként, akkor plusz konverziós lépéseket teszel a kódba potenciális hibaforrásokként. A leggyakoribb az, amikor egy fejlesztő erre rá van kényszerítve, hogy gépiesen átdobálja az adatokat, néha konvertál típusok közt. Komplexebb lesz a kód, és semmi nem teszi biztonságossá abban az irányban, amit a sonar szabályban és a linkjeiben -- leginkább csak -- sugallnak. A mintakód félrevezetően gyatra, hűen tükrözi a témakörben gyakori ultragagyi minimalista tutorialok szellemét. Nem ment semmi és senki automatikusan, ellenőrizetlenül, validáció, autentikáció és access control nélkül, pláne nem a Controllerből, ha publikus endpointról van szó. Ha microservice-eket használunk, akkor meg egyenesen hiba eltakarni egy újabb réteggel az adatokat pl az api gateway elől. Hasonló okokból teljesen feleslegesnek tartom az OpenSessionInView filterrel kapcsolatos felindulásokat.
A leggyakoribb érdemi oka annak, hogy DTO-t vagy projekciót kell használni, az szokott lenni, hogy teljesítménybeli optimalizációt kell csinálni, így bizonyos lekérdezéseket view-ra specializáltan kell implementálni, vagy mert a frontend nem tud mihez kezdeni összetett adatokkal. Esetleg az api gateway összegyúr két service-ből származó adatot, de az meg szvsz tervezési hiba, ha erre kényszerült rá valaki.
Egy esetben látom még a létjogosultságát a DTO-szerű képződményeknek, ha az Entity/Document bloated lenne egyébként. Ez meg szubjektív.
Nem kell, hogy egyetértsünk, de a dogmatikus kijelentések teszik tönkre a szakmát.
Szerintem van ráció abban amit a SonarLint ír. Lehet, hogy komplexebb lesz a dolog de akkor is biztonságosabbá válik azáltal, hogy valmait kell kezdened a DTO-val és nem tudod csak úgy pusztán elmeneteni.
Az egész sonar opcionális, nem muszály használnod. De egyszerűen, egy plugin telepítésével összeségében nagyon sokat tudsz javítani a minőségen.
Én általában a nálam okosabb emberek által javasolt dolgokat elfogadom, persze nem jelenti azt, hogy neked is el kell. Régóta létezik, ha akkor szar lenne, azért bízom benne, hogy nem létezni.
Ki volt és megint hol demagóg? Valláshábórú != demagógia (bocs, ha nem nekem szólt).
-
mobal
nagyúr
-
Superhun
addikt
Így van, nem véletlenül alakultak ki olyan frameworkok, mint pl. a Spring Data REST, ami közvetlenül Entityket dobál ki a frontendnek. Faék egyszerű use-case-ekhez teljesen jó.
-
Zsoxx
őstag
Nyilván... hosszú éveken át használtam Eclipse-t az összes hülyeségét nem sikerült kiismerni, mert ez is olyan, mint a Skyrim - vég nélküli kihívások. Volt már mindenféle fizetős edition a kezem alatt, egyik rémesebb volt a másiknál. Azt gondoltam, hogy az IntelliJ tényleg tud mást letenni az asztalra, de ez valahol törvényszerű, hogy minél összetettebb valami, annál nagyobb hulladék. Egyik sem érdemli meg, hogy rajongótábora legyen
Akkor marad a NetBeans.
-
mobal
nagyúr
Ne fanboikodjunk, kérem

Nekem az idea a gradle projektektől térdel le, néha azt sem tudja merre van a projekt, a debug tool katyvasz, a docker integráció meg rosszabb mint a command line, a gitet teljesen hazavágja egy merge-el, mate környezet alatt elveszti a menüjét. De legalább amióta van egy vadiúj laposom, egész gyorsan elindul.Mate nem az idea hibája gondolom, a többit meg pont máshogy látom. 1:1, mindenki azt használ amit akar - de ezt már beszéltük korábban. Szarkazmus volt
-
togvau
senior tag
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.
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.
-
togvau
senior tag
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();
}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. -
togvau
senior tag
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.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? -
Taoharcos
aktív tag
Most végül egyéb szempontok miatt úgy döntöttem, marad az adatbázis elérés két külön alkalmazással.
-
Drizzt
nagyúr
Őszintén...?
DevOps-os szemmel nézve nem is szerencsés az IDE ilyen szintű integrációja. Ha nem oldható meg egy jól definiálható pipeline/toolchain segítségével automatizáltan még lokálisan is, akkor megette a fene az egészet.
Mondanám, hogy VS Code + gradle FTW, de a Red6 annyira elcseszett most valamit a Java bővítményen, hogy szinte használhatatlan. Addig meg Idea CE...Szerintem teljesen mindegy milyen szemmel nézed, a lényeg, hogy a developernek a lehető legkényelmesebb legyen a fejlesztés, annak az összes aspektusával, különös fókuszt téve a debuggingra, a build/deploy sebességre, stb. Milyen olyan pipeline-t tudsz mondani, ami lokálisan gyorsabb, egyszerűbb, szükség esetén gyorsabban testre szabható, mintha közvetlen a gépeden fut az app server, vagy a Spring boot app? Ha csinálsz egy dockerben levő Java EE szervert, akkor ahhoz, hogy oda deployolj, ott debugolj szintén kell ultimate edition. Ha egy app server image-ből kiindulsz dockerfile-ban, és mellé rakod az alkalmazásod a buildnél, az lassabb és körlülményesebb lesz jóval. Sajnos a "jó" devops pipeline-nak gyakran az a vége, hogy az emberek csak deploy + println-nel tudnak debuggolni.
Egyébként a legjobb debugging tool meg szerintem a unit teszt, két okból is: gyors, olcsó, és ha sikerül megfejteni a hibát, automatikusan van rá regression teszt. Csak sajnos nem mindig elég a hibához a unit test.
(#10940) mobal: Ok, de a kérdés kimondottan JEE volt. Egyébként a Springes véleményeddel is vitára kelnék. Munkahelyen ultimate-et használok, itthon CE-t.Az ultimate-ben sokkal több infót kapsz. Pl. autowiringnél már ki szokta jelezni, ha nincs autowire candidate, vagy több is van, s kéne qualifier. application.properties szerkesztése közben az éppen elérhető property-t felkínálja dokumentációstul. Van JPA support. És ezek most csak ilyen hasraütésszerű dolgok, lehetne még találni bőven különbséget. Meg így is vannak amik hiányoznak ultimate-ből is. Pl. custom autoconfigurable bean-ek felismerése autowiringnél, etc.
-
Csaby25
őstag
Jól értem, hogy a String literal kompiláláskor jön létre a pool-ban, tehát még a metódus meghívása előtt? Ezért amikor meghívja a metódust már ott van pool-ban a String ezért nem hoz létre még egyett?
-
bambano
titán
mitől is lőttem volna lábon bármit is egy tee-től?
nem is tudom ki írta, hogy szkript nindzsa meg rendszerszemlélet nélküli meg hasonlók. -
bambano
titán
Annyira ne kapaszkodj már a szavakba, mert az eredeti felvetés annyi volt, hogy parsolni szeretne. Meg akar oldani egy problémát, amire létezik megoldás, nem is egy. Amit te javasoltál neki arra jó, hogy kézzel belökjön pár tesztadatot valahová. Egyik oldalon próbálsz ragaszkodni a "leírtakhoz" a másik oldalon meg "találgatsz". Ez tök jó, ha csak a vita kedvéért csinálod, bár már rögtön az elején megmondta, hogy köszi nem.
Nyilván 3 szutyok property beolvasására nem kell még DB sem, nemhogy teljes stack, sem sed, awk, meg majdnem szabványos reguláris kifejezések, de ha egy kicsit felnézel a billentyűzetből, akkor láthatod a céljait jövőbelátás nélkül.Ha vitatkozni szeretnél csak, akkor biztosan találsz mást a környezetedben, ha meg van érdemi mondanivalód, akkor azzal kéne folytatni.
A scriptedet lehet, hogy kidobod minden egyes változtatásnál, bár leginkább az ötletet kéne kukázni, mert semmi másra nem jó, csak egy éppen aktuális állapot kezelésére, ahol ha hiba van az awk/sed kifejezésekben, ott nagyobb gondban van egy harmadik ember, mintha egy konfigot kéne módosítani - feltételezem, hogy ért hozzá az ember, amit csinál, márpedig ez awk/sed esetében elég nagy szó.
amit mondtam eddig, az érdemi mondanivaló attól, hogy te nem értesz vele egyet. Nem a vita kedvéért csinálom, hanem azért, hogy a kedves kolléga tanulhasson belőle. Ettől egy független tény, hogy mivel te java-val foglalkozol, szerinted mindent java-ban kell megoldani.
abban pedig biztos vagyok, hogy sokkal hamarabb fog érteni valaki vagy talál valakit, aki ért a sedhez, mint egy tök idegen program json konfigjához, amiben pont ugyanazok a reguláris kifejezések vannak, mint amit sedben használsz.
-
bambano
titán
Az ELK nem új. Van mire használni, leírtam, bár láthatóan nem sikerült beazonosítani a komponenseket. A logstash elég messze van a "ballisztikus rakétádtól".
Nem fog megállni a dolog egy property->insert trafónál, ezt nem akarod látni, nem veréb a célpont. A script nem két soros lesz, azt már most garantálom, nem rugalmas, nem használható tovább, csak egy darab script, ami szerencsés együttállásnál elég lehet workaroundnak. Rendszerszemlélet zéró."Nem fog megállni a dolog egy property->insert trafónál": ezt úgy hívják, hogy találgatás. Ha architekt követi el, akkor az főben járó bűn. A feladat szenzoradatok mysql-be töltése. Nem vidámpark, nem csillagháború, egy darab libikóka.
"Rendszerszemlélet zéró.": ez nyilván téves kijelentés több okból is. Egy kétsoros szkriptet összeütök két perc alatt. Tehát ha a találgatás, hogy majd valamikor beláthatatlan időtávban mégis lesz extra kérés, amire a szkript már nem alkalmas, akkor pontosan ugyanennyi idő alatt ki is dobom.
Másrészt a rendszerszemléletben alapvető, első helyen levő pontnak kell lenni, hogy a rendszeredet kicsinek tartod meg. Tehát amíg lehet, nem növeled. Minél kisebb egy rendszer, annál egyszerűbb üzemeltetni. Ja, jáva architektek ezt se szokták figyelembe venni, hogy a lomjukat üzemeltetni is kell. Meg debuggolni.
-
bambano
titán
Az a baj a script ninjákkal, hogy mindig arra a feladatra koncentrálnak, ami az orruk előtt van. Ezt meg lehet oldani két sor scripttel, ja várj még mókolok rajta.
Szinte minden esetben, amikor egy ilyen kérdés felmerül, jönnek az újabb ötletek, és a végén te is tudod nagyon jól, hogy nem kötélhintát szeretne az emberünk, hanem komplett vidámparkot. Aztán abban a vidámparkban találd meg az egyes scripteket, amiket jó esetben a szerzője tud értelmezni. Tele van a padlás ilyen "szakemberekkel", akik indulatból oldanak meg mindent.az elastic maga az "adatbázis"
a kibana egy dashboard, amivel megjeleníted a méréseket, nyilván nem terminálon queryzgetve akarod nézegetni
a logstash a "pumpa", amivel tetszőleges forrásból, és formátummal betolod az adatokat, ha netán bejönnek új mérésekEttől függetlenül lehet scriptekkel gányolni
az a baj a jáva nindzsákkal, hogy ha meglátnak egy új jáva szabványt, azonnal fel akarják használni akkor is, amikor nincs mire. Meg az is, hogy soha nem az előttük levő feladatra koncentrálnak. De ha nem, akkor mire?
De az is látszik a párbeszédből, hogy sokan úgy programoznak linuxon, hogy fogalmuk sincs, mit jelent linuxon programozni. ha linuxon windowsosan akarsz programozni, akkor tegyél fel windowst.
Tele van a padlás olyan jávás szakemberekkel, akik akkor is atomtengeralattjáróról kilőtt interkontinentális ballisztikus rakétával lőnek, ha csak egy veréb a célpont.
Szerinted melyikben valószínűbb, hogy hiba lesz: egy két soros shell szkriptben vagy egy elastic-ban? Melyikre kell több erőforrást felhasználni, kiemelten emberit is: egy szkriptre vagy egy rakás jáva vm-re meg benne futó rakás szolgáltatásra? melyiket kapod meg összességében olcsóbban? hint: nem a jávát, arra mérget vehetsz.
És hiába fikázod a szkript nindzsákat, az objektív műszaki érvek ebben a feladatban nem a jáva mellett szólnak.
-
axioma
veterán
Az a baj a script ninjákkal, hogy mindig arra a feladatra koncentrálnak, ami az orruk előtt van. Ezt meg lehet oldani két sor scripttel, ja várj még mókolok rajta.
Szinte minden esetben, amikor egy ilyen kérdés felmerül, jönnek az újabb ötletek, és a végén te is tudod nagyon jól, hogy nem kötélhintát szeretne az emberünk, hanem komplett vidámparkot. Aztán abban a vidámparkban találd meg az egyes scripteket, amiket jó esetben a szerzője tud értelmezni. Tele van a padlás ilyen "szakemberekkel", akik indulatból oldanak meg mindent.az elastic maga az "adatbázis"
a kibana egy dashboard, amivel megjeleníted a méréseket, nyilván nem terminálon queryzgetve akarod nézegetni
a logstash a "pumpa", amivel tetszőleges forrásból, és formátummal betolod az adatokat, ha netán bejönnek új mérésekEttől függetlenül lehet scriptekkel gányolni
Tetszik a vidamparkos hasonlat

[off, csak errol jutott eszembe, az idei adventofcode feladatainak majdnem fele egy ilyen evolucios dolog: az elejen csak 2 opcode-ot ismero ertelmezo volt a feladat, most mar komplett terkepet uzemeltet a sajat hasaban es azt kell meghajtani kivulrol algoval -- megjegyzem nekem tetszik es viszonylag uj is ez a(z elore nem ismert) funkcionkkent tovabbpockolos munkamodszer - igaz nem is java-ban hanem pythonban csinalom] -
bambano
titán
Ez a formátum YAML-ként is értelmezhető, így egy YAML parser be tudja olvasni, és akkor nem egy igénytelenül gányolt shell-ninja szutyokkal oldod meg, amit 1 év múlva a saját szerzője sem tud már támogatni.
De van rá lényegében kész megoldás is: ELK stack. Azt pont ilyenekre találták ki. Logstash illesztőkön keresztül Elastic-ba tolja a szenzorok adatait, amit később Kibanával meg tudsz jeleníteni. Ezt a shelles babrálást meg felejtsd el
tökéletesen leírtad, hogy mi a baj egyes java architektekkel.
elk meg logstash meg elastic meg kibana meg a franc se tudja hány cuccot felrakni azért, hogy bekerüljön egy mért érték egy adatbázisba, az durva tévedés. mindegyik szoftver bugos. ha telerakod szoftverrel a rendszert, akkor teleraktad hibával is.amit két sorban meg lehet írni shellben, ahhoz nem rakunk fel akkora architektúrát, hogy csak a0-s lapra lehet kinyomtatni. és ha még valaki a dockert is elkezdi emlegetni, sikítani fogok.
-
bandi0000
nagyúr
Egy rakat technológia frameworkje, jobbára nyúlás a kurrens "alternatív" frameworkökből. Ez mondjuk nem lenne baj, legalább ad neki egy standard keretet. A fájó igazság viszont az, hogy kihalóban van, és a "jobbik eset", amikor meglévő kód supportjára keresnek embereket. Amikor kerestem melót, a kapuban fordultam vissza, amint kiderült, hogy EE. Bár ez csak az én hülyeségem...
Köszi, ên mêg most nem akarok vàlogatni friss diplomàsként, cél hogy mire vêgzek addigra legyen egy hely
-
bandi0000
nagyúr
Egy interjúra megyek, és ott ezt használják, bár minél jobban belerágom magam a témába annál inkább nem értem miért...
Ha jól értem a J2EE egy régebbi "framework"? ez tartalmazza a servletet, EJB-t, JMS-t, ma már viszont a Springet használják helyette pl
-
coco2
őstag
Akkor egy kicsit vakarom a buksit. A bugfix és hasonlók időszakosak - amennyire a hírekből ki tudtam olvasni - akár fizet valaki, akár nem, nem kap gyorsabban semmit, mint a többiek. Frissítés és hasonlók a rendszergazda dolga, az Oracle miért foglalkozna azzal? Szóval nagyon nem értem én, miért is kapna az Oracle pénzt bármelyik cégtől, ha csak nem valami függöny mögötti sumák végett.
-
Szmeby
tag
Ebbe most futottam bele teljesen véletlenül

@Getter@AllArgsConstructorpublic class MinMax {Optional<String> min, max;public static MinMax of(String[] arrayOfString) {var length = comparing(String::length);return stream(arrayOfString).collect(teeing(minBy(length),maxBy(length),MinMax::new));}}Ezt nem ismertem... le vagyok ragadva a java 9-10 környékén.

Viszont tetszik, köszi. [link]
-
sztanozs
veterán
Már rég nem a sebességről szól a dolog

De ha már fun, akkor egy kis kihívás
Adott egy film (vagy bármilyen műalkotás), írjátok meg egy jellegzetes részletét Java-ban
DeathStar.getInstance()
.getGarbageMashers()
.stream()
.filter(gm -> gm.getLevel().equals(Level.DETENTION))
.forEach(GarbageMasher::shutdown);public class Dream implements Consciousness {protected List<MindState> inceptors;protected Object thought2Inject;protected Stack<MindState> dreamStates;/* */public String observe(Object o){if (o instanceof Spinner && !dreamStates.empty())return "Spins forever";elsereturn super.observe(o);}} -
Szmeby
tag
Már rég nem a sebességről szól a dolog

De ha már fun, akkor egy kis kihívás
Adott egy film (vagy bármilyen műalkotás), írjátok meg egy jellegzetes részletét Java-ban
DeathStar.getInstance()
.getGarbageMashers()
.stream()
.filter(gm -> gm.getLevel().equals(Level.DETENTION))
.forEach(GarbageMasher::shutdown);// givenUniverse universe = Universe.getInstance();long expectedLivingBeingCount = universe.getLivingBeingCount() / 2;// whenuniverse.getInfinityGauntlet().apply(InfinityStone.MIND).checkStonesAvailable(InfinityStone.values()).snap();// thenAssert.assertEquals(expectedLivingBeingCount, universe.getLivingBeingCount());
Hát, nem túl kényelmes ez a forráskód szerkesztő. -
sztanozs
veterán
Alakul...
A végén szét lehet szerelni komponensekre, és lehet hozzá majd YAML konfigot írniA reduce a legegyszerűbb, de akkor hadd húzzak lapot 19-re

Arrays.sort(arrayOfStrings, Comparator.comparing(String::length));
String shortest = arrayOfStrings[0];
String longest = arrayOfStrings[arrayOfStrings.length - 1];Mondjuk egy teljes sorbarakás szvsz majdnem mindig lassabb, mint egy külön max és min keresés.
-
Szmeby
tag
Szokás enterprise körökben túltolni a legegyszerűbb dolgokat is. Ha reduce helyett egy collectort használtál volna, no meg persze factory-kat, akkor lehetne kelteni kisebbfajta pánikot a juniorok között

Amúgy az első kérdésére csak egy reduce nem fog megoldást adni, vagy két streamet használsz, vagy egy collectorral párban gyűjtöd a min/max értékeket. De akkor meg minek...
Amúgy szerintem nincsen különösebb baj a streamekkel, amíg olvashatóan és ésszerűen van szervezve. A hármas operátort sokan nem szeretik, mert rontja az olvashatóságot. Én egyedül azt a gányolást utálom, amikor mindent be akarnak szuszakolni egy sorba. Na meg az enterprisify kódot
Oh, az első kérdést nem olvastam, az már tényleg nem lenne egyszerű.

Ilyesmire gondoltál?
Persze ha a pánikkeltés a cél, akkor biztosan cifrázható tovább.
String[] arrayOfStrings = { "alma", "körte", "banán", "cseresznye", "áfonya" };
String longest = Arrays.stream(arrayOfStrings)
.collect(Collectors.maxBy(Comparator.comparing(String::length)))
.orElse(null);
(a kedvedért több sorba törtem
)A reduce nekem valamiért testhezállóbb volt, talán azért is, mert ritkán használok spéci collectorokat. Hirtelen nem is tudnám most rövidebben leírni collectorral, és ezt már én is túlzásnak érzem. Ízlés dolga. A for ciklus a tuti, azt mindenki érti és villámgyors.
-
Szmeby
tag
Hú, köszi. A google-nél csak a pricing calculatort találtam meg, ott meg egy falat szót nem ejtettek ezekről a free limitekről. :/ Ígéretesnek tűnik, kipróbálom.
(Nem én fogom majd üzemeltetni, ezért is fontos, hogy ne kezdjen el egy váratlan pillanatban kiszámlázni dolgokat az ingyenes időszak lejártával. Még ha pár dodó is lenne az, akkor se.)
-
Zsoxx
őstag
-
disy68
aktív tag
Ezt a tiltósdi dolgot nem annyira vágom miért kell... Voltam már olyan projektben, ahol az 1.5-ös fícsöröket tiltották, mindenki menekült, semmi értelme nem volt. Lombokot szerintem alapvetően pár olyan dologra érdemes használni, ami fordításkor generál le bojlerplét kódot. Ezen az alapon semmilyen nem Java JVM nyelvet nem lenne szabad használni. Amúgy is kényszermegoldás volt, mert a JCP board impotens nyúlbéla volt hozzá, az Oracle meg pénzt akart belőle kifacsarni, nem fejleszteni.
Az XML vs Java configgal kapcsolatban az a problémám, hogy a konfiguráció karbantartásához/módosításához kódolás kell, CI pipeline. Szerintem a legszebben megfogalmazott Java config is nehezebben átlátható, mint akár az XML. Egyik megoldás sem jó tisztán, nekem leginkább az XML+annotáció az, ami leginkább kezelhető.
"Az XML vs Java configgal kapcsolatban az a problémám, hogy a konfiguráció karbantartásához/módosításához kódolás kell, CI pipeline."
Ez a konfiguráció nem ugyanaz, mint az alkalmazáshoz tartozó akár környezetenként változó konfig, pl url-ek. Ha itt kell módosítani bármit - magyarul az alkalmazás context-je változik -, akkor újra kell buildelni az alkalmazást, függetlenül a konfiguráció típusától. Innentől ez nem üzemeltetési kérdés, hanem fejlesztés.
Az átláthatóság szubjektív dolog, láttam már 30-40 xml-ből felépülő Spring konfigot, ami nekem minden volt csak nem átlátható, viszont volt kolléga, aki azt preferálta. Azt hittem ez csak az ő fétise, de akkor vannak még mások is ezen a vonalon :-)
"Lombokot szerintem alapvetően pár olyan dologra érdemes használni, ami fordításkor generál le bojlerplét kódot. Ezen az alapon semmilyen nem Java JVM nyelvet nem lenne szabad használni."
Semmi köze a kettőnek egymáshoz, ne keverd a dolgokat. A lombok által generált kódban nem bíznak sokan, valamint java update esetében okozhat/okozott gondot. Van pár issue-juk is. Ettől függetlenül, ahol lehet én is preferálom a használatát, de ettől még megértem, ha máshogy dönt valaki. -
mobal
nagyúr
-
disy68
aktív tag
Használtam már XML és Java configot is, de egy jól megtervezett struktúra és lombok használata mellett nekem: annotáció > XML > Java config. Utóbbi még üzemeltetési szempontból is aggályos
A tervezési hibával kapcsolatban meg lehet, hogy igazad van, bár ezzel szerintem csak akkor lehet hatékonyan megküzdeni, ha zöldmezős cuccról van szó.
(#10501) PeachMan én mindenképpen javasolnám. Nem árt ha mögé látsz, de nem attól leszel jó (junior) fejlesztő, hogy látod a biteket suhanni.

A lombok jó cucc én is szeretem, de magic bytekód generálás erősen ellenjavallott production környezetben. Pénzügyi szektorban még nem találkoztam olyan ügyféllel, akinél ne lett volna tiltólistán.
"Utóbbi még üzemeltetési szempontból is aggályos"
Ezt kifejtenéd?
-
#68216320
törölt tag
Használtam már XML és Java configot is, de egy jól megtervezett struktúra és lombok használata mellett nekem: annotáció > XML > Java config. Utóbbi még üzemeltetési szempontból is aggályos
A tervezési hibával kapcsolatban meg lehet, hogy igazad van, bár ezzel szerintem csak akkor lehet hatékonyan megküzdeni, ha zöldmezős cuccról van szó.
(#10501) PeachMan én mindenképpen javasolnám. Nem árt ha mögé látsz, de nem attól leszel jó (junior) fejlesztő, hogy látod a biteket suhanni.

Meg vagyok győzve. Akkor ez lesz.
-
disy68
aktív tag
A körkörös függőség tervezési hibának hangzik. Több függőségnél pedig facade vagy egyéb wrapper megoldások is játszhatnak. Ezt is mondhatjuk workaround-nak, de én még mindig úgy vagyok vele, hogy inkább lássam a konstruktornál mi a függősége egy osztálynak, semmint annotációkat nézegetni. Én spring-nél is jobban preferálom az explicit java config-ot, mintsem a package scan-t meg annotációkat (saját kódnál, nem lib-eknél). Ha van egy konkrét config, ami alapján látom, mi lesz a context, mi-mi alapján épül fel, az nekem mindig szimpatikusabb volt.
-
mobal
nagyúr
-
mobal
nagyúr
Ja hát a split az teljesen gáz erőforrások tekintetében, de kreatív megoldásnak vicces
Menet közben rájöttem, hogy ha elé- és mögé vágok egy-egy mássalhangzót, akkor tökéletesen működik az is. De ha nagyon optimalizálni kell, akkor lehet elég elborult algoritmusokat írni, ami viszont már felveti az egész hasznosságát 
A reguláris kifejezésekről meg csak annyit, hogy volt már olyan h bekresseltettem böngészőket egy nagyobb szöveg parsolásakor, ha lehet kerülöm
Ja hát ja, most vettem a fáradtságot és látom a forrásban, hogy egy csomó ellenőrzést végez a split az elején.
-
mobal
nagyúr
Olyant is csinálhatsz amúgy, hogy egy stringbe betolod az összes magánhangzót, és indexOf metódussal ránézel. Ha optimalizálni akarod, akkor sorba rendezett karakterekkel logaritmikus kereséssel is mehet

Amúgy meg:
String text = ...; // a beolvasott cucc
long vowelCount = text.toLowerCase()
.chars()
.filter(c -> "aáeéiíoóöőuúüű".indexOf((char) c) != -1)
.count();
+1.
Az amúgy nem gyorsabb megoldás, ha megnézed, hogy egy előre definiált lista tartalmazza-e a karaktert és akkor +1?
Pont a héten játszadoztam a
split-tel és aStrigTokenizer-rel, és hát 10m sornál a tokenizer kb. 4x gyorsabb volt.mobal,
Ú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?:))
- Mac Pro 6,1 2013 Late
- GAMER PC! i7-14700 / RTX 5080 / 32GB DDR5 / 1TB NVMe / 1000w Gold / BeszámítOK !
- ASUS ROG Strix SCAR 16 / Ultra 9 275HX / RTX5090 / 32GB / 2TB NVMe! BeszámítOK
- 27% - Corsair RMx Series RM1000x 1000W 80 PLUS Gold (CP-9020271-EU) Tápegység!
- White AM4 félkonfig! ASUS ROG B550-A + Ryzen 9 5950X BOX + 32GB DDR4 3600Mhz CL17
- Eladó új állapotban levő Redmi Note 11 Pro 6/128GB kék / 12 hónap jótállás
- 27% - ÚJ - GIGABYTE RTX 5080 AORUS MASTER 16GB GDDR7 Videokártya! BeszámítOK
- BESZÁMÍTÁS! Apple Macbook Neo A3404 A18 Pro 8GB RAM 256GB SSD notebook garanciával hibátlan működés
- 27% - ASUS TUF Gaming X870-PLUS WIFI Alaplap
- AKCIÓ! Philips 223V5LHSB2/00 22 75Hz FHD TN 5ms monitor garanciával hibátlan működéssel
Állásajánlatok
Cég: aiMotive Kft.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest








