Dne středa 02 září 2009 17:14:52 danisevsky napsal(a):
> Ahoj, narazil jsem podle mne na zajimavou vec. Mam definovanou beanu:
>
> <bean id="someCache" class="cz.somepackage.SomeCache"
> init-method="initialize" autowire="byType" />
>
> zjednoduseny kod beany:
>
> public class SomeCache {
>
>     private Map<String, List<String>> cache;
>
>     /**
>      * Provede inicializaci.
>      */
>     @Transactional
>     public void initialize() {
>         cache = new HashMap<String, List<String>>();
>         putSomethigToCache();   //metoda neco z DB vlozi do cache
>     }
>
>     public final List<String> getFromCache(String someId) {
>         return cache.get(someId);
>     }
>
> }
>
> Co me prekvapilo, ze radek "return cache.get(someId);" vyhodi NPE vyjimku,
> ze objekt cache je null. Pritom vim bezpecne (mel jsem tam breakpoint), ze
> metoda initialize() byla pri startu aplikace zavolana.
> Myslel jsem, ze defaultne jsou Spring beany singletony, tedy jedna instance
> pro celou aplikaci. Nechapu, jak promenna cache muze byt null, kdyz v cele
> tride SomeCache nikde zadnej takovej kod, kterej by ji nuloval neni. Mohl
> by mi to prosim nekdo vysvetlit?

volají se obě metody z jednoho threadu?
(btw stejně bych asi cache udělal final a zajistil synchronizaci)

tomáš

Odpovedet emailem