Saturday, July 17, 2010

Many problems with betterbeansbinding - one solution :)

If your binding expressions contain errors or data sources are not available you can get several warnings from EL resolver. But no one of BBB developers thought about good debbuging feedback in such situations. All you get are some of these

[sourcecode type="java"]

2010-07-17 14:10:24 org.jdesktop.beansbinding.util.logging.Logger log
WARNING: isReadable(): expression is unresolvable

2010-07-17 14:10:24 org.jdesktop.beansbinding.util.logging.Logger log
WARNING: updateCache(): expression is unresolvable

2010-07-17 14:10:26 org.jdesktop.beansbinding.util.logging.Logger log
WARNING: isWriteable(): expression is unresolvable

[/sourcecode]

But where? In which class? What binding expression? Damn it! How could I work with this tool?!

I've made very simple changes in CLProperty class of BBB src code. One of them

[sourcecode type="java"]

logger.warning("updateCache(): expression is unresolvable: " +
expression + " for source " + source);

[/sourcecode]

Simple, huh? Now I get

[sourcecode type="java"]

2010-07-17 14:27:10 org.jdesktop.beansbinding.util.logging.Logger log
WARNING: updateCache(): expression is unresolvable: ValueExpression[${rootModel.currentRouteTemplate.inRoutePointTemplates}] for source pl.autoguard.ac21.ptir.mvc.view.TransportRouteView[,0,0,856x612,invalid...

[/sourcecode]

Now I can clearly see that ${rootModel.currentRouteTemplate.inRoutePointTemplates} expression failed for visual element in pl.autoguard.ac21.ptir.mvc.view.TransportRouteView class.

Downloads

Altered ELProperty class.

Altered betterbeansbinding-core-1.3.0b1.jar and betterbeansbinding-core-1.3.0b1.pom (note version 1.3.0b1). This jar should be used instead 1.3.0 version. Update your dependencies today! :)

Thursday, July 1, 2010

NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder

I get error while running code with Hibernate 3.5.x

java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.slf4j.LoggerFactory.getSingleton(LoggerFactory.java:223)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:120)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:269)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:242)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:255)
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:165)
at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:127)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
at pl.bartekzdanowski.MyTest.setUp(MyTest.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
... 43 more

The solution is described on SLF4j page. Simply you have to add slf4j-api with wersion greater than 1.5.6. In maven pom.xml you can declare slf4j explicitly:

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

Wednesday, June 30, 2010

I po Javarsovii...

Powiem Wam, że myślami ciągle krążę wokół sobotniej konferencji. Rozmach z jakim udało nam się zrobić Javarsovię 2010 przerósł moje oczekiwania. Miało być 500 osób - taką informację przedstawialiśmy sponsorom. A tymczasem przybyło ponad 650. Powstrzymam się od podsumowań szczegółowych. Uczynili to już moi kompani z Kapituły, m.in. Łukasz. Chciałbym jednak podziękować uczestnikom - za ilość przybyłych osób i wspaniałą atmosferę. W piątek wieczorem było cicho i monotonnie, kiedy szykowaliśmy stanowiska, stoły oraz 600 toreb z materiałami :) . Ale w  sobotę sale tętniły życiem i świetnym humorem odwiedzających.

Drugie podziękowania idą do sponsorów. Inaczej byśmy się nie spotkali. Przytoczę tu ich wszystkich

  • Sponsorzy platynowi: Javart, IBM

  • Sponsorzy złoci: Google, Microsoft, Azul Systems, Oracle

  • Sponsorzy srebrni: Adobe, TouK, ITKontrakt, e-point, tieto

  • Sponsorzy: Sages, Javatech

  • Partnerzy: iStream, SoftwareMill, Helion, OVH.pl, Sun Learning Services Polska

  • Patroni medialni: DobreProgramy.pl, Radio Kampus


Bardzo Wam dziękujemy i do zobaczenia na Warsjavie na jesieni oraz na Javarsovia 2011, za rok :-)

Saturday, June 26, 2010

Javarsovia 2010 za kilka godzin

Niedawno wróciłem z Centrum Konferencyjnego, gdzie przygotowywaliśmy materiały i sale na konferencję. Mamy 12 dzielnych wolontariuszy, którzy prawie wszyscy do końca ciężko pracowali, aby przytować imprezę.

Przygotowania trwały pół roku, więc jest to owoc ciężkiej pracy wszystkich członków Kapituły. Już się nie mogę doczekać :) więc jeszcze tylko wydrukuję ostateczne listy potwierdzonych i idę spać :)

Friday, June 11, 2010

650 na Javarsovię, a rejestracja trwa!

Właśnie sprawdziłem statystyki i mamy 653 zapisanych, w tym 33 damy :D

To jakiś madness! Moim zdaniem, nawet jak część nie przyjdzie, to i tak przekroczymy PÓŁ TYSIĄCA! :D

Thursday, June 3, 2010

Rejestracja na Javarsovia 2010 otwarta!

Rejestracja na Javarsovię 2010 jest już otwarta od dwóch dni. Mamy już przeszło 250 zapisanych!



A czy Wy już jesteście zapisani? Bo ja zdaje się widziałem Waszego sąsiada, tego grubszego spod 5tki, że on już zarejestrowany!

Uczestnictwo, dzięki sponsorom, jest bezpłatne, ale wymaga rejestracji.

Możecie sobie poczytać o zgłoszonych prezentacjach, a podczas rejestracji można wybrać 6 preferowanych. Na podstawie wyborów ułożymy 4 ścieżki.

Jeśli już się zarejestrowaliście, ale nie określiliście preferencji rozkładu, to proszę zróbcie to - będzie to dla nas cenną wskazówką.

Wszystko jest mailu potwierdzającym.

Pomóżcie nam promować Javarsovię. Miejcie swój wkład w najwiekszą bezpłatną konferencję Javową w Polsce. Piszcie na blogach, dzwońcie do rodziny, ustawcie statusy na GG itp., wysyłajcie smsy, zaznaczcie swoją obecność na konferencji na LinkedIn i na Facebooku, niech Wasze kontakty wiedzą co się szykuje.

Do dzieła! :D

Tuesday, April 27, 2010

InetAddress.isReachable() jest do bani

Napisałem mały program testujący czy klient "widzi" prawidłowo adres i porty naszego serwera aplikacyjnego. Zdarza się, że Firewalle klientów skutecznie blokują łączność.

Zależało mi, aby w pierwszym kroku "spingować" hosta. Niestety wczoraj odkryliśmy buga, bo polegałem na metodzie InetAddress.isReachable(). Tymczasem sposób jest do chrzanu, bo implementacja nie pinguje a odpytuje usługę echo, która stoi na porcie 7. Wielu adminów blokuje tego typu usługi, starając się maksymalnie uszczelnić serwery. U nas w firmie też i dlatego nasi klienci dostawali informację, że istnieje brak łączności z jednym z serwerów.

Nie dostarczę dzisiaj rozwiązania, z braku czasu, ale wrócę do tematu kiedyś.
Poniżej wadliwy kod:

[sourcecode type="java"]

final String host = "zdanek.ostrejezyki.pl";
final int timeOut = 3000;

final boolean status = InetAddress.getByName(host).isReachable(timeOut);

if (status == false) {
throw new IOException("Brak lacznosci z " + host);
}

[/sourcecode]