Přeskočit na hlavní obsah

Příspěvky

Zobrazují se příspěvky se štítkem knihovny

Expanze proměnných – neobjevujte kolo

Možná jste už někdy řešili problém, jak nahradit proměnné jejich hodnotou třeba v konfiguračním souboru. Například ze vstupu <app-config baseDir="${projectDirectory}"> <timeout>${timeout}</timeout> </app-config> chceme ve výsledku dostat <app-config baseDir="C:\Projects\MyApp"> <timeout>30</timeout> </app-config> Asi vás napadne využít String.replaceAll(String, String) nebo v lepším případě přímo dvojice Pattern / Matcher a capturing groups . Proč ale znovu vymýšlet kolo, když knihovna Apache Commons Lang (která by mimochodem měla být standardní součástí každého netriviálního projektu) nabízí pro daný problém přesně ty třídy, které potřebujeme. Výchozím bodem je třída StrSubstitutor , která obsahuje i statické metody pro zjednodušení v nejpoužívanějších případech: Map<String, Object> properties = new HashMap<String, Object>(); properties.put("animal", "dog"); properties.put(...

Počítáme v Javě (od sčítání k nelineárnímu modelování)

Tento záznam měl původně obsahovat jen malý komentář ke knihovně Math z Apache commons, ale trochu se to psaní rozjelo. Doufám, že vás to neodradí. Začínáme počítat Většina programátorů v Javě asi umí pracovat s čísly a dokáže si dobře spočítat, co by měl jejich program dělat. Jestli to potom opravdu dělá je věc druhá. Člověk si při učení Javy většinou začíná hrát s jednoduchými operátory ( + - * / % ) a primitivními typy ( int, double ), po čase začne zkracovat ( ++ *= ...), sem tam použije bitové operace ( | & ~ << >> >>> ) a už se mu zdá, že je za vodou. Ale pak narazí na problémy. Další level Třeba taková nevinná konstrukce dělení. Žádné neukončené desetiné rozvoje nebo nedejbože dělení nulou. double ctvrtina = 1 / 4; System.out.println(ctvrtina); //0.0 WTF? Stačí zapomenout, že výsledkem dělení celých čísel je opět celé číslo a máme oheň na střeše. Další nástrahy se skrývají v číslech s plovoucí desetinou čárkou a s tím související nutností ne...

Acegi - logujeme loginy

Používáte-li pro správu přístupu k vaší webové aplikaci framework Acegi, možná se vám bude hodit zaznamenávat uživatelské přístupy (platné loginy) někam do databáze. Zde je jeden ze způsobů jak se s tímto problémem vypořádat. Následující přiklad používá Hibernate a databázi Oracle. Nejdříve si připravím vlastní metodu pro zápis do databáze v DAO . Umístím ji do třídy cz.mujpackage.dao.UserDao , která rozšiřuje org.springframework.orm.hibernate3.support.HibernateDaoSupport a poskytuje metody pro správu uživatelů, rolí, apod. Pro zvýšení výkonu použiji v Hibernate SQLQuery namísto vytváření instance třídy modelu a jejího ukládání pomocí metody save(...) . /** * Adds log entry to table AUTH_LOG (Oracle database form - pk_sequence has to be configured) * @param aName username * @param aRemoteAddress remote address of request */ public void logAuthenticationSuccess(final String aName, final String aRemoteAddress) { final HibernateCallback callback = new HibernateCallback() { publ...

Jak na Excel 5 - knihovna JExcelApi

Konečně se v našem seriálu dostáváme k čistě javovým implemtacím Excelového formátu. Začneme knihovnou Java Excel API (JExcelApi) , kterou vytvořil Andy Khan a uvolnil pod licencí GNU LGPL. Co tato knihovna umí zajímavého? vytváření a čtení XLS souborů formátování buněk práci se vzorci vkládání PNG obrázků kopírování grafů (vytváření nových podporováno není) Knihovna není nijak rozsáhlá, takže se dá v API pohodlně orientovat. Zajímavější pro vás může být informace, co mi na této knihovně vadí. Tady jsou mé připomínky: odlišný přístup k dokumentům při čtení a při zápisu (třídy Workbook a WritableWorkbook nemají ani společný interface) práce s čisly podporuje pouze typ double, osobně bych uvítal např. i BigDecimal chybí jakákoliv podpora pro makra (ani při kopírování nezůstanou zachována) nepodporuje automatickou šířku sloupce (Auto Fit Selection) nelze nastavit typ buňky (viz příklad - vložím vzorec jehož výsledkem je text, ale JExcelApi si při čtení myslí, že to je čí...

Jak na Excel 3 - DCOM

V třetím díle seriálu o práci s Excelem v Javě si popíšeme přístup přes DCOM bez využití JNI. Tento způsob práce se hodí v případě, kdy potřebujete úplnou funkcionalitu Excelu, ale vaše aplikace neběží na počítači kde by byl Excel nainstalovaný. Přístup je velice obdobný tomu, co jsme si ukázali v druhém díle seriálu — tedy využití COM přes JNI. Opět existují implementace pomocí zástupných objektů (komerční J-Integra , WebLogic jCOM ) i pomocí volání IDispatch (opensource J-Interop ). Výhoda přístupu přes DCOM spočívá v tom, že vaše java aplikace nemusí běžet na windows a nevyužívá nativní knihovny (je zachována platformová nezávislost). Na druhou stranu vám díky síťové komunikaci může výrazně klesnout výkon. DCOM přístup je také náročnější na nastavení na straně windows serveru (vzálený přístup k DCOM nebývá ve výchozím nastavení povolený). Další problém nastane se sdílením souborů, když chcete číst nebo zapisovat XLS soubor windows server na něj musí vidět (cesty k souboru ...

Jak na Excel 2 - Automation a JNI

První metoda pro práci s Excelem v Javě, kterou si v seriálu ukážeme je využití MS Automation. To znamená že budeme s Excelem pracovat stejným způsobem jako při psaní skriptů ve windows (viz Windows Scripting ). To sice přináší největší funkcionalitu, ale na druhé straně spoustu omezení spočívající v předpokladech, které musí aplikace splnit. Tuto metodu doporučuji pouze v případě, že chcete používat funkcionalitu, které se nedá docílit použitím jiných metod (viz Jak na Excel 1) - například spouštění maker. Co budeme muset splnit pro využití této metody? naše Java aplikace musí běžet na stroji s Windows, kde musí být nainstalovaný Excel musíme mít Java-COM bridge, t.j. nástroj který nám umožní v Javě pracovat s COM objekty, většinou nějakou knihovnu volající přes JNI funkce z MS Windows Existuje několik open source knihoven implementujících Java-COM bridge. Tyto knihovny pracují v některém ze dvou základních režimů (některé zvládají oba). První typ přístupu využívá vygenerovan...