JTechLog szösszenetek
Vége

A Tumblr megbízhatatlan működése és gyermekbetegségei miatt befejezem a használatát. A teljes tartalmat átmigráltam a Blogger-re, és ott folytatom. Megtalálható a http://jtechlogext.blogspot.com/ címen.

MySQL ip cím szabályozás

Ha szabályozni akarjuk, hogy melyik felhasználó milyen ip címről jöhet be, akkor a user táblában kell a host mező tartalmát átírni az adott felhasználónál. Hasznos parancsok:

show databases; // Megmutatja, milyen adatbázisok vannak

connect mysql; // MySQL adatbázishoz csatlakozás

update user set host = ‘172.168.0.1’ where user = ‘foouser’; // Adott felhasználó csak a megadott ip címről jelentkezhet be

flush previleges; // A beállítások érvényre juttatása

Nekem az utolsó parancs hibát dobott:

The FLUSH PRIVILEGES command had an error:
ERROR 1146 (42S02): Table ‘mysql.servers’ doesn’t exist

Ez olyankor történhet, ha egy adatbázis frissítés során nem lett létrehozva a mysql.servers tábla. Ekkor létre kell hozni azt.

Nem csak a bejelentkezéshez lehet host-ot megadni. A jogosultságok a következő táblák alapján, a következő precedencia szerint kerülnek meghatározásra: USER, DB/HOST, TABLES_PRIV, COLUMNS_PRIV. Mindegyik tartalmaz host mezőt.

A táblák update-elgetése, majd a flush kiadása helyett használhatjuk a GRANT parancsokat is.

A jogosultságokról egy remek cikk is ír.

Azonban javaslok valamilyen adminisztrációs eszközt, ahol ezeket grafikus felületen lehet megadni.

Szabolcs játszott a vonalkód nyomtatóval.

Szabolcs játszott a vonalkód nyomtatóval.

Spring MVC String null-ként

Amennyiben azt akarjuk, hogy a Spring MVC űrlap esetén, ha nem töltünk ki egy beviteli mezőt, ne üres String-et (“”), hanem null-t állítson be a megfelelő form objektum attribútumának, a StringTrimmerEditor-t kell használnunk.

@InitBinder
public void initBinder(WebDataBinder binder) {
  binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
IBM WebSphere MQ bekötése Nagios-ba

Ahhoz, hogy bekössük az MQ-t a Nagios-ba, egy plugin-t kell választatnunk a Nagios Exchange-ről, vagy egy sajátot implementálnunk.

Sokat szenvedtünk a PERL-esekkel, de addig sikerült eljutni, hogy ki-timeout-olt a plugin, és a hibaüzenet: Unexpected error.

Végül a Java-s check_mq IBM WebSphere MQSeries Queues Monitor mellett döntöttünk. Ez egy egyszerű JAR (mq-utils.jar), mely tartalmazza az összes szükséges osztályt (az MQ jar-jaiból átemelve), így nem kell a függőségekkel sem foglalkozni.

Gyakorlatilag képes visszaadni egy sorban lévő üzenetek számát, melyhez warning és error riasztási szintet lehet definiálni. A használata magáért beszél:

java -jar mq-utils.jar [qmgr] [port] [mqServerName] [channelName] [queueName] {-w [warning threshold]} {-c [critical threshold]} {-debug}

Ehhez persze kell Java a gépre, ahol fut. Viszont, mivel képes hálózaton is csatlakozni, tehetjük arra a gépre, ahol a Nagios van, és arra a gépre is, ahol az MQ.

Java Product Versioning

A Java Product Versioning, mely a JDK része, írja le, hogy hogyan lehet a különböző csomagokat verziózni.

Ezen információkat a META-INF/MANIFEST.MF állományban kell megadni. A csomagokra vonatkozó információkat üres sorral kell egymástól elválasztani.

Pl:

Manifest-version: 1.0

Name: java/util/
Specification-Title: "Java Utility Classes"
Specification-Version: "1.2"
Specification-Vendor: "Sun Microsystems Inc.".
Package-Title: "java.util"
Package-Version: "build57"
Package-Vendor: "Sun Microsystems. Inc." 

Utána ezt le is lehet kérdezni a Package osztály metódusaival, pl.:

package java.util;

public class Test {
  public static void main(String[] args) {
    System.out.println(Test.class.getPackage().getSpecificationTitle() );
  }
}

A különleges az egészben, hogy ez kicsomagolva nem működik, kizárólag JAR-ból futtatva, valamint nem működik WAR állományoknál sem, bárhova is tesztem a MANIFEST.MF-et.

Subversion revision number

Ha azt akarjuk, hogy egy állományban a checkout-olt revision number-je is jelenjen meg, ahhoz két dolgot kell tenni. Egyrészt az állományban vegyük fel a $Rev$ szöveget, majd állítsuk be az svn:keywords property-t, melynek értéke legyen Rev. Ezt pl. megtehetjük TortoiseSVN-nel is, az adott fájlon Properties menüpont, majd New…, és ott kell felvenni. Itt egyrészt legördülőből kiválaszthatjuk az előre definiáltakat (pl. svn:keywords), valamint egy kis súgót is kapunk róluk, hogy miket lehet értékként beírni.

Oracle distinct vagy union b/clob esetén

Abban akár distinct, akár union műveletet akarunk használni úgy, hogy az eredményhalmazban b/clob van, a következő hibaüzenetet kapjuk:

inconsistent datatypes: expected - got CLOB

Ilyenkor valami kerülőmegoldást kell alkalmaznunk. Persze karakterré konvertálhatjuk a clob-ot, pl. a to_char függvénnyel, de ekkor az első 4000 karakterét fogja venni. Jobb megoldás, ha a distinct műveletet egy belső select-ben végezzük el, és ennek eredménye alapján a külső select-ben lekérdezzük az összes mezőt, a b/clob-ot is beleértve.

Oracle szekvencia növelés

Az Oracle szekvencia aktuális értékét nem lehet direkt módosítani. Jó trükk, hogy átállítjuk, hogy mennyivel növekedjen, utána kérünk egy következő szekvenciát, majd visszaállítjuk. Pl.:

alter sequence seq_name
increment by 124;

select seq_name.nextval from dual;

alter sequence seq_name
increment by 1;
JExcelAPI dátum formátum

A JExcelAPI 2.6.11 egy dátum formátumú mező értékét Linux-on 31/01/2010 formátumban adta vissza, Windows-on 2010.01.31. formátumban. Az eltérések persze a nyelvi beállításokban voltak.

Próbáltam, hogy a getWorkbook() metódusnak adtam át WorkbookSetting paramétert. Annak van egy Locale attribútuma. Ezt, ha nem adunk meg paramétert, a Locale.getDefault() alapján állítja be, amúgy a jxl.lang és jxl.country rendszerparaméterek alapján. Azonban bárhogy is állítottam ezt, nem vette figyelembe a fent említett mezőnél.

Azonban, ha globálisan állítottam át a nyelvi beállításokat, akkor működött. Ehhez ezeket a paramétereket kell a JVM-nek átadni:

-Duser.language=hu -Duser.country=HU