Child pages
  • Tippek
Skip to end of metadata
Go to start of metadata

Tippek, trükkök, praktikák a Java világából.

Sonar metrikák
Aki használ Sonar http://www.sonarsource.com/-t (illetve mostanában már SonarQube http://www.sonarqube.org a neve, mert lett egy támogatott és egy közösségi kiadás belőle), annak ismerős lehet a magas számosságú Magic number http://en.wikipedia.org/wiki/Magic_number_(programming)#Unnamed_numerical_constants (jobban mondva Unnamed numerical constants) bejegyzés, mint Minor súlyosságú hiba. A Magic number – mint programozástechnikai hiba – elismert és létező jelenség,…
Nexus nagytakarítás
Aki Sonatype Nexus http://www.sonatype.org/nexus/-t használ a build szerverén, mint Maven repository, azzal a bosszantó problémával szembesül egy idő után, hogy a sonatype-work könyvtár egyre több helyet foglal el. Ennek alapvetően két oka van: A saját termékünk kiadásait (releases) és munkapéldányait (snapshots) tartjuk itt a végtelenségig A proxy repository helyi gyorstárként funkcionálva letölti a távoli szerverekről az igényelt Maven artifact fájlokat,…
There are many articles out there dealing with the accessor and mutator methods (getters and setters). They came together with the Object-Oriented principles. Information hiding says that the internal state of an object must be hidden from the outer world. That is, the fields it uses shouldn't be available. Yet, sometimes we have to query the state of the object, and even may want to change that state.…
Röviden arról szeretnék beszélni, vagyis egész pontosan egy általam írt blogot prezentálni, melyben a "webkit"-et támogató mobil telefonokat tudjuk programozni a java nyelv segítségével. Erre nyújt többek közt lehetőséget, a "gwt for mobile(mgwt)" technológia is. Egy rövid példán/leíráson keresztül nézzük meg, mi is ez, hogy is működik ez a mostanában kifejlődő  irányzat. http://lehelsipos.blogspot.com/2012/10/mgwt-reading-data-from-xml-file-on.html http://lehelsipos.blogspot.…
Google Web Toolkit (GWT) is a development toolkit for building and optimizing complex browser-based applications. https://developers.google.com/web-toolkit/ https://developers.google.com/web-toolkit/ You write your code in Java language and the GWT compiler will produce to you the client side javascript(/ajax) and html files. There are lot of additional java libraries which you can use to improve your GWT application for free: http://code.google.com/p/gwt-google-apis/downloads/list http://code.…
NIO.2 fájlműveletek
A Java7 megjelenését megelőzően nagy várakozás övezte a NIO.2 újdonságait, aztán elmúlt a hype. Ennek oka valószínűleg az lehet, hogy a Java jelenleg két erős területén – az Android és a Java EE platformon – nincs igazán szükség a fájlműveletek támogatására. Az Android esetén megtűrt dolognak számít a fájlrendszer, az SQLite alapú tárterület a támogatott; Java EE esetén pedig deklaráltan nem alapozunk a fájlrendszerre.…
Egy ideje elérhető az OpenShift PaaS http://en.wikipedia.org/wiki/Platform_as_a_service lehetőség a RedHat oldalain, amelyet ingyen ki lehet próbálni: https://openshift.redhat.com https://openshift.redhat.com A regisztráció után egy pár lépésből álló varázslóval ki tudjuk választani a nekünk szükséges szolgáltatásokat: image2012-7-5 21:11:43.png Hozzuk létre a szolgáltatásunk domain nevét: image2012-7-5 21:21:2.…
Ha használunk Sonatype Nexus http://www.sonatype.org/nexus/-t abból a célból, hogy a Maven alapú csomagjainkat biztos helyen tartsuk, akkor nem árt időnként ránézni a repository méretére, mert alapból a -SNAPSHOT csomagok nem törlődnek, így intenzív használat esetén a sonatype-work mérete az egekbe szökhet, mivel csak gyűlnek a feltöltött csomagok, amelyek közül általában csak az utolsót használjuk.…
Java7 - Fork és Join
A Java 5 hozott néhány újdonságot a párhuzamos programozás terén, a Java 7 további könnyítéseket tartalmaz, amelyek közül az egyiket Fork/Join http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html néven találjuk meg a dokumentációt böngészve, s a megoldás használatához csak három osztályt kell megismernünk: RecursiveAction http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/RecursiveAction.html – visszatérési érték nélküli feladat RecursiveTask http://docs.oracle.…
Java7 - java.util.Objects
A Java7 egyik csendes újítása a java.util.Objects http://hg.openjdk.java.net/jdk7/build/jdk/file/9b8c96f96a0f/src/share/classes/java/util/Objects.java osztály, amely közel tucatnyi statikus metódust ad az objektumok kezeléséhez, amely metódusok egy része nem esik zavarba, ha null értéket kap. Az Objects tipikus esete utility osztályoknak, final módosítóval van ellátva, illetve van egy privát konstruktora is: private Objects() { throw new AssertionError("No java.util.Objects instances for you!…
A JPA első kiadása nem tartalmazta a Hibernate felhasználói között népszerű Criteria lekérdezést, amely – kisebb változtatásokkal – része lett a JPA 2.0 specifikációnak. A CriteriaQuery http://docs.oracle.com/javaee/6/api/javax/persistence/criteria/CriteriaQuery.html nagyon jól használható olyan lekérdezésekhez, amelyeknél paraméterből jön a szűrni kívánt mező, vagy a rendezendő oszlop. Az egyetlen probléma a végrehajtott JPQL/SQL lekérdezése,…
Ritkán előforduló feladat egy fájl vagy egyéb stream tartalmából MD5 ellenőrző összeget készíteni, ám viszonylag hamar meg lehet találni a jó megoldást (a try-catch blokkot mindenki képzelje a forráskód köré): MessageDigest checksum; checksum = MessageDigest.getInstance("MD5"); byte[] buf = new byte[1024]; FileInputStream fis = new FileInputStream(file); while (true) { int len = fis.read(buf, 0, buf.…
Érdekes "hibába" futottam bele minap, mégpedig egy nem várt NullPointerException keletkezett egy switch utasításban, amely kissé váratlanul ért... Tekintsük meg az alábbi rövid ki programot: public class SwitchEnumTest { public static void main(String[] args) { Enum testEnum = null; switch (testEnum) { case ONE: System.out.println("ONE"); break; case TWO: System.out.println("TWO"); break; default: System.out.println("other"); } } public enum Enum { ONE, TWO,…
...avagy a jó, a rossz és a csúf. A közös tulajdonságuk egyszerű, implementálják a Map interfészt, s kulcs-érték mentén tárolnak adatokat, illetve a hatékony működést a kulcs hash értéke alapján végzik. Mi a különbség a HashMap, a TreeMap és a Hashtable között? A legelső implementáció a Hashtable, amely az 1.0 óta van jelen a Java nyelvben, mondhatni együtt nőtt fel vele. Manapság eléggé mellőzött szerepe van, szinte alig találkozunk a Hashtable alapon szervezett tárolókkal,…
A JPA implementációk (és elődjük - a Hibernate) nagyon sok felesleges munkát levettek az ember válláról, s az egyszerűbb ORM műveletek mellé idővel - az adatbázisokkal való munka során felmerült problémák megoldásaként - egyre több eszköz került. Ilyen eszköz az Entity és/vagy Query Cache, amely a már beolvasott entitást adta vissza az adatbázishoz való kérdés nélkül, illetve a már lefuttatott kérdésre az adatbázisból egyszer már elkért halmazt adta vissza ugyanilyen módon.…
Fejlesztői beszélgetéseken sokszor előkerül, hogy időmérésre a Calendar használata kerülendő, mivel túl sok erőforrást igényel a példányosítás, illetve a használata. A fejlesztők ebből az okból jobban szeretik a System osztály currentTimeMillis metódusát használni, amely egyszerű UNIX időbélyeget ad vissza. A tesztelés egyszerű, mérjünk meg, hogy az egyes módszerek mennyi időt vesznek el a program életéből. A mérési keretrendszer egyszerű,…
ThreadInfo lekérdezése
A Java 6 megjelenésével több belső információhoz férhetünk hozzá futásidőben, amelyek közül érdekes lehet lekérdezni a szálak adatait, beleértve olyan metrikát, mint a felhasznált CPU idő. A titok a ManagementFactory statikus metódusai körül van, innen tudjuk lekérdezni a ThreadMXBean példányt, amelyből le tudjuk kérdezni az éppen létező szálak adatait: ThreadMXBean threads = ManagementFactory.getThreadMXBean(); ThreadInfo[] threadInfos = threads.getThreadInfo(threads.…
OpenOffice integráció
Aki már próbálkozott OpenOffice integrációval, annak hasznos lehet az ODFToolKit ismerete, mivel ehhez nem kell telepített OpenOffice a gépre, hanem az ODF szabvány ismeretében - némi XPath és XML tudással - képesek vagyunk olvasni és írni az OpenOffice által használt dokumentumokat. Az http://odftoolkit.org http://odftoolkit.org oldalon egész szerteágazó eszközkészlettel találkozunk, nézzük meg közelebbről az ODFDOM csomagot. Az ODFToolKit alapja az ODFDOM,…
Római számok
Ritkán van szükség római számok használatára, legtöbbünk soha nem is találkozik azzal a helyzettel, amikor a feladat egy olyan programot írását követeli meg, amely az arab számainkat római számmá alakítja. Nézzünk meg egy elegáns megoldást. public class Main { public static final int[] NUMBERS = new int[] { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; public static final String[] LETTERS = new String[] { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV",…
Java 6 - Queue és Stack
A Java 6 nyelvi elemekben nem hozott akkora ugrást, mint a Java 5, de jelentősen bővült a felhasználható eszközök száma, sok új osztály került a java.util csomagba, ilyen a Deque http://java.sun.com/javase/6/docs/api/java/util/Deque.html osztály is, amelynek a neve "Double Ended QUEue" kifejezésből származik. Ez azt jelenti, hogy a Deque példányt használhatjuk queue és stack üzemmódban is. Csapjunk a közepébe, és nézzük az alábbi programot: import java.util.ArrayDeque; import java.util.…
ThreadInfo lekérdezése
A Java 6 megjelenésével több belső információhoz férhetünk hozzá futásidőben, amelyek közül érdekes lehet lekérdezni a szálak adatait, beleértve olyan metrikát, mint a felhasznált CPU idő. A titok a ManagementFactory statikus metódusai körül van, innen tudjuk lekérdezni a ThreadMXBean példányt, amelyből le tudjuk kérdezni az éppen létező szálak adatait: ThreadMXBean threads = ManagementFactory.getThreadMXBean(); ThreadInfo[] threadInfos = threads.getThreadInfo(threads.…
Gyenge referencia
A java egy régi (1.2-es verziója óta létező) de kevéssé ismert részéhez tartozik a gyenge referencia. Igaz alkalmazási területe is elég szűk, de ha tudjuk, hogy léteznek és mire jók, a megfelelő időben előhúzva a zsebünkből nagyon hasznos tud lenni a java.lang.ref csomag. Ha egy mondatban össze kellene foglalni mi is az a gyenge referencia akkor úgy írnám le, hogy olyan hivatkozás egy objektumra, ami nem akadályozza meg a szemétgyűjtőt (garbage collector),…
A synchronized mítosz
Java programozók körében elterjedt tévhit, hogy a synchronized módosítóval ellátott metódusok vagy blokkok által bezárt programsorokat csak egy szál futtathatja egy időben. A valóság az, hogy a kérdéses osztály példányaira vonatkozik a synchronized, ha az osztályból van kettő példányunk, amelyek egy közös static változót használnának, akkor mit sem ér a synchronized... Hogy ne a levegőbe beszéljek, nézzünk egy konkrét példát, vegyünk például egy osztályt,…
Minden programozási nyelven vannak olyan trükkök, amelyek a nyelv határait feszegetik, vagyis teljesen legális nyelvi eszközökkel érnek el meglepő viselkedést. Ilyen lehet egy olyan rövid program, amely kiírja a klasszikus "Hello, World!" szöveget, de nincs benne main metódus, ahol ezt megtennénk. Mégis lehetséges... A megoldás egyszerű, a ritkán használt statikus inicializátor blokkba kell tennünk a "Hello, World!" kiírást. Ez a blokk akkor hajtódik végre egyszer,…
Polimorfizmus mítoszok
Az objektum orientált programozás terjedésével a monolitikus programokban hívők egyik nagy ellenérve az öröklődéssel és a polimorfizmussal kapcsolatban a túlzott erőforrásigény volt. A JavaSpecialist http://www.javaspecialists.eu/archive/Issue157.html blog gazdája készített egy mérést, amely alapján mi is készítettünk méréseket, amelyek meglepő eredménnyel zárultak. Egészséges Java öntudattal az ember azt kell gondolja,…

 

      
      
Page viewed times
  • No labels