Grails – automatically reconnect to MySQL datasource

Well, I’m using Grails for a huge amount of quickly hacked apps.
Most of them use MySQL for persistence, because it just works 馃檪

There is one problem with the driver, though – sometimes, when nothing is happening, it allows the connections to disconnect.
It wasn’t a matter of one option somewhere, unfortunately 馃檨

According to MySQL JDBC driver configuration page, it might be enough to add

autoReconnect=true

to have

    development {
        dataSource {
            dbCreate = "create-drop"
            url = "jdbc:mysql://mysqlhost/database?useUnicode=true&autoReconnect=true"
            username = ""
            password = ""
        }
    }

But it doesn’t solve it ;(
After some searching, cursing and a beer, I’ve ended up with:

dataSource {
    pooled = true
    driverClassName = "com.mysql.jdbc.Driver"
    username = "secret"
    password = "santa"

   properties {
      maxActive = 50
      maxIdle = 25
      minIdle = 1
      initialSize = 1

      numTestsPerEvictionRun = 3
      maxWait = 10000

      testOnBorrow = true
      testWhileIdle = true
      testOnReturn = true

      validationQuery = "select now()"

      minEvictableIdleTimeMillis = 1000 * 60 * 5
      timeBetweenEvictionRunsMillis = 1000 * 60 * 5
   }
}

And this has been good enough to solve my pains. Thank you grails, for making me have problems I wouldn’t otherwise have.
Nice of you to allow me to fix them pretty fast at the same time 馃檪

Sun Certified Java Developer

Today I received a following email:

“Hi Andrzej,
Congratulations! You have passed the Oracle Certified Master, Java SE6 Developer certification. You are among the elite 1% of certified Java professionals who have gone on to achieve the Oracle Certified Master, Java SE6 Developer certification.”

In comparison to the previous exams I took at Sun/Oracle, below was a bit of a change:

You have received a passing score. Passing grades do not receive a score, just the pass.

So card telling me how much luck I had in passing (except for “enough”).

The exam itself was surprisingly lot of fun to do, however without support from Oracle I would fail at problems caused by transition from Prometric to Pearson.

jTDS SQL driver in Glassfish

jtds in glassfish v3

cd /opt/servers/glassfish-3.1.1/glassfish/domains/domain1/lib
ln -s /opt/tools/maven-repo/net/sourceforge/jtds/jtds/1.2.5/jtds-1.2.5.jar

let鈥檚 setup the connection pool in the admin console. Ping works, seems to work?

[#|2011-10-01T20:27:09.078+0200|SEVERE|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=17;_ThreadName=Thread-3;|WebModule[/RTSuiteWeb]StandardWrapper.Throwable
java.lang.AbstractMethodError
	at com.sun.gjc.spi.jdbc40.ConnectionHolder40.init(ConnectionHolder40.java:96)
	at com.sun.gjc.spi.jdbc40.ConnectionHolder40.<init>(ConnectionHolder40.java:87)
	at com.sun.gjc.spi.jdbc40.ConnectionWrapper40.<init>(ConnectionWrapper40.java:64)
	at com.sun.gjc.spi.jdbc40.Jdbc40ObjectsFactory.getConnection(Jdbc40ObjectsFactory.java:90)
	at com.sun.gjc.spi.ManagedConnection.getConnection(ManagedConnection.java:462)
	at com.sun.enterprise.resource.allocator.LocalTxConnectorAllocator.fillInResourceObjects(LocalTxConnectorAllocator.java:119)
	at com.sun.enterprise.resource.pool.ConnectionPool.getResource(ConnectionPool.java:488)
	at com.sun.enterprise.resource.pool.PoolManagerImpl.getResourceFromPool(PoolManagerImpl.java:242)
	at com.sun.enterprise.resource.pool.PoolManagerImpl.getResource(PoolManagerImpl.java:167)
	at com.sun.enterprise.connectors.ConnectionManagerImpl.getResource(ConnectionManagerImpl.java:338)
	at com.sun.enterprise.connectors.ConnectionManagerImpl.internalGetConnection(ConnectionManagerImpl.java:301)
	at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:236)
	at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:165)
	at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:160)
	at com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:113)

Bazinga!

Let鈥檚 see some source code:

protected void init() {
    try {
        defaultClientInfo = getClientInfo();
    } catch (SQLException e) {
        _logger.log(Level.INFO, "jdbc.unable_to_get_client_info", e.getMessage());
        if(_logger.isLoggable(Level.FINEST)) {
            _logger.log(Level.FINEST, "jdbc.unable_to_get_client_info", e);
        }
    }
}

com.sun.gjc.spi.jdbc40.ConnectionHolder40.java

    public Properties getClientInfo() throws SQLException {
        checkValidity();
        return con.getClientInfo();
    }

com.sun.gjc.spi.base.ConnectionHolder.java

protected void checkValidity() throws SQLException {
    if (isClosed) throw new SQLException("Connection closed");
    if (!valid) throw new SQLException("Invalid Connection");
    if (active == false) {
        mc.checkIfActive(this);
    }
}

Ok, so it鈥檚 the jdbc driver. Glassfish fails with an ConnectionJDBC3 object So.. let鈥檚 check the code

net.sourceforge.jtds.jdbcx.proxy.ConnectionProxy.java

public Properties getClientInfo() throws SQLException {
    // TODO Auto-generated method stub
    throw new AbstractMethodError();
}

Ant this indeed throws AbstractMethodError 馃槓

There is no newer version than 1.2.5. The thing is that jtds used to be compatible with jdk 1.3 and 1.4. JDK 5 brought JDBC 4.0, which brought many new methods in the java.sql.Connection. JTDS doesn’t claim to be implementing these, just wants to be compilable against jdk5/6 – hence AbstractMethodErrors. Some history about this

JDBC 4.0 API is supposed to be backwards compatible, there is no problem with using Java SE 6 with JDBC 3.0 drivers, as long as you do not use the new methods or classes there were introduced in JDBC 4.0 API. That’s the theory at least, since if you want to compile against newer api, you have to include some implementation of new methods.

How exactly does it happen that Glassfish decides a driver is JDBC 3.0 or 4.0 (or 4.1, introduced by JDK 7)? That’s pretty simple:

public void detectJDBC30Connection(Connection con, com.sun.gjc.spi.ManagedConnection mcObject) {

    String dataSourceProperty = mcObject.getManagedConnectionFactory().getJdbc30DataSource();
    if (dataSourceProperty != null) {
        setJdbc30Connection(Boolean.valueOf(dataSourceProperty));
        initJDBC30Connection = true;
    } else {
        try {
            Class paramClasses[] = new Class[]{Class.class};

            Method isWrapperMethod = con.getClass().getMethod("isWrapperFor", paramClasses);
            int modifiers = isWrapperMethod.getModifiers();
            setJdbc30Connection(Modifier.isAbstract(modifiers));
        } catch (NoSuchMethodException e) {
            setJdbc30Connection(true);
        } catch (AbstractMethodError e) {
            setJdbc30Connection(true);
        } catch (Throwable t) {
            setJdbc30Connection(true);
            _logger.log(Level.WARNING, "jdbc.unexpected_exception_on_detecting_jdbc_version", t);
        } finally {
            initJDBC30Connection = true;
        }
    }
}

And by mixture of the above, we have a problem, since jTDS claims to have a method which doesn’t work.
Solutions? There are 3:

  • get a proper JTDS version or something that will be detected as a proper JDBC3 driver. Latest version still using jdk4 was 1.2.2. And it works perfectly.
  • Use a different driver. I don’t have much experience with Microsoft SQL and JDBC yet, but there is a quite new driver from Microsoft itself, probably worth giving a spin.
  • Complex solution: fix JTDS driver.

Continuous deployment on Glassfish

Okay, how do we deploy to glassfish from maven on jenkins? Let鈥檚 try org.glassfish.maven.plugin:maven-glassfish-plugin first.

pom.xml

<plugin>
    <groupId>org.glassfish.maven.plugin</groupId>
    <artifactId>maven-glassfish-plugin</artifactId>
    <version>2.1</version>
    <executions>
        <execution>
            <goals>
                <goal>deploy</goal>
            </goals>
        </execution>
    </executions>
</plugin>

~/.m2/settings.xml

<profile>
    <id>glassfish</id>
    <activation>
        <activeByDefault>false</activeByDefault>
        <property>
           <name>glassfish.version</name>
           <value>3.1</value>
        </property>
    </activation>
    <properties>
        <glassfish.home>/opt/servers/glassfish-3.1</glassfish.home>
    </properties>
</profile>

Unfortunately, maven tries to go to http://maven.ocean.net.au/external which is returning 503鈥檚 today. After some hoops and loops it still doesn鈥檛 work, so let鈥檚 try a different approach.

pom.xml, revisited

<plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven2-plugin</artifactId>
    <version>1.1.1</version>
    <configuration>
        <!-- Do not wait after the container is started -->
        <wait>false</wait>

        <container>
            <containerId>glassfish-3x</containerId>
            <home>/opt/servers/glassfish-3.1</home>
            <output>${project.build.directory}/glassfish/container.log</output>
            <append>false</append>
            <log>${project.build.directory}/glassfish/cargo.log</log>
        </container>

        <configuration>
            <deployable>
                <groupId>com.example</groupId>
                <artifactId>application-web</artifactId>
                <type>war</type>
                <properties>
                    <context>/</context>
                </properties>
            </deployable>
        </configuration>

    </configuration>
</plugin>

It works, deploys, undeploys, but requires setting app server each time. Plus by going against maven plugin shorthand naming, requires an excruciatingly tedious

m3 -DskipTests clean package org.codehaus.cargo:cargo-maven2-plugin:undeploy \
org.codehaus.cargo:cargo-maven2-plugin:stop \
org.codehaus.cargo:cargo-maven2-plugin:start \
org.codehaus.cargo:cargo-maven2-plugin:deploy

to run.

AAAAAAAAA! I feel I鈥檓 doing something wrong here, so… is there another way? Yes! 馃檪

Actually, since I am using Glassfish and it includes a first-class CLI tool called asadmin (short from Application Server admin, as Glassfish used to be called Sun Application Server), let鈥檚 use it.

#!/bin/bash

asadmin="/home/glassfish/glassfish/bin/asadmin" 
$asadmin undeploy dashboard-web-0.1-SNAPSHOT
$asadmin restart-domain domain1
$asadmin deploy $WORKSPACE/application/application-web/target/application-web-0.1-SNAPSHOT.war

Put that as a script somewhere and execute as a post-build step after a successful build in Jenkins et voila, a contiuously deployed dev version.

jdd 2k10

Jdd 2k10
Nowa, lepsza, znowu na terenie UEKu (dawniej Akademii Ekonomicznej). Lokalizacja, poza sam膮 sal膮 wyk艂adow膮, ze wszech miar wygodne, dobry dojazd, zapewniony parking i du偶o miejsca wsz臋dzie. Korytarze przestronne, by艂o gdzie rozmawia膰 albo przeczekiwa膰 wyk艂ad (o czym za chwil臋). Nowo艣膰: dwudniowa (7 i 8 pa藕dziernika), ale za cen臋 jednej jedynej jedynie s艂usznej 艣cie偶ki. To znaczy, 偶e podczas ‘porywaj膮cego’ marketingu pewnej firmy ze stolicy 艣wiatowego IT alternatyw膮 by艂o stanie na korytarzu. Podobnie z reszt膮 na wyk艂adzie Oracle’a, kt贸rego, o dziwo, reprezentowa艂 nie-Waldek Kot. Pos艂ucha艂em chwil臋, nie porywa艂o, a i o samym Coherence ju偶 gdzie艣 by艂o. Poza tym catering dobry i bardzo sprawny, po艣lizg贸w prawie brak, dedykowane miejsca do 艂adowania notebook贸w (na sali wyk艂adowej i korytarzu), sprawnie dzia艂aj膮ce wifi. Jedyna niespodzianka to przesuni臋cie agendy na wcze艣niejsz膮 por臋 kilka dni przed sam膮 konferencj膮 – zdarza si臋, szczeg贸lnie na tej uczelni 馃檪
Co do wyk艂ad贸w, to wybra艂em… ach tak, przy jednej 艣cie偶ce wybrano za mnie. Co jest o tyle zabawne, 偶e agenda materializowa艂a si臋 w zasadzie tu偶 przed sam膮 konferencj膮, a najni偶sza cena by艂a przy znanych 1 lub 2 speakerach. Chocia偶 napisali “Linda Rising” i starczy艂o jako zach臋ta – Billem B by mnie nie przyci膮gn臋li.
Pierwszy wyk艂ad: Bill Burke o REST. Dobrze prowadzony, ale.. kacyk prowadz膮cego + temat nie wieje 艣wie偶o艣ci膮. JAX-RS by艂 nowo艣ci膮 jaki艣 czas temu, a teraz.. dobrze, 偶e nie nowo艣ci w jdk5. Na domiar z艂ego wyk艂ad poruszy艂 z wierzchu tematyk臋 zamiast m贸wi膰 o ciekawych use case’ach, przypadkach, problemach. Mo偶e przesadzam, mo偶e du偶o ludzi nie s艂ysza艂o o re艣cie, mo偶e.. nie wiem. Wiem, 偶e ja s艂ysza艂em, czyta艂em, wiem o co chodzi i nie czuj臋 si臋 porwany. Nast臋pnie Angelika Langer i aplikacje wielow膮tkowe. To akurat bardzo udany wyk艂ad, dobrze wyja艣nia艂 i spokojnie nadawa艂by si臋 na 2-3 godzinny talk – tematyka obszerna a problem贸w multum (a ile rado艣ci przy debugowaniu). Niestety, Angelik臋 ci臋偶ko by艂o potem spotka膰 – mo偶e tylko mi i kto艣 mia艂 wi臋cej szcz臋艣cia. W ka偶dym razie du偶y +.
Jaros艂aw B艂膮d. Jego wyk艂ady s膮 jak wielka rzeka: powolne, majestatyczne, troch臋 wiadomo co przynios膮, czasem te偶 trafi si臋 jaka艣 pere艂ka. Og贸lnie +, szczeg贸lnie 偶e dzieli艂 si臋 swoimi do艣wiadczeniami. Ted Neward zgodnie z oczekiwaniami, sprawnie, szybko, z dowcipem i do tego bardzo konkretnie o tym, jak do javy dorobi膰 pewne fragmenty j臋zyk贸w funkcyjnych. Ted kodowa艂 na 偶ywo, wi臋c ka偶dy m贸g艂 zobaczy膰, 偶e da si臋 to napisa膰 w 30 minut, pokaza艂, 偶e kto艣 zaimplementowa艂 to ju偶 w Functional Java i Google Guava.. a potem pochwali艂 j臋zyki, kt贸re maj膮 te feature’y wbudowane. Piotrka Walczyszyna przeskoczy艂em, widzia艂em ju偶 2 jego prezentacje w tym roku. Na koniec dnia pierwszego Linda Rising, ‘fearless change’, czyli ‘pattern princess’ o patternach wprowadzania zmian. Mimo, 偶e najmniej techniczna prezentacja z ca艂ego dnia, by艂a dla mnie najciekawsza. Gdyby tylko nie uci臋to jej chwil臋 przed ko艅cem.
Po pierwszym dniu zorganizowano te偶 imprez臋 urodzinow膮 (wszak to 5 edycja) w klubie Pauza. By艂o dobrze, dop贸ki nie w艂膮czyli za g艂o艣nej muzyki i do rozm贸wc贸w trzeba by艂o krzycze膰. Imprezy konferencyjne maj膮 ju偶 to do siebie, 偶e ludzie chc膮 sobie porozmawia膰, a tu, jakkolwiek to brzmi, kto艣 przeszkadza艂 muzyk膮.
Drugi dzie艅 zaczyna艂 si臋 albo od wyk艂ad贸w, albo warsztat贸w (Linda o wywieraniu wp艂ywu, kt贸re z reszt膮 wybra艂em, Ted o Scali i Piotrek o Flexie). Nie wiem, co by艂o na wyk艂adach, bo siedzia艂em na warsztatach i.. jeszcze nigdy 3h na terenie tej uczelni nie zlecia艂o mi tak szybko. Mimo, 偶e tematyka bardzo mi臋kka i nietechniczna, to wydaje mi si臋, 偶e si臋 przyda 馃檪
Oracle Coherence.. zaraz, Oracle i nie ma Walkda, co jest? Nowy prowadz膮cy to niestety nie ta sama liga, mo偶e si臋 wyrobi 馃檪
Ostatnim (i jedynym :P) wyk艂adem kt贸rego wys艂ucha艂em w pe艂ni by艂 tego dnia Technical Debt, prowadzaony przez Thomasa Sundberga. Go艣膰 jest inteligentny, tylko niestety m贸j odbi贸r zosta艂 zak艂贸cony przez kiepski d藕wi臋k.
By艂o nie藕le. Organizacyjnie bardzo sprawnie, bez po艣lizg贸w, bez kolejek. Gorzej natomiast z cz臋艣ci膮 merytoryczn膮, rozumiem, 偶e sponsor chce mie膰 wyk艂ad, ale kogo na konferencji technicznej w sali wyk艂adowej interesuje, 偶e rekrutuje? Ma standa, mo偶e robi膰 cuda (vide Software Mind, kt贸ry na Studenckim Festiwalu Informatycznym zawsze pokazuje co艣, co przyci膮ga t艂umy). Prezentacje na kt贸rych by艂em by艂y dobre, pozna艂em kilka ciekawych os贸b, ale.. brak艂o tego czego艣. Standy sponsor贸w jakie艣 takie.. niemrawe, z reszt膮 3 z nich to outsourcing/agencje rekrutacyjne. Wydawa艂oby mi si臋, 偶e ludzie z takiej bran偶y powinni by膰 jacy艣 bardziej.. ludzko-偶ywio艂owi, do mnie nie trafili.
Summa sumarum jestem zadowolony, jako艣膰 rozm贸w w przestronnym korytarzu uratowa艂a mnie od nudy 馃檪

Nowa, lepsza, znowu na terenie UEKu (dawniej Akademii Ekonomicznej). Lokalizacja, poza sam膮 sal膮 wyk艂adow膮, ze wszech miar wygodne, dobry dojazd, zapewniony parking i du偶o miejsca wsz臋dzie. Korytarze przestronne, by艂o gdzie rozmawia膰 albo przeczekiwa膰 wyk艂ad (o czym za chwil臋). Nowo艣膰: dwudniowa (7 i 8 pa藕dziernika), ale za cen臋 jednej jedynej jedynie s艂usznej 艣cie偶ki. To znaczy, 偶e podczas ‘porywaj膮cego’ marketingu pewnej firmy ze stolicy 艣wiatowego IT alternatyw膮 by艂o stanie na korytarzu. Podobnie z reszt膮 na wyk艂adzie Oracle’a, kt贸rego, o dziwo, reprezentowa艂 nie-Waldek Kot. Pos艂ucha艂em chwil臋, nie porywa艂o, a i o samym Coherence ju偶 gdzie艣 by艂o. Poza tym catering dobry i bardzo sprawny, po艣lizg贸w prawie brak, dedykowane miejsca do 艂adowania notebook贸w (na sali wyk艂adowej i korytarzu), sprawnie dzia艂aj膮ce wifi. Jedyna niespodzianka to przesuni臋cie agendy na wcze艣niejsz膮 por臋 kilka dni przed sam膮 konferencj膮 – zdarza si臋, szczeg贸lnie na tej uczelni 馃檪

Co do wyk艂ad贸w, to wybra艂em… ach tak, przy jednej 艣cie偶ce wybrano za mnie. Co jest o tyle zabawne, 偶e agenda materializowa艂a si臋 w zasadzie tu偶 przed sam膮 konferencj膮, a najni偶sza cena by艂a przy znanych 1 lub 2 speakerach. Chocia偶 napisali “Linda Rising” i starczy艂o jako zach臋ta – Billem B by mnie nie przyci膮gn臋li.

Pierwszy wyk艂ad: Bill Burke o REST. Dobrze prowadzony, ale.. kacyk prowadz膮cego + temat nie wieje 艣wie偶o艣ci膮. JAX-RS by艂 nowo艣ci膮 jaki艣 czas temu, a teraz.. dobrze, 偶e nie nowo艣ci w jdk5. Na domiar z艂ego wyk艂ad poruszy艂 z wierzchu tematyk臋 zamiast m贸wi膰 o ciekawych use case’ach, przypadkach, problemach. Mo偶e przesadzam, mo偶e du偶o ludzi nie s艂ysza艂o o re艣cie, mo偶e.. nie wiem. Wiem, 偶e ja s艂ysza艂em, czyta艂em, wiem o co chodzi i nie czuj臋 si臋 porwany. Nast臋pnie Angelika Langer i aplikacje wielow膮tkowe. To akurat bardzo udany wyk艂ad, dobrze wyja艣nia艂 i spokojnie nadawa艂by si臋 na 2-3 godzinny talk – tematyka obszerna a problem贸w multum (a ile rado艣ci przy debugowaniu). Niestety, Angelik臋 ci臋偶ko by艂o potem spotka膰 – mo偶e tylko mi i kto艣 mia艂 wi臋cej szcz臋艣cia. W ka偶dym razie du偶y +.

Jaros艂aw B艂膮d. Jego wyk艂ady s膮 jak wielka rzeka: powolne, majestatyczne, troch臋 wiadomo co przynios膮, czasem te偶 trafi si臋 jaka艣 pere艂ka. Og贸lnie +, szczeg贸lnie 偶e dzieli艂 si臋 swoimi do艣wiadczeniami. Ted Neward zgodnie z oczekiwaniami, sprawnie, szybko, z dowcipem i do tego bardzo konkretnie o tym, jak do javy dorobi膰 pewne fragmenty j臋zyk贸w funkcyjnych. Ted kodowa艂 na 偶ywo, wi臋c ka偶dy m贸g艂 zobaczy膰, 偶e da si臋 to napisa膰 w 30 minut, pokaza艂, 偶e kto艣 zaimplementowa艂 to ju偶 w Functional Java i Google Guava.. a potem pochwali艂 j臋zyki, kt贸re maj膮 te feature’y wbudowane. Piotrka Walczyszyna przeskoczy艂em, widzia艂em ju偶 2 jego prezentacje w tym roku. Na koniec dnia pierwszego Linda Rising, ‘fearless change’, czyli ‘pattern princess’ o patternach wprowadzania zmian. Mimo, 偶e najmniej techniczna prezentacja z ca艂ego dnia, by艂a dla mnie najciekawsza. Gdyby tylko nie uci臋to jej chwil臋 przed ko艅cem.

Po pierwszym dniu zorganizowano te偶 imprez臋 urodzinow膮 (wszak to 5 edycja) w klubie Pauza. By艂o dobrze, dop贸ki nie w艂膮czyli za g艂o艣nej muzyki i do rozm贸wc贸w trzeba by艂o krzycze膰. Imprezy konferencyjne maj膮 ju偶 to do siebie, 偶e ludzie chc膮 sobie porozmawia膰, a tu, jakkolwiek to brzmi, kto艣 przeszkadza艂 muzyk膮.

Drugi dzie艅 zaczyna艂 si臋 albo od wyk艂ad贸w, albo warsztat贸w (Linda o wywieraniu wp艂ywu, kt贸re z reszt膮 wybra艂em, Ted o Scali i Piotrek o Flexie). Nie wiem, co by艂o na wyk艂adach, bo siedzia艂em na warsztatach i.. jeszcze nigdy 3h na terenie tej uczelni nie zlecia艂o mi tak szybko. Mimo, 偶e tematyka mi臋kka i nietechniczna, to warsztaty 艣wietne, s艂ucha艂o si臋 wspaniale i w og贸le 馃檪

Po warsztatach wyk艂ad o Oracle Coherence.. zaraz, Oracle i nie ma Walkda, co jest? Nowy prowadz膮cy to niestety nie ta sama liga, mo偶e si臋 jeszcze wyrobi.聽Ostatnim (i jedynym :P) wyk艂adem kt贸rego wys艂ucha艂em w pe艂ni by艂 tego dnia Technical Debt, prowadzaony przez Thomasa Sundberga. Go艣膰 jest inteligentny, tylko niestety m贸j odbi贸r zosta艂 zak艂贸cony przez kiepski d藕wi臋k.

By艂o nie藕le. Organizacyjnie bardzo sprawnie, bez po艣lizg贸w, bez kolejek. Gorzej natomiast z cz臋艣ci膮 merytoryczn膮, rozumiem, 偶e sponsor chce mie膰 wyk艂ad, ale kogo na konferencji technicznej w sali wyk艂adowej interesuje, 偶e rekrutuje? Ma standa, mo偶e robi膰 cuda (vide Software Mind, kt贸ry na Studenckim Festiwalu Informatycznym zawsze pokazuje co艣, co przyci膮ga t艂umy). Prezentacje na kt贸rych by艂em by艂y dobre, pozna艂em kilka ciekawych os贸b, ale.. brak艂o tego czego艣. Standy sponsor贸w jakie艣 takie.. niemrawe, z reszt膮 3 z nich to outsourcing/agencje rekrutacyjne. Wydawa艂oby mi si臋, 偶e ludzie z takiej bran偶y powinni by膰 jacy艣 bardziej.. ludzko-偶ywio艂owi, do mnie nie trafili.

Summa sumarum jestem zadowolony, jako艣膰 rozm贸w w przestronnym korytarzu uratowa艂a mnie od nudy podczas unikanych wyk艂ad贸w 馃檪

Idea 9, jdk 1.4, debug i problem

8. grudnia wysz艂a nowa wersja IntelliJ. Dzia艂a 艣wietnie, poza tym, 偶e pr贸by debugowania z jdk 1.4 ko艅czy艂y si臋 tak:

1
2
3
4
5
6
7
8
9
10
C:devsdkjdk1.4binjava
-Xdebug
-Xrunjdwp:transport=dt_socket,address=127.0.0.1:3519,suspend=y,server=n
-Xmx512M
com.firma.krzkak.DataRunner

FATAL ERROR in native method: No transports initialized
Transport dt_socket failed to initialize, rc = 509.

Process finished with exit code 1

Normalnie kod si臋 uruchamia艂, dzia艂a艂, ale debug za razem wzi臋te ChRL oraz drugi, wspania艂y i drugi pod wzgl臋dem liczby ludno艣ci kraj, nie chcia艂 ruszy膰. W ko艅cu znalaz艂em walkaround:

1
cp jdk1.4/jre/bin/dt_socket.dll jdk1.4/bin/

I dzia艂a, 偶ycie jest pi臋kne, a do urlopu 3 dni robocze 馃檪

Hello world!

Sko艅czy艂em z uczelni膮 (a.k.a. zosta艂em magistrem), tak偶e ko艅ca dobiega moja przygoda jako Campus Ambasador firmy S艂oneczko Systemiki (Sun Microsystems), naturaln膮 艣mierci膮 umrze blogs.sun.com/ags. Zdecydowa艂em si臋 za艂o偶y膰 nowy, lepszy blog, na kt贸rym mam nadziej臋 uda mi si臋 napisa膰 co艣 cz臋艣ciej ni偶 raz na kilka miesi臋cy 馃槈

Wczoraj wieczorem by艂em zdecydowany na eksperyment pt. Movable Type – przede wszystkim z czystej ciekawo艣ci. Wszyscy u偶ywaj膮 WordPressa, sam mia艂em z nim troch臋 do czynienia, a tak my艣la艂em, 偶e przyjdzie mi pozna膰 co艣 nowego. Ciekawo艣膰 i sk艂onno艣膰 do odkrywania nieznanych rozwi膮za艅 wzi臋艂y g贸r臋 na nieca艂膮 dob臋, dlatego ci膮g dalszy bloga b臋dzie na ‘zwyk艂ym’ wordpressie.

Krwinka walcz膮ca, czyli Javarsovia 2k9

Pisz臋 ten post z klawiatury Logitech Wave, kt贸r膮 uda艂o mi si臋 zdoby膰 (po raz pierwszy wygra艂em co艣 na konferencji:D) podczas konkursu organizaowanego przez firm臋 Javart.

Wyjazd do stolicy uwa偶am za udany, cho膰 do wszystkich prezentacji mia艂em tym razem nosa. Wybra艂em:
Obliczenia w chmurach – Od ki艣ci po siatce do chmury (mog艂o by膰 super, by艂o bez rewelacji)
Garbage First – nowy garbage collector w maszynie HotSpot (solidny, dobrze przygotowany wyk艂ad)
Klastry i loadbalancer w JBossie
Android z perspektywy programisty Java
Ewolucja Architektury (dobrze si臋 s艂ucha艂o)

Sama konferencja dobrze przygotowana, uczestnicy przybyli t艂umnie, wszyscy dostali koszulki, du偶o os贸b dosta艂o kubki – wielkie brawa dla organizator贸w, kt贸rzy zadbali, aby wszystko dzia艂a艂o i by艂o jak najlepiej. Przyjemnie uczestniczy膰 w dogranej konferencji z perspektywy uczestnika, trzeba tylko przyj艣膰 i s艂ucha膰/dyskutowa膰, mo偶na nawet co艣 wygra膰.
*wywodzi si臋 z mojej interpretacji loga, na kt贸rej zamiast Duke’a po艂膮czonego z syrenk膮 dopatruj臋 si臋 krwinki 馃檪
ps. To by艂 pierwszy znany mi event Javowy od znacznego czasu, podczas kt贸rego Jacek Laskowski nie by艂 prelegentem 馃檪

Eclipse++

33 projekty, 24 mln linii kodu, 10 nowych narz臋dzi, czyli nowe wydanie Eclipse’a. Mimo, 偶e nie jest to moje ulubione IDE (IntelliJ do kodowania jest po prostu lepszy), to na bazie Eclipse’a oparto wiele interesuj膮cych narz臋dzi i to one s膮 藕r贸d艂em mojego zainteresowania.

Najbardziej interesuj膮cymi elementami nowego wydania s膮 wg mnie:
narz臋dzie do budowania DSLi.

framework do tworzenia aplikacji dost臋pnych dla u偶ytkownik贸w

Opr贸cz tego standardowe nowo艣ci: rozw贸j BIRTa, edytora Javy,