sobota, marca 28, 2009

StringMaker

public class StringMaker {
private ArrayList<string> strings = new ArrayList<string>();

public StringMaker append(Object p) {
strings.add(String.valueOf(p));
return this;
}

public String toString() {
int cnt=0, p=0, l=0;
for (String s : strings) {
cnt +=s.length();
}
char[] value = new char[cnt];
for (String s : strings) {
l = s.length();
s.getChars(0, l, value, p);
p+=l;
}
return new String(value);
}
}

public class Test1 {

private final static String S = "private ArrayList<String> strings = new ArrayList<String>()";

public long[] test1() {
Random r = new Random(System.currentTimeMillis());
StringMaker sm = new StringMaker();
long t1 = System.currentTimeMillis();
for (int i=0; i < 100000; i++) {
sm.append(S.substring(r.nextInt(40)));
}
String result = sm.toString();
long t2 = System.currentTimeMillis();
return new long[] { t2-t1, result.length() };
}

// test2 - to samo na StringBufferze
// test3 - to samo na StringBuilderze
// test4 - to samo na StringBufferze(4000000)
}

BEA JRockit(R) (build R27.6.0-50_o-100423-1.6.0_05-20080626-2104-linux-ia32, compiled mode):
n=100 test1: 50ms, 3950201 chars
n=100 test2: 77ms, 3949690 chars
n=100 test3: 77ms, 3950259 chars
n=100 test4: 41ms, 3950640 chars

Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing):
n=100 test1: 92ms, 3951062 chars
n=100 test2: 118ms, 3949873 chars
n=100 test3: 118ms, 3950118 chars
n=100 test4: 36ms, 3950035 chars

IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 Linux x86-32 jvmxi3260-20090215_29883 (JIT enabled, AOT enabled):
n=100 test1: 64ms, 3949910 chars
n=100 test2: 70ms, 3950291 chars
n=100 test3: 70ms, 3950410 chars
n=100 test4: 31ms, 3949690 chars

piątek, marca 27, 2009

Przerzutki do JRockita

JROCKIT_OPS="-XX:aggressive:memory -XXallocClearChunks=true -XXallocClearChunkSize=32m -XXallocPrefetch -XlargePages -XXtlaSize:min=256K,preferred=256K -XXlargeObjectLimit=256K -XXusePointerMatrix -XXpointerMatrixLinearSeekDistance:15 -XXcompactRatio:30"

JROCKIT_RT_OPS="-Xgcprio:deterministic -XpauseTarget=10ms"

wtorek, marca 24, 2009

Uściślijmy pojęcia

Service Oriented Architecture - architektura zorientowana na usługi. Wzorzec architektoniczny/projektowy, który zakłada, że mamy zestaw atomowych (realizujących minimalną niepodzielną funkcjonalność) serwisów, na podstawie których budujemy dalsze serwisy wyższego poziomu (Composite Applications). W pewnym momencie (kiedy mamy już wystarczającą ilość atomowych serwisów) możemy za pomocą paru kliknięć tworzyć nowe serwisy kompozytowe realizujące nową funkcjonalność biznesową. Dzięki dobrze zaprojektowanej i wdrożonej architekturze SOA firma może być agilna (Enterprise 2.0). SOA nie da się kupić (samo kupienie platformy integracyjnej nie jest kupieniem SOA), SOA trzeba zaprojektować. Można mieć platformę integracyjną i źle zaprojektowane środowisko i w rezultacie nie mieć SOA. Pomocą w implementacji SOA może być ESB.

ESB - Kolejny koncept/wzorzec architektoniczny/projektowy, który mówi, że do platformy integracyjnej za pomocą rozmaitych adapterów/klientów może podłączyć się dowolny system i platforma może podłączyć się do dowolnego systemu, natomiast usługi wewnątrz platformy (szyny) używają komunikacji natywnej (historycznie jest to JMS). Usługi wewnątrz platformy integracyjnej są niezależne od transportu. ESB ustandaryzował Sun wprowadzając JBI i wydzielając:
  • Service Engine (usługa typu adapterowego udostępniana przez oprogramowanie ESB)
  • Binding Component (usługa tłumacząca dane między różnymi transportami/formatami z którą komunikuje się Normalized Message Router).
ESB przydaje się w heterogenicznych środowiskach, w których naprawdę mamy wiele różnych systemów i technologii (Oracle, MSSQL, EJB, JMS, WS). ESB to nie SOA (ESB może być tylko sposobem na wdrożenie SOA).

niedziela, marca 22, 2009

OpenESB może działać ze sterownikami JDBC Oracle

Trzeba tylko nad tym trochę posiedzieć. Działa generacja WSDL-i dla operacji select, insert, update, delete, wywołania funkcji {? = call funkcja}.



A nie naprawili tego tylko dlatego, że w JCAPSie mają oemowy sterownik DataDirect.

sobota, marca 21, 2009

Cloud Computing wg Sun-a

Sun ma fajny pomysł na chmurę. W kontenerach solarisowych stworzonych z szablonu dostępny może być Apache, MySQL, GlassFish, Ruby. Instancji kontenerów może być kilka i mogą być połączone wewnętrzną siecią. Dostęp do serwisów w kontenerach realizowany jest poprzez NAT (jeden publiczny adres IP + firewall). Wersjonowanie projektów zapewnia Mercurial. Backup jest na ZFS-ie. Na razie Kenai hostuje tylko sunowe projekty.

środa, marca 18, 2009

IBM chce kupić Sun-a

Takie przejęcia bynajmniej są możliwe, vide: Oracle i BEA. Co IBM by zrobił z Solarisem i JCAPSem?

Statystyki SVN

svn log -v --xml ../projects/projekt > log_projektu.log;
java -jar ../statsvn.jar log_projektu.log ../projects/projekt



Narzędzie jest darmowe z SourceSorge'a, potrafi wizualizować parę fajnych rzeczy. Przydaje się zaganianemu kierownikowi projektu w sprawdzeniu, co robią jego deweloperzy.

CruiseControl

Narzędzie do ciągłej integracji: pobiera projekt z SVN-a, kompiluje, zapuszcza testy JUnit, buduje jar-y.



Jak naprościej zacząć? Ściągnąć binarną dystrybucję, w katalogu projects wycheckoutować swój projekt z SVN-a i stworzyć plik build.xml (przykładowa zawartość poniżej):

<project name="wppm3" default="all">
<path id="classpath">
<fileset dir="lib">
<include name="util/junit.jar"/>
<include name="jdom/jdom.jar"/>
<include name="jdom/xstream.jar"/>
<include name="jdom/commons-jxpath-1.3.jar"/>
<include name="weblogic/weblogic.jar"/>
<include name="weblogic/wl-extra.jar"/>
<include name="weblogic/wlclient.jar"/>
<include name="weblogic/wls-api.jar"/>
<include name="weblogic/wljmsclient.jar"/>
<include name="weblogic/javax.servlet_1.0.0.0_2-5.jar"/>
<include name="xerces/xerces.jar"/>
<include name="oracle/xmlparserv2.jar"/>
<include name="oracle/xdb.jar"/>
<include name="oracle/ojdbc14.jar"/>
<include name="oracle/orai18n.jar"/>
<include name="castor/castor-1.0.3.jar"/>
<include name="castor/castor-1.0.3-xml.jar"/>
<include name="Microsoft SQL Server 2005 JDBC Driver/sqljdbc_1.0/enu/sqljdbc.jar" />
</fileset>
</path>

<target name="all" depends="clean, compile, sleep, test, jar"/>

<target name="clean">
<delete dir="target" quiet="true" />
</target>

<target name="compile">
<exec executable="svn">
<arg line="up"/>
</exec>

<mkdir dir="target/classes"/>
<javac srcdir="src" destdir="target/classes">
<classpath refid="classpath"/>
</javac>
</target>

<target name="sleep">
<echo message="Sleeping for a while so you can see the build in the new dashboard" />
<sleep seconds="10" />
</target>

<target name="test" depends="compile">
<mkdir dir="target/test-results"/>
<junit haltonfailure="no" printsummary="on">
<classpath>
<pathelement location="target/classes"/>
<pathelement location="target/test-classes"/>
<pathelement location="lib/junit.jar"/>
<pathelement location="lib/util/junit.jar"/>
<pathelement location="lib/jdom/jdom.jar"/>
<pathelement location="lib/jdom/xstream.jar"/>
<pathelement location="lib/jdom/commons-jxpath-1.3.jar"/>
<pathelement location="lib/weblogic/weblogic.jar"/>
<pathelement location="lib/weblogic/wl-extra.jar"/>
<pathelement location="lib/weblogic/wlclient.jar"/>
<pathelement location="lib/weblogic/wls-api.jar"/>
<pathelement location="lib/weblogic/wljmsclient.jar"/>
<pathelement location="lib/weblogic/javax.servlet_1.0.0.0_2-5.jar"/>
<pathelement location="lib/oracle/xmlparserv2.jar"/>
<pathelement location="lib/oracle/xdb.jar"/>
<pathelement location="lib/oracle/ojdbc14.jar"/>
<pathelement location="lib/oracle/orai18n.jar"/>
<pathelement location="lib/castor/castor-1.0.3.jar"/>
<pathelement location="lib/castor/castor-1.0.3-xml.jar"/>
<pathelement location="lib/Microsoft SQL Server 2005 JDBC Driver/sqljdbc_1.0/enu/sqljdbc.jar" />
</classpath>
<formatter type="brief" usefile="false"/>
<formatter type="xml" />
<batchtest todir="target/test-results" >
<fileset dir="target/classes" includes="com/nordea/junit/**/*Test*.class"/>
</batchtest>
</junit>
</target>

<target name="jar" depends="compile">
<jar jarfile="target/wppm3.jar" basedir="target/classes"/>
</target>
</project>

Jeszcze trzeba w konfiguracji narzędzia obok projektu demonstracyjnego dodać ten nasz (a tamten skasować).

wtorek, marca 17, 2009

Jak sprawdzić czy nasz kod działa wewnątrz WebLogic-a

weblogic.kernel.Kernel.isServer() &&
weblogic.kernel.Kernel.isInitialized()

poniedziałek, marca 16, 2009

EUPL

Organizacja Open Source Initiative uznała Licencję publiczną Unii Europejskiej v1.1 za licencję open source. Licencja jest dostępna i ważna w języku polskim. Założenia są podobne do GPLv2, mowa jest o udostępnieniu repozytorium kodu źródłowego w czasie dystrybucji programu (Utworu), zakazie zmiany treści licencji podczas redystrybucji oprogramowania, wygaśnięciu licencji przy naruszeniu jej warunków. Ciekawostką jest możliwość łączenia kodu objętego licencją EUPL z kodem licencjonowanym na warunkach tzw. Licencji Zgodnej (m.in. GPLv2, Eclipse Public Licence 1.o), kiedy to postanowienia Licencji Zgodnej są nadrzędne wobec EUPL dla całości źródeł. EUPL zakłada udostępnienie wszystkich praw dot. własności intelektualnej dla celów korzystania z oprogramowania, jednocześnie zakłada, że kod ma postać 'utworu niedokończonego' i może zawierać błędy, w tym niecelowe naruszenie czyjejś własności intelektualnej. Licencja EUPL może być ograniczania przez prawa państw Unii Europejskiej bez naruszenia licencji jako całości.

czwartek, marca 12, 2009

MS Office 2007 pod Linuksem







Wine 1.1.9 - kawał dobrej roboty.
Z Outlookiem, PowerPointem, Accessem i Visio jest jeszcze problem.