Jak co nejlépe zareagovat na znullování objektu?

2011-06-09 Thread Libor Jelinek
Dobrý den!
Chtěl bych probrat, jak by kdo řešil následující problém ochrany proti
NullPointerException pokud s jednou referenční proměnnou pracuje současně
více částí aplikace (více Swing formulářů nebo JPA perzisence a JavaServer
Faces web GUI současně apod.).

OrderItem item = new OrderItem();

*// V nějaké vrstvě se při vytváření položky nastaví nějaké hodnoty*
item.setPN(123);
item.setQty(2);

*// V jiné vrstvě uživatel smaže položku. Reference je na null.*
item = null;

*// Další vrstva to neví a zavolá, což **skončí chybou NullPointerException*
item.getPN();**

Jak k tomu co nejlépe přistoupit? Mě napadají tak dvě možnosti:
1. Do do getter metod přidat kontrolu na na null a v tom případě vrátit např
"-1".
2. Oznamovat si změny např. beanovským PropertyChangeListener, což by ale
hodně zkomplikovalo kód.

Budu rád za Vaše názory.
Libor


Re: Jak co nejlépe zareagovat na znullování objektu?

2011-06-09 Thread Ladislav Kulhanek
Ahoj.
No podle mě, pokud se v kódu pracuje s proměnnou, která může být null, měl
by s tím kód počítat. Prostě to považovat za jeden z možných stavů. Čili kód
by vypadal takto:

if (item != null) {
...
} else {
...
}

Láďa

Dne 9. června 2011 9:15 Libor Jelinek  napsal(a):

> Dobrý den!
> Chtěl bych probrat, jak by kdo řešil následující problém ochrany proti
> NullPointerException pokud s jednou referenční proměnnou pracuje současně
> více částí aplikace (více Swing formulářů nebo JPA perzisence a JavaServer
> Faces web GUI současně apod.).
>
> OrderItem item = new OrderItem();
>
> *// V nějaké vrstvě se při vytváření položky nastaví nějaké hodnoty*
> item.setPN(123);
> item.setQty(2);
>
> *// V jiné vrstvě uživatel smaže položku. Reference je na null.*
> item = null;
>
> *// Další vrstva to neví a zavolá, což **skončí chybou
> NullPointerException*
> item.getPN();**
>
> Jak k tomu co nejlépe přistoupit? Mě napadají tak dvě možnosti:
> 1. Do do getter metod přidat kontrolu na na null a v tom případě vrátit
> např "-1".
> 2. Oznamovat si změny např. beanovským PropertyChangeListener, což by ale
> hodně zkomplikovalo kód.
>
> Budu rád za Vaše názory.
> Libor
>


Re: Jak co nejlépe zareagovat na znullování objektu?

2011-06-09 Thread Martin Beránek

Dne 9.6.2011 09:15, Libor Jelinek napsal(a):

Dobrý den!
Chtěl bych probrat, jak by kdo řešil následující problém ochrany proti
NullPointerException pokud s jednou referenční proměnnou pracuje
současně více částí aplikace (více Swing formulářů nebo JPA perzisence a
JavaServer Faces web GUI současně apod.).

OrderItem item = new OrderItem();

/// V nějaké vrstvě se při vytváření položky nastaví nějaké hodnoty/
item.setPN(123);
item.setQty(2);

/// V jiné vrstvě uživatel smaže položku. Reference je na null./
item = null;

/// Další vrstva to neví a zavolá, což //skončí chybou NullPointerException/
item.getPN();//

Jak k tomu co nejlépe přistoupit? Mě napadají tak dvě možnosti:
1. Do do getter metod přidat kontrolu na na null a v tom případě vrátit
např "-1".
2. Oznamovat si změny např. beanovským PropertyChangeListener, což by
ale hodně zkomplikovalo kód.

Budu rád za Vaše názory.
Libor


Nechápu jakým způsobem jste vlastně k tomuhle problému přišel. Pokud mám 
metodu která s objektem pracuje a pak si musím na začátku zkontrolovat, 
jestli mi někdo nepředal null. Ale v průběhu metody nejde nijak zvenku 
znullovat objekt, na který držím referenci.


--
Martin Beránek



smime.p7s
Description: S/MIME Cryptographic Signature


Re: Jak co nejlépe zareagovat na znullování objektu?

2011-06-09 Thread Libor Jelinek
Ano, těžko si to představit. Kompletní popis by byl rozsáhlý. Ale stručně je
to asi tak, že mám modul v NetBeans Platform, který poskytuje POJO jiným
modulům. V určitý moment se z POJO stanou JPA managed entities. Odkazy, ale
ale již existují např. z TableModelů Swingové JTable a ještě ke všemu v
jiném dalším třetím modulu. Navíc si řízení a načítání modulů řídí NBP více
méně podle sebe samo.

Jen výpis zrovna této NullPointerException je asi tak cca 90-100 volání :-)
V téhle "džungli" se pak můžou dít věci a to je pak debugging jak má být :-)


Dne 9. června 2011 10:29 Martin Beránek  napsal(a):

> Dne 9.6.2011 09:15, Libor Jelinek napsal(a):
>
>  Dobrý den!
>> Chtěl bych probrat, jak by kdo řešil následující problém ochrany proti
>> NullPointerException pokud s jednou referenční proměnnou pracuje
>> současně více částí aplikace (více Swing formulářů nebo JPA perzisence a
>> JavaServer Faces web GUI současně apod.).
>>
>> OrderItem item = new OrderItem();
>>
>> /// V nějaké vrstvě se při vytváření položky nastaví nějaké hodnoty/
>> item.setPN(123);
>> item.setQty(2);
>>
>> /// V jiné vrstvě uživatel smaže položku. Reference je na null./
>> item = null;
>>
>> /// Další vrstva to neví a zavolá, což //skončí chybou
>> NullPointerException/
>> item.getPN();//
>>
>> Jak k tomu co nejlépe přistoupit? Mě napadají tak dvě možnosti:
>> 1. Do do getter metod přidat kontrolu na na null a v tom případě vrátit
>> např "-1".
>> 2. Oznamovat si změny např. beanovským PropertyChangeListener, což by
>> ale hodně zkomplikovalo kód.
>>
>> Budu rád za Vaše názory.
>> Libor
>>
>
> Nechápu jakým způsobem jste vlastně k tomuhle problému přišel. Pokud mám
> metodu která s objektem pracuje a pak si musím na začátku zkontrolovat,
> jestli mi někdo nepředal null. Ale v průběhu metody nejde nijak zvenku
> znullovat objekt, na který držím referenci.
>
> --
> Martin Beránek
>
>


Re: Jak co nejlépe zareagovat na znullování objektu?

2011-06-09 Thread Martin Beránek

Dne 9.6.2011 10:38, Libor Jelinek napsal(a):

Ano, těžko si to představit. Kompletní popis by byl rozsáhlý. Ale
stručně je to asi tak, že mám modul v NetBeans Platform, který poskytuje
POJO jiným modulům. V určitý moment se z POJO stanou JPA managed
entities. Odkazy, ale ale již existují např. z TableModelů Swingové
JTable a ještě ke všemu v jiném dalším třetím modulu. Navíc si řízení a
načítání modulů řídí NBP více méně podle sebe samo.

Jen výpis zrovna této NullPointerException je asi tak cca 90-100 volání
:-) V téhle "džungli" se pak můžou dít věci a to je pak debugging jak má
být :-)


sice vam neporadim, ale uz asi trosku chapu. ten NPE nevznikne primo 
volanim item.getPN(), ale az nekde uvnitr (zrejme jsou to nejake proxy???)


--
Martin Beránek



smime.p7s
Description: S/MIME Cryptographic Signature


Re: Jak co nejlépe zareagovat na znullování objektu?

2011-06-09 Thread Petr Synek
Mozna by sel pouzit Null object pattern. Misto null se do promenne ulozi 
"Null" objekt OrderItem s vychozimi hodnotami, napr. PN = -1, apod.


Ale zase je pak potreba dat pozor na to, aby se takovy null objekt nikdo 
nesnazil pomoci JPA pak ulozit. V pripade Entit JPA tenhle pattern mozna 
neni uplne vhodny. Spis se hodi na kolekce, kde misto null je lepsi 
vratit prazdnou kolekci.


Petr

On 9.6.2011 10:38, Libor Jelinek wrote:
Ano, těžko si to představit. Kompletní popis by byl rozsáhlý. Ale 
stručně je to asi tak, že mám modul v NetBeans Platform, který 
poskytuje POJO jiným modulům. V určitý moment se z POJO stanou JPA 
managed entities. Odkazy, ale ale již existují např. z TableModelů 
Swingové JTable a ještě ke všemu v jiném dalším třetím modulu. Navíc 
si řízení a načítání modulů řídí NBP více méně podle sebe samo.


Jen výpis zrovna této NullPointerException je asi tak cca 90-100 
volání :-) V téhle "džungli" se pak můžou dít věci a to je pak 
debugging jak má být :-)



Dne 9. června 2011 10:29 Martin Beránek > napsal(a):


Dne 9.6.2011 09:15, Libor Jelinek napsal(a):

Dobrý den!
Chtěl bych probrat, jak by kdo řešil následující problém
ochrany proti
NullPointerException pokud s jednou referenční proměnnou pracuje
současně více částí aplikace (více Swing formulářů nebo JPA
perzisence a
JavaServer Faces web GUI současně apod.).

OrderItem item = new OrderItem();

/// V nějaké vrstvě se při vytváření položky nastaví nějaké
hodnoty/
item.setPN(123);
item.setQty(2);

/// V jiné vrstvě uživatel smaže položku. Reference je na null./
item = null;

/// Další vrstva to neví a zavolá, což //skončí chybou
NullPointerException/
item.getPN();//

Jak k tomu co nejlépe přistoupit? Mě napadají tak dvě možnosti:
1. Do do getter metod přidat kontrolu na na null a v tom
případě vrátit
např "-1".
2. Oznamovat si změny např. beanovským PropertyChangeListener,
což by
ale hodně zkomplikovalo kód.

Budu rád za Vaše názory.
Libor


Nechápu jakým způsobem jste vlastně k tomuhle problému přišel.
Pokud mám metodu která s objektem pracuje a pak si musím na
začátku zkontrolovat, jestli mi někdo nepředal null. Ale v průběhu
metody nejde nijak zvenku znullovat objekt, na který držím referenci.

-- 
Martin Beránek





Re: Jak co nejlépe zareagovat na znullování objektu?

2011-06-09 Thread Miroslav Paulfranc
Není pak lepší místo nastavení na null (item = null;) použít např. nějaký null 
object (item=NullItem)?
(např. http://sourcemaking.com/design_patterns/null_object/java-0)

>  Původní zpráva 
> Od: Libor Jelinek 
> Předmět: Jak co nejlépe zareagovat na znullování objektu?
> Datum: 09.6.2011 09:15:56
> 
> Dobrý den!
> Chtěl bych probrat, jak by kdo řešil následující problém ochrany proti
> NullPointerException pokud s jednou referenční proměnnou pracuje současně
> více částí aplikace (více Swing formulářů nebo JPA perzisence a JavaServer
> Faces web GUI současně apod.).
>
> OrderItem item = new OrderItem();
>
> *// V nějaké vrstvě se při vytváření položky nastaví nějaké hodnoty*
> item.setPN(123);
> item.setQty(2);
>
> *// V jiné vrstvě uživatel smaže položku. Reference je na null.*
> item = null;
>
> *// Další vrstva to neví a zavolá, což **skončí chybou NullPointerException*
> item.getPN();**
>
> Jak k tomu co nejlépe přistoupit? Mě napadají tak dvě možnosti:
> 1. Do do getter metod přidat kontrolu na na null a v tom případě vrátit např
> "-1".
> 2. Oznamovat si změny např. beanovským PropertyChangeListener, což by ale
> hodně zkomplikovalo kód.
>
> Budu rád za Vaše názory.
> Libor
>
>
>


Re: Jak co nejlépe zareagovat na znullování objektu?

2011-06-09 Thread Roman Kratochvil
Zdravím,
ano, těžko si to představit, ten mechanismus vzniku NPE asi bude opravdu trochu 
jiný... Nicméně "znullovat" objekt při jeho mazání není dobrý nápad, ať už to 
znamená cokoliv   Spíš bych na OrdeItem udělal (resp. podědil z předka) metodu 
delete(), která bude pouze nastavovat vnitřní boolean property a persistence 
pak podle toho bude vědět, že má objekt smazat.

Roman




From: Libor Jelinek 
Sent: Thursday, June 09, 2011 10:38 AM
To: Java 
Subject: Re: Jak co nejlépe zareagovat na znullování objektu?


Ano, těžko si to představit. Kompletní popis by byl rozsáhlý. Ale stručně je to 
asi tak, že mám modul v NetBeans Platform, který poskytuje POJO jiným modulům. 
V určitý moment se z POJO stanou JPA managed entities. Odkazy, ale ale již 
existují např. z TableModelů Swingové JTable a ještě ke všemu v jiném dalším 
třetím modulu. Navíc si řízení a načítání modulů řídí NBP více méně podle sebe 
samo.

Jen výpis zrovna této NullPointerException je asi tak cca 90-100 volání :-) V 
téhle "džungli" se pak můžou dít věci a to je pak debugging jak má být :-)



Dne 9. června 2011 10:29 Martin Beránek  napsal(a):

  Dne 9.6.2011 09:15, Libor Jelinek napsal(a): 


Dobrý den!
Chtěl bych probrat, jak by kdo řešil následující problém ochrany proti
NullPointerException pokud s jednou referenční proměnnou pracuje
současně více částí aplikace (více Swing formulářů nebo JPA perzisence a
JavaServer Faces web GUI současně apod.).

OrderItem item = new OrderItem();

/// V nějaké vrstvě se při vytváření položky nastaví nějaké hodnoty/
item.setPN(123);
item.setQty(2);

/// V jiné vrstvě uživatel smaže položku. Reference je na null./
item = null;

/// Další vrstva to neví a zavolá, což //skončí chybou NullPointerException/
item.getPN();//

Jak k tomu co nejlépe přistoupit? Mě napadají tak dvě možnosti:
1. Do do getter metod přidat kontrolu na na null a v tom případě vrátit
např "-1".
2. Oznamovat si změny např. beanovským PropertyChangeListener, což by
ale hodně zkomplikovalo kód.

Budu rád za Vaše názory.
Libor



  Nechápu jakým způsobem jste vlastně k tomuhle problému přišel. Pokud mám 
metodu která s objektem pracuje a pak si musím na začátku zkontrolovat, jestli 
mi někdo nepředal null. Ale v průběhu metody nejde nijak zvenku znullovat 
objekt, na který držím referenci.

  -- 
  Martin Beránek


<>

Re: Jak co nejlépe zareagovat na znullování objektu?

2011-06-09 Thread Libor Jelinek
Na to už neumím odpovědět přesně. Do hlouby běhové prostředí NetBeans
Platform jsem ještě příliš neproniknul. Učím se až podle toho, co se dozvím
při ladění :-)

Ale komplikované to je sakramentsky. Jak říkáte, tvoří to interně proxy
(facade) objektů, ještě to nějak interně serializuje a deseralizuje. Navíc i
EclipseLink (a předpokládám i další JPA provideři) tvoří jakési pomocné
class soubory na základně mých vlastních. No celkem džungle. Ale vzhledem k
tomu, co vše NBP nabízí to asi jednoduché být ani nemůže.

Ale i tak díky Vám i ostatním a hezký den všem!
Libor

Dne 9. června 2011 10:47 Martin Beránek  napsal(a):

> Dne 9.6.2011 10:38, Libor Jelinek napsal(a):
>
>  Ano, těžko si to představit. Kompletní popis by byl rozsáhlý. Ale
>> stručně je to asi tak, že mám modul v NetBeans Platform, který poskytuje
>> POJO jiným modulům. V určitý moment se z POJO stanou JPA managed
>> entities. Odkazy, ale ale již existují např. z TableModelů Swingové
>> JTable a ještě ke všemu v jiném dalším třetím modulu. Navíc si řízení a
>> načítání modulů řídí NBP více méně podle sebe samo.
>>
>> Jen výpis zrovna této NullPointerException je asi tak cca 90-100 volání
>> :-) V téhle "džungli" se pak můžou dít věci a to je pak debugging jak má
>> být :-)
>>
>
> sice vam neporadim, ale uz asi trosku chapu. ten NPE nevznikne primo
> volanim item.getPN(), ale az nekde uvnitr (zrejme jsou to nejake proxy???)
>
> --
> Martin Beránek
>
>


Co se stalo s BeansBinding?!

2011-06-09 Thread Libor Jelinek
Nevíte co se stalo s BeansBinding (JSR 295)? Koukám na JCP.org a bylo letos
2. května ukončeno... Jaká je náhrada?

Původní referenční implementace beansbinding.java.net je taktéž mrtvá a již
nelze stáhnout (všechny odkazy nefunkční - jako pro naprostou většinu toho
co na java.net za Sunu bývalo).

Grr. Co se to děje? Vy jste to někdo zaregistroval?

Libor


Re: Co se stalo s BeansBinding?!

2011-06-09 Thread Ondra Medek
java.net ma stále přístupné zdrojáky, viz

http://java.net/projects/beansbinding/sources/svn/show

2011/6/9 Libor Jelinek :
> Nevíte co se stalo s BeansBinding (JSR 295)? Koukám na JCP.org a bylo letos
> 2. května ukončeno... Jaká je náhrada?
>
> Původní referenční implementace beansbinding.java.net je taktéž mrtvá a již
> nelze stáhnout (všechny odkazy nefunkční - jako pro naprostou většinu toho
> co na java.net za Sunu bývalo).
>
> Grr. Co se to děje? Vy jste to někdo zaregistroval?
>
> Libor
>



-- 
Ondra Medek


Re: Co se stalo s BeansBinding?!

2011-06-09 Thread Filip Jirsák
Nevím, co se stalo a zda je nějaká oficiální náhrada.  Mohu ale doporučit
knihovnu s podobným zaměřením, která je podle mne lepší :-) JGoodies Data
Binding: http://www.jgoodies.com/downloads/libraries.html. Ovšem jeho autor
se myslím také podílel na JSR 295, tak je otázka, zda bude pokračovat vývoj
alespoň téhle knihovny.

S pozdravem

Filip Jirsák


Dne 9. června 2011 16:36 Libor Jelinek  napsal(a):

> Nevíte co se stalo s BeansBinding (JSR 295)? Koukám na JCP.org a bylo letos
> 2. května ukončeno... Jaká je náhrada?
>
> Původní referenční implementace beansbinding.java.net je taktéž mrtvá a
> již nelze stáhnout (všechny odkazy nefunkční - jako pro naprostou většinu
> toho co na java.net za Sunu bývalo).
>
> Grr. Co se to děje? Vy jste to někdo zaregistroval?
>
> Libor
>


Re: Co se stalo s BeansBinding?!

2011-06-09 Thread Libor Jelinek
Zdrojáky sice jo, ale jistě tam za Sunu byly i hotové jar buildy. Doufám, že
jsem paranoik, ale přijde mi že Java.net jakožto živé komunitné srdce pod
Oraclem prodělalo již třetí infrakt. Z Java.net odešel Hudson, a všechno co
jsem já za posledních dva měsíce potřeboval bylo nedostupné (SwingX,
BeansBinding, BeansValidation, JPQL query tester, XXX dalších odkazů).

A i další věci mě znervózňují ohledně Swingu. Do JKD7 se nic z desktopvých
JSR snad krom JLayerPane a BeansValidation nedostalo. Swing Application
Framework usmrcen, BeansBinding usmrceno, ...

Toto není počátek flamewaru . Není to k diskuzi o BeansBinding, tak na to
nemusíte reagovat :-)

JGoodies Binding jsou asi opravdu lepší volba.

Hezký večer!
Libor


2011/6/9 Ondra Medek 

> java.net ma stále přístupné zdrojáky, viz
>
> http://java.net/projects/beansbinding/sources/svn/show
>
> 2011/6/9 Libor Jelinek :
> > Nevíte co se stalo s BeansBinding (JSR 295)? Koukám na JCP.org a bylo
> letos
> > 2. května ukončeno... Jaká je náhrada?
> >
> > Původní referenční implementace beansbinding.java.net je taktéž mrtvá a
> již
> > nelze stáhnout (všechny odkazy nefunkční - jako pro naprostou většinu
> toho
> > co na java.net za Sunu bývalo).
> >
> > Grr. Co se to děje? Vy jste to někdo zaregistroval?
> >
> > Libor
> >
>
>
>
> --
> Ondra Medek
>