- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
- Samsung Galaxy S26 Ultra - fontossági sorrend
- Samsung Galaxy A52s 5G - jó S-tehetség
- Vivo X200 Pro - a kétszázát!
- Okosóra és okoskiegészítő topik
- Rég várt frissítést kap az Android tárcsázója
- Poco F8 Ultra – forrónaci
- iPhone topik
- Xiaomi 17 Ultra - jó az optikája
- Apple Watch
- Nagy bemutatóra készül az Oppo
-
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 Tabletek, E-bookok Nyomtatók, szkennerek 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
-
don_peter
senior tag
Nem is biztos a komplex a megfelelő kifejezés, inkább olyanra kell gondolni, ami rendszerszintű feature lenne, ami nem igazán kivitelezhető natív megoldások nélkül. Szóval ha az egész megvalósítható egy böngészőn belül is, akkor sanszosan nem lesz gond. Persze a pontos képhez érdemes megnézni mit támogat a Flutter, mik a célok és az alapján meghozni a döntést. Amit írsz az nem tűnik problémásnak. Persze kis projektnek sem :-)
Igen gyakorlatilag egy böngészőben megvalósítható téma lenne, semmi extra. Legalább is először biztosan nem lesz periféria kezelés. Flutter-t nézegettem, de nem egyértelmű a számomra, még, hogy mind 3 igényt ki tudja e egyszerre elégíteni.
De, akkor ha az eredeti kérdésemet nézzük, java nem lesz alkalmas a feladatra, jól sejtem? Mármint a kereszt platformosítás tekintetében?
-
don_peter
senior tag
Mit jelet a túl komplex megoldás?
Amire szükségem lenne:
Regisztráció
Bejelentkezés, akár közösségi szolgáltatással egybe vonva
Belső email értesítés
SQL adatbázis
jogosultság kezelés
képkezelés
fórum vagy hasonló hirdetéses tevékenység
És az ezekkel járó sallang. Ez weboldal esetén alap, mobil tekintetében nem tudom mennyire alap. -
axioma
veterán
Intellij-ben sout+tab - ha nem tartasz szunetet a t utan - ugyanezt csinalja, sztem lenyelmesebb. Lehet h ctrl-space az altalanosabban megy, azt nem tudom es most epp nincs keznel.
-
TGWH
őstag
Nagyjából írják le melyik mire jó, ezek alapján inkább a Java-t kezdeném el. Sőt, igazából a PHP mysql páros is elég. Annyira bő leírást még nem találtam, akkor beleásom magam a könyvekbe, aztán majd talán tisztul a kép.
Kössz mindenkinek. -
Csaby25
őstag
Akkor sanszosan a szokásos fizzbuzz/fibonacci jellegű feladatokra lehet számítani meg ilyen oldd meg iterációval/rekurzióval. Ha esetleg ennél több energiát fektetnének a dologba, akkor valami saját példa, amiből esetleg kiderül, hogy hogyan állsz hozzá egy feladathoz, hogyan gondolkodsz, ilyesmi.
Én annyit tanácsolok, hogy gondolkodj hangosan és ha a feladatnál értelmezhető, akkor kérj egy teszt esetet (bemenet-kimenet). És hajrá
Ilyesmire gondolsz, hogy például oldjam meg a Fibonacci-t rekurzióval és ciklussal is: ?
public class Fibonacci{
public static void main(String[] args) {
System.out.println(fibonacciRecursion(3));
System.out.println(fibonacciLoop(3));
}
public static int fibonacciRecursion(int n) {
if (n <= 1)
return n;
return fibonacciRecursion(n - 1) + fibonacciRecursion(n - 2);
}
public static int fibonacciLoop(int n) {
int[] arr = new int[n + 1];
for (int i = 0; i < arr.length; i++) {
if (i <= 1)
arr[i] = i;
else
arr[i] = arr[i - 1] + arr[i - 2];
}
return arr[n];
}
} -
sztanozs
veterán
Azt hiszem itt mindenre kitérnek: rewriting history
sajna sokat nem segített, de extenzív gúgölözés után ráakadtam erre:
https://stackoverflow.com/questions/3042437/how-to-change-the-commit-author-for-one-specific-commit/55694507#55694507Köszi mindenkinek a belefektetett időt!
-
btraven
őstag
-
yanpec
senior tag
Azért mert már egyik nagy böngésző sem támogatja őket, halott technológia.
Here are browsers that do not support Java Applet any more:
- Google Chrome
- Firefox
- Safari
- Microsoft Edge
- OperaAz f...a. Akkor kell keresnem valami újabb kiadású könyvet. Köszi.
-
Taoharcos
aktív tag
Ez egy régebben (10+ éve)megírt dll. Biztos nem vírusos. Eddig más programnyelvből (Delphi) lett meghívva, és ott működött jól. Talán annyi tudtam még észrevenni, hogy ha elindítom a saját programomat, és leállítom, majd újraindítom, akkor jön elő, de az bizonytalan, hogy mennyi idő múlva és hányadik újraindításnál. Elvileg a Windows újraindítása után rögtön nem csinálja.
-
btraven
őstag
-
togvau
senior tag
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"Unexpected bound" a Class<T extends AbstractInvoiceEntity> newClass-re.
#11308 az már részletkérdés lenne
mindegyik 0 paraméteres, szóval elég lenne, de a fenti probléma miatt így se, úgy se jó 
-
Drizzt
nagyúr
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 objektumotEn a newClass helyett inkabb Supplier<T>-t hasznalnek. Akkor nem vagy megkotve, hogy csak 0 parameteres konstruktoru osztalyokkal mukodjon.
Az se teljesen vilagos, hogy ez miert egy static method, elso erzesre siman lehetne az AbstractInvoiceEntity-nek egy tagmetodusa.
-
togvau
senior tag
"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.
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
-
togvau
senior tag
"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?
ja itt is az volt, csak erre nem figyelmeztet. Most elindult, csak elérni nem tudom a konténeren kívülről, a 172.17.0.2-t próbálva sem, -p -vel sem. Na mindegy, nem szenvedek vele
-
togvau
senior tag
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?
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. -
fatal`
titán
-
fatal`
titán
-
togvau
senior tag
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.
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);
} -
togvau
senior 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.
-
Taoharcos
aktív tag
Alapból nem kéne külön beállítani, ha tud kapcsolódni, akkor meg tudja határozni. Én első körben arra tippelnék, hogy a kapcsolat se épül fel vagy nincs a db létrehozva, akkor is jöhet ez a hiba. A két db amúgy különböző? Van-e mintakód? Próbáltad-e esetleg valami in-memory db-vel (pl. h2/hsql)?
(#10975) venic
Melyik porton futna? Ha 80-as, akkor a skype esetleg lehet a ludas. De valami hibaüzenet nem ártana
Két különböző db, létre vannak hozva (Oracle és Mssql). Alapból nem szeretném beállítani, két külön alkalmazásban kapcsolódok most a db-khez, ott nem is kell beállítani. Most hogy megpróbáltam egy alkalmazásból kapcsolódni mind a kettőhöz, jött elő a hiba, hogy be kéne állítani a dialect-et.
-
venic
csendes tag
Alapból nem kéne külön beállítani, ha tud kapcsolódni, akkor meg tudja határozni. Én első körben arra tippelnék, hogy a kapcsolat se épül fel vagy nincs a db létrehozva, akkor is jöhet ez a hiba. A két db amúgy különböző? Van-e mintakód? Próbáltad-e esetleg valami in-memory db-vel (pl. h2/hsql)?
(#10975) venic
Melyik porton futna? Ha 80-as, akkor a skype esetleg lehet a ludas. De valami hibaüzenet nem ártana
Köszi a választ.
A jsp-k azok futnak, nincs skype a gépemen
A 80-as porton futna
A két kód teljesen ugyanaz, a db is. Asztali gépen lett megírva a kód ahol teljesen jól működött, aztán meg a laptopon ezt a hibát adta.
XAMPP adatbázissal lett fejlesztve.Hibaüzenet:
HTTP Status 500 – Internal Server Error
Type Exception Report
Message Error instantiating servlet class [login.LoginServlet]
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
javax.servlet.ServletException: Error instantiating servlet class [login.LoginServlet] org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:844)
Root Cause
java.lang.RuntimeException: login.LoginServlet.<init>(LoginServlet.java:1) java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:844)
Note The full stack trace of the root cause is available in the server logs.
Apache Tomcat/9.0.30 -
floatr
veterán
Írnak többmindent is, de ez a válasz, ahol a generált kódot megnézte a válaszoló.
A String osztály java alatt immutable, azaz értékadás után az objektum értéke nem változtatható. E miatt a String összefűzés
String concat = "first" + " " + "last";
4 String objektum létrejöttét jelentené.Erre rakták bele java 8 óta a fordítóba, hogy ahol ilyen található, azt optimalizálja. A String összefűzéseket helyettesíti StringBuilder-rel, ezért nem fog létrejönni annyi String objektum.
Vannak még egyéb String-ekkel kapcsolatos optimalizációk, amiket a fordító/futtató környezet csinál/alkalmaz, pl. a válaszokban említett internal pool, ahol kvázi cache-elve vannak String objektum példányok, java 8-as updattel jött a G1 GC-be, hogy tud deduplikálni String-eket. Java 9-ben pedig jött egy olyan, hogy azokat a szövegeket, amiket lehet, ISO-8859-1/Latin-1 kódolással tárolja a JVM UTF-16 helyett (1 vs 2 byte/karakter).
>javap -c Test Compiled from "Test.java" public java.lang.String makinStrings(); Code: 0: ldc #5; //String Fred 2: astore_1 3: new #6; //class java/lang/StringBuilder 6: dup 7: invokespecial #7; //Method java/lang/StringBuilder."<init>":()V 10: aload_1 11: invokevirtual #8; //Method java/lang/StringBuilder.append: (Ljava/lang/String;)Ljava/lang/StringBuilder; 14: ldc #9; //String 47 16: invokevirtual #8; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 19: invokevirtual #10; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; 22: astore_1 23: aload_1 24: iconst_2 25: iconst_5 26: invokevirtual #11; //Method java/lang/String.substring:(II)Ljava/lang/String; 29: astore_1 30: aload_1 31: invokevirtual #12; //Method java/lang/String.toUpperCase:()Ljava/lang/String; 34: astore_1 35: aload_1 36: invokevirtual #13; //Method java/lang/String.toString:()Ljava/lang/String; 39: areturn
A builder egy dolog, de a vége annak is egy új string objektum. A válasz a literálokban van, illetve a String.toString() this-el tér vissza, ott sincsen új objektum.
-
p76
senior tag
Titeket nem zavar ez a Clean Code tudathasadásos állapot?
Clean Code szabály: ne írjunk kommentet, főleg ne Javadocot.
Erre a 2017-ben megjelent Java9-ről szóló könyvben szerepel a hogyan írjunk metódust leírás:
9 sor metódus, 15 sor magyarázattal előtte mit csinál
-
floatr
veterán
"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.Lehet, hogy neked a kontextus neked nem konfiguráció, nekem még mindig az, kezdve a legpitiánerebb dolgokkal, amit változtatni kellene egy production környezetben adott esetben. De ez a jó, hogy különbözőek vagyunk. Amúgy nem fétis, talán észrevetted, hogy egy kombinált megoldást említettem. Szerintem a Java config a típus-fetisiszták fertője
Olvashatóság tekintetében valóban jobb lenne egy JSON vagy YAML context definíció, de amikor kódból maszatol valaki, az agyhalál.A generált kóddal kapcsolatban rettenetesen álszent a hozzáállás. A hibernate és spring által generált 60 tonnányi (cglib, asm, miegymás) kód ok, a lombok @Getter/@Setter nem, hagyjuk már. A kotlin által generált JVM kód megint ok, bár többszörösen megerőszakolja az egész rendszert, de a @NoArgsConstructor/@AllArgsConstructor az csúnyarossz... vicc. Meg lehet nézni, hogy mekkora buglistája van ezeknek a rendszereknek már csak a kódgenerálás okán is, de attól nem félünk

Egy @Builder/@Getter annotáció átláthatatlan az osztály elején, de a húszmillió sornyi extra kód nyilván karbantarthatóbb, ha valami változik... Szerintem az a veszélyes, hogy ezt valaki nem meri használni. Ugyanaz a probléma, mint amikor az 1.5-ös iterációk és enumok tartották rettegésben az említett projektet. -
floatr
veterán
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ő.
-
floatr
veterán
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.
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.

-
#68216320
törölt tag
-
floatr
veterán
Ezt a konstruktoros dolgot azért jól be lehet szippantani sok függőségnél, vagy körkörös függőségeknél.
-
mobal
nagyúr
-
#68216320
törölt tag
DTO: data transfer object
ez lehet bármilyen két komponens közötti kommunikációban szereplőDAO: data access object
ez egy olyan objektum, amin keresztül adatokat érünk el/tudunk manipulálni, általában adatbázissal a túloldalon - az objektum elrejti a DB részleteketrepository:
a DAO-hoz hasonló pattern, inkább domain centrikusabb, az adat objektumokat entity-nek hívjuk ebben az esetben
A rétegek szervezése/szeparálása fontos dolog, nehéz elsőre ráérezni, fog kelleni hozzá némi tapasztalat. Annyit szerintem mindenképp jegyezz meg most, hogy nincs semmi kőbe vésve. Vannak ajánlások, de mindig az adott problémához keressük a megoldást, nem pedig valami "best practice-t" erőszakolunk rá mindenre.Amennyiben egy egyszerű crud a cél, akkor nem is feltétlen szükséges külön entity/dto/pojo-kat készíteni a különböző rétegekhez, mert fölöslegesen kéne transzformálgatni mindent többször is.
Ha a crud-nál tovább lépünk vagy más jellegű a probléma, akkor hasznos lehet különválasztani a rétegeket jobban.Amúgy olvass még kicsit utána funkcionális programozásnak, immutability-nek - java 8 óta java-ban is van hozzá támogatás - szerintem árnyalja majd a képet.
A Spring JavaEE vs sima java témakörben pedig én javaslom a keretrendszer használatát, ha máshoz nem is, de a dependency injection miatt mindenképpen.
Nagyon köszönöm az infokat.
Olvasok a témában. Sokat kell pótolnom, helyretennem.
De ez van, meglesz majd.A Spring Boot használata például akkor erősen javasolt, ugye?
Igazság szerint azért akartam eredetileg csak tiszta JavaSE kódot, hogy az alapokkal tisztában legyek. Lássam azokat a feladatokat/megoldásokat amiket egy framework elfed.
Esetemben nem maga a project elkészítése, hanem a Java gyakorlása a cél.A terv első lépésként egy fapados user/account résszel egy webes view-al megszerkesztett crud-ot tudó felület. Valami termék készlet manager. Mondjuk a fentebb említett "car" készlet kezelése.
Csak amolyan tanulásként. -
batagy
őstag
-
batagy
őstag
Szia!
Igen, azon a linken valóban jól összeszedték a Java licensz tudnivalókat.
De nálunk a cégben (multi) továbbra se tudtam megerősítést kapni rá, hogy pontosan melyik Java verzió az utolsó ingyenes , az üzleti használatra.
8-as Javaból a Java 8 update 201/202 az utolsó ingyenes, mert ez még 2019 januárban (jan 15) jelent meg?
-
Aethelstone
addikt
Egyrészt ez nem legál, másrészt semmi köze a java-hoz.
@(#10258) szbalogh
Nekem úgy tűnik, hogy a UI kirajzolása közben történik valami probléma, ami a kód ismerete nélkül elég sokminden lehet. Nem tudom melyik java verzióval fut jelenleg az alkalmazás, de szerintem próbáljátok meg régebbi java verzióval futtatni.Szerintem a régebbi Java verzió nem old meg semmit. Egyszerűen arról van szó, hogy hibás a programlogika. Ráadásul XP-n futtatják, nem sanszos, hogy mostanság Java verziót emeltek

-
floatr
veterán
"Mert az feltételezem, hogy nem windowsos docker a live.
Akkor inkább már VBox-ban ubuntu/debian és azon docker."Lehet én értem félre, amit írsz, de Windows-ra nincs natív docker. A Docker Toolbox és a Docker for Windows - bár ez próbál natívnak tűnni - is egy virtuális linuxon fut, szóval sok előnye nincs használni egy dedikált linux vm-et, hacsak az embernek nincs szüksége valami linux specifikus eszközre. A local környezet meg soha nem lesz olyan, mint a production, ehhez úgyis illik egy teszt környezet, ami minél jobban közelít a production-höz.
De persze a fejlesztő dolga mit használ.
Persze, teljesítményben nem leszel előrébb, meg nyilván egy dev box sosem lesz olyan mint egy production. Viszont bitre ugyanazt a stacket használhatod, mint ami a kész rendszerben lesz
-
Taoharcos
aktív tag
Én nem állítottam be és nem frissítettem 9-re. De már megoldottam egy primitív megoldással, sts mappa töröl, újra másol.
Egyébként már az Eclipsenél is volt régebben egy hasonló hibám, csak annyira nem használtam az Eclipset és letöröltem. -
G.Zs.
senior tag
A JavaEE egy specifikáció és API gyűjtemény, ami a Java Community Process alkalmazásával fejlődik. Ezekhez az API-khoz készülnek implementációk a specifikációk alapján. Erről egy kis összefoglaló.
A JavaEE technológiákra rengeteg alkalmazás épül és nagyon sok az érdekelt szereplő. A bejelentés után sok a felmerülő kérdés, így érdemes megvárni ki veszi át az Oracle szerepét, valamint lesznek-e változások a fejlesztési/elbírálási folyamatokban. Olvasd el még ezt a cikket a bejelentésről.
Ugy nezki, hogy az Eclipse Foundation veszi at a Java EE-t az Oracle-tol.
EE4J - Eclipse Enterprise for Java -
CJ19
csendes tag
-
Aethelstone
addikt
Kollekciókhoz ezt nézd át, jól összefoglalja a Collections interface-ből származó interface-eket és azok implementációit.
"Ez alatt arra gondolsz, hogy elméletben tanuljam meg először, hogy melyik mit tud, ugye?"
Lényegében, igen
Solid-ra találtam egy magyar összefoglalót érthető példákkal.
GRASP (General responsibility assignment software patterns)
Ezek meg beszédesek különösebb magyarázat nélkül is:
Don't Repeat Yourself (ne legyen kódismétlés)
Keep It Stupid Simple (legyen a kód olyan egyszerű, amennyire lehet)
You Ain't Gonna Need It (ne implementálj semmi olyan funkciót/logikát, amire nincs azonnal szükséged, később sanszosan változni fog az irány/struktúra/akármi és úgy is át kell írni)És ne feledkezzünk meg az OMBM-ről sem, mint a legfontosabb patternek egyike

-
Aethelstone
addikt
A metódusok legyenek rövidek és legyen nekik minél beszédesebb nevük.
Ez a legritkább esetben szokott sikerülni

-
Aethelstone
addikt
A másik diák szerintem pont itt tette fel a kérdést.
Ez nem a másik. Ez a mi barátunk......gáz. Ennyi fórumozás helyett meg is oldhatta volna.
-
emvy
félisten
Java 8 alatt van lehetőség metódus referenciát átadni. Akár az alábbihoz hasonlóan is elindulhatsz:
public class MethodRuntimeChecker {
public static void main(String[] args) {
QuickSorter sorter = new QuickSorter();
int[] array = getNumbers(10_000);
System.out.println(mesureRunTimeNano(sorter::sort, array) + " ns");
System.out.println(mesureRunTimeMilli(sorter::sort, array) + " ms");
}
public static long mesureRunTimeNano(Function<int[], int[]> intSorter, int[] toBeSorted) {
long start = System.nanoTime();
intSorter.apply(toBeSorted);
return System.nanoTime() - start;
}
public static long mesureRunTimeMilli(Function<int[], int[]> intSorter, int[] toBeSorted) {
long start = System.currentTimeMillis();
intSorter.apply(toBeSorted);
return System.currentTimeMillis() - start;
}
private static int[] getNumbers(int count) {
int[] numbers = new int[count];
Random random = new Random();
for (int i = 0; i < count; i++) {
numbers[i] = random.nextInt(count);
}
return numbers;
}
}Ami mondjuk nem valodi methodus referencia, csak nemi syntactic sugar a Function konstruktorok korul, de jah.
-
Aethelstone
addikt
Arra céloztam igen
Meg hogy talán +1 akart lenni, hogy a 0-át, mint random számot kizárja. -
orc88
őstag
Ennyiből ugyan nem látszik mi a hiba, de szerintem az elérési utakkal lehet gond.
Csináltam egy kis minta projectet (maven project), két "kép cserélővel", az egyik a resource mappából szedi a képeket, a másik pedig külső könyvtárból.
Ha nincs jól megadva az elérési út a jelenség az általad is leírttal egyezik. Annyit még változtattam, hogy egységesen kezeljem a két változatot, hogy az ImageIcon-t java.net.URL paraméterrel példányosítom.
Nem tudom, hogy mit befolyásol mert csak 2-3 tanuljuk, de a layoutot null layout-ra állítottam, így rögtön működött.

-
vadasz70
aktív tag
Szerintem egy kicsit bővebben írd le, milyen játék, hol fut (böngésző/applet vagy asztali alkalmazás)? Mit írtál és milyen java console-ba (böngészőnél javascript console elérhető ugyebár)?
Amúgy a gondolatolvasó vénám azt mondatja, hogy Vezérlőpult (nézetnek kis ikonok) -> Java (vagy <java telepítési hely>/javacpl.exe) elindít ott security fül, lentebb állítod a szintet és ha valóban böngészős valamiről van szó, akkor hozzáadod a kivételekhez.
Erről az oldalról lenne szó [link] Online játék főleg yatzy érdekel. De sajnos azt már próbáltam hogy a vezérlőpult,java de a kivételekhez hiába adom hozzá ugyanazt dobja fel hiba üzenetként.
-
Aethelstone
addikt
Persze, mindenképpen. Nem tudom ki illetékes itt ez ügyben.
(#9043) emvy, (#9044) Aethelstone
A környezeti változók állítgatása nem éppen átlagfelhasználói tevékenység, hanem inkább üzemeltetési. Aki ilyen műveleteket akar csinálni, az szerintem nem árt, ha tisztában van a hogyanokkal, különben hamar pórul járhat. Ilyen szinten meg ne akarjon egy telepítő megcsinálni mindent. Vonatkozva jdk-ra és szerintem.Éles környezetben igen, de azért csúf lenne, ha egy Java vagy bármilyen fejlesztő nem lenne tisztában azzal, hogy miként működnek a környezeti változók és fejlesztői környezetben ezek állítgatása fejlesztői feladat. Vonatkoztatva nem csak java-ra

-
emvy
félisten
Azt nem tudom mi az oka, hogy nem rakják bele a path beállítást a jdk telepítőbe, de az lenne a tippem, hogy azért, mert fölösleges. Egy átlag felhasználónak nincs rá szüksége, egy fejlesztő meg úgy alakítja a saját környezetét, ahogy neki tetszik.
A java_home környezeti változó beállítása amúgy is egy kihagyható lépés, azt azért szokás beállítani, hogy ha frissíti az ember a jdk-t, ne kelljen a Path-ben bogarászni, hanem csak a környezeti változót kelljen átírni. IDE-kben, egyéb helyeken is lehet magára a java_home-ra referálni általában, így könnyebben karbantartható.
A masik ok meg az lehet, hogy egyaltalan nem biztos, hogy egy uj kornyezeti valtozo nem kavarna be mas programoknak. Siman lehet, hogy fontos az, hogy ne legyen a JAVA_HOME alapbol beallitva.
-
Cathfaern
nagyúr
Mivel nem írod, hogy pontosan mivel is próbálkozol, a lépések nagyvonalakban:
- JDK telepít
- környezeti változónak beállítod a telepítés helyét:
- pl. JAVA_HOME: C:\Program Files\Java\jdk1.8.0_73
- felveszed a Path környezeti változóhoz a binárisokat:
- pl. %JAVA_HOME%\binProgram:
package cli;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello dude");
}
}Parancssorban megnézed jó-e a java beállítás:
- java -version
> java version "1.8.0_101"
> Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
> Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)Majd compile:
- javac cli\Hello.javaÉs végül a futtatás:
- java cli\Hello
> Hello dudeNem kéne ezt belerakni topic összefoglalóba?
Esetleg mellé tenni pár linket könyvekre / weboldalakra "hogy álljunk neki java-zni" címmel, illetve néhány IDE ajánlás, esetleg felsorolni pár manapság java téren népszerű technológiát (ideértve frameworkot, verziókezelőt, stb.), aminek legalább a nevét célszerű ismerni. Nagyjából úgyis ezek a kérdések szoktak felmerülni, ha nem valami konkrét kérdés van. -
cigam
titán
Mivel nem írod, hogy pontosan mivel is próbálkozol, a lépések nagyvonalakban:
- JDK telepít
- környezeti változónak beállítod a telepítés helyét:
- pl. JAVA_HOME: C:\Program Files\Java\jdk1.8.0_73
- felveszed a Path környezeti változóhoz a binárisokat:
- pl. %JAVA_HOME%\binProgram:
package cli;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello dude");
}
}Parancssorban megnézed jó-e a java beállítás:
- java -version
> java version "1.8.0_101"
> Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
> Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)Majd compile:
- javac cli\Hello.javaÉs végül a futtatás:
- java cli\Hello
> Hello dudeMiért kell ezzel utólag kézzel bindzsiszkedni? Miért nem állítja be a telepítő a környezeti változót, és az elérési útvonalat?
-
eliterob
tag
Mivel nem írod, hogy pontosan mivel is próbálkozol, a lépések nagyvonalakban:
- JDK telepít
- környezeti változónak beállítod a telepítés helyét:
- pl. JAVA_HOME: C:\Program Files\Java\jdk1.8.0_73
- felveszed a Path környezeti változóhoz a binárisokat:
- pl. %JAVA_HOME%\binProgram:
package cli;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello dude");
}
}Parancssorban megnézed jó-e a java beállítás:
- java -version
> java version "1.8.0_101"
> Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
> Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)Majd compile:
- javac cli\Hello.javaÉs végül a futtatás:
- java cli\Hello
> Hello dudeigen jdk telepités megvolt környezeti változokat átirtam ez idáig ok
java parancs és a java version parancs futása is zajlik
és itt a vége a dolgoknak ezért nem értem magát a programot nem futtatja
a javac parancsot nem érti: a rendszer a megadott parancsot nem ismeri fel se külső se belső rendszerként se futtatható programként.. ezt dobja... -
mobal
nagyúr
Lehet csk nekem, de nem egészen egyértelmű. Ez a helper osztály nekem egy service-nek hangzik, aminek van egy vendor dependency-je. A service-nek ezt a dependency-t illene konstruktorban átadni, mivel a funkcionalitásához nélkülözhetetlen (azaz ne is jöjjön létre példány anélkül, hogy működne). Nem tudom milyen az architektúra, de ha Java EE, akkor van context. A service valószínűleg valami singleton bean, amit újra lehet hasznosítani (figyelemmel a szálkezelésre, ha szükséges). Maga a vendor object is egy bean lesz ebben az esetben, amit szintén át lehet adni bárminek, ami igényli.
Ahogy leírtad az igaz, csak ez nem EE. Egy konzolos alkalmazás. Tehát elindul a program, letölti ezt az adatbázist, ha sikerült és nem szál el akkor pedig kipakolja belőle az infót. Ezt a helpert szeretném shared módon elérni - mert több objektum is használná.
Szerk.: most kvázi ez a vendor objektum be van ágyazva a helperembe. Ez lehet így nem lesz jó.

Szerk.: köszi, igazad lesz. Konstruktor.
-
Chesterfield
őstag
Kelleni fog még a jackson-datatype-jsr310 vagy a jackson-datatype-jdk8 modul is a LocalDate-hez.
A json mezőnévnek pedig nincs köze a konstruktor paraméter neveihez, hanem a getterek nevei alapján készülnek. Ha szeretnéd megtartani a getter nevét, viszont más nevet használnál a generált json-ben, akkor használhatod a @JsonProperty annotációt. Arra figyelj, hogy melyik jackson verziót használsz (1.x <-> 2.x).
pl.
public String getSomething()-> mezőnév: something@JsonProperty("somethingelse")-> mezőnév: somethingelse
public String getSomething()Köszi!
A beolvasás már jól működik.
A JSon készítést is meg kell még oldanom listából.ObjectMapper mapper = new ObjectMapper();
try {
String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(belsoLista);
PrintWriter pw = null;
try {
pw = new PrintWriter(new FileWriter(fajlNev));
pw.println(prettyJson);
} catch (IOException ex) {
System.out.printf("Hiba a '%s' fájlba írás közben.", fajlNev);
} finally {
if (pw != null) {
pw.close();
}
}
} catch (JsonProcessingException ex) {
System.out.println(ex.getMessage());
}ezzel nagyjából működik is, de azt még valahogy meg kéne oldanom, hogy a LocalDate-et így írja ki:
"szulDatum": "1981-11-23"ne pedig így:
"szulDatum" : {
"year" : 1981,
"month" : "NOVEMBER",
"chronology" : {
"id" : "ISO",
"calendarType" : "iso8601"
},
"era" : "CE",
"leapYear" : false,
"dayOfMonth" : 23,
"dayOfWeek" : "MONDAY",
"dayOfYear" : 327,
"monthValue" : 11
} -
cigam
titán
-
mobal
nagyúr
-
g@bo
nagyúr
-
Karma
félisten
Ú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 Tabletek, E-bookok Nyomtatók, szkennerek 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?:))
- exHWSW - Értünk mindenhez IS
- Forza sorozat (Horizon/Motorsport)
- Milyen autót vegyek?
- Álláskeresés, interjú, önéletrajz
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Fejhallgató erősítő és DAC topik
- A Linux megnégyszerezte magát a Steamen — a Microsoft ismét ígérget
- BestBuy topik
- Nintendo Switch 2
- Arc Raiders
- További aktív témák...
- 24 magos AMD Threadripper alapú munkára kiváló félgép, 128GB RAM-mal
- HP ZBook Fury 15 G7 i7-10850H 32GB 512GB SSD Quadro T2000 4GB FHD HUN bill, szép állapotban eladó
- Eladó MacBook Pro 16,1 2019 CTO
- új 0 km es garanciás lenovo loq rtx 5050 8gb
- Eladó teljesen újszerű karcmentes Samsung Galaxy Watch Ultra
- Keresünk Galaxy S23/S23+/S23 Ultra/S23 FE
- Intel Core i7-7700K 4.2GHz (8M Cache, up to 4.50 GHz) LGA1151 Processzor
- BESZÁMÍTÁS! Asus B760M i5 13400F 32GB DDR4 1TB SSD RTX 4060Ti 8GB Sharkoon RGB Slider FSP 650W
- Apple iPad 5. generáció (A1822) 128GB, asztroszürke
- HP EliteBook 745 G6 14" Ryzen 5 pro 3500U - 7 pro 3700U - 16GB RAM, SSD, jó akku, számla, 6 hó gar
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest









