Newsgroup: it.comp.java
Titolo: ejbCreate()

Salve a tutti!
Qualcuno mi saprebbe dire perchè se richiamo il metodo miaEjbHome.create()
non viene generato alcun messaggio di errore, tuttavia il metodo
restituisce null?
Quando avviene questo? Mi sarei aspettato un'eccezione CreateException e
invece niente. Tra l'altro il metodo ejbCreate non implementa (ancora)
niente. 
Ps. l'ejb è di tipo session stateful.
Grazie!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
Puoi essere un po' piů preciso (il codice postato per esempio)?
Sei sicuro di non aver problemi JNDI in precedenza?
Hai implementato i metodi di business del bean?
Che server stai usando?

 Che server stai usando?
Certo, in effetti sono stato un pò troppo conciso. Allora, utilizzo JBoss
com AS. Sino ad ora il mio ejb funzionava correttamente sinchè lo
istanziavo in una classe client pregenerata da JDeveloper. Successivamente
ho realizzato una classe Business Delegate che incapsulasse tutta la fase
di istanziazione del bean, classe che si trova in un package differente
(ovviamente), ma nello stesso jar dell'ejb. 
Ecco il codice del business delegeate:
public class BusinessDelegate 
{
 
  SessionFacade facade = null;
  ServiceLocator sl = null;
 public BusinessDelegate() throws BusinessException
  {
    try{ 
        sl = ServiceLocator.getInstance();
        SessionFacadeHome home =
(SessionFacadeHome)sl.getEJBHome(ServiceLocator.SESSION_FACADE_EJB_REMOTE);
 
        SessionFacade facade = home.create();
    }
    catch (Exception e)
    {
      throw new BusinessException("Impossibile creare l'istanza dello stub
client dell'ejb SessionFacade. " + e.getMessage(), e);
    }
 
  }
 
 
  public Collection struttureRicettive() throws BusinessException
  {
    Collection toReturn;
    try
    {
      toReturn = facade.elencoStruttureRicettive();
    }
    catch(DAOException e)
    {
      throw new BusinessException("Errore nell'accesso al database nel
tentativo di ottenere le strutture " +
      "ricettive associate all'utente. " + e.getMessage(), e);
    }
    catch(RemoteException re)
    {
      throw new BusinessException("Errore di comunicazione remota nel
tentativo di " +
      "ottenere le strutture ricettive associate all'utente.", re);
    }
 
    return toReturn;
 
  }
L'eccezione generata è ovviamente NullPointerException visto che l'oggetto
facade è nullo.
Tuttavia non è un problema JNDI visto che il mio Service Locator mi
restituisce l'interfaccia Home correttamente.
Spero che questa volta sia stato abbastanza chiaro.
Ciao e grazie!
Nico


 Che server stai usando?
..tra l'altro, inserendo un piccolo verbose, ho notato che il metodo
ejbCreate() del bean viene eseguito. Mi sembra che è come se lo stub
dell'interfaccia remota non venga istanziata sul client. E' solo
un'impressione da inesperto...
Ciao... 
Nico


 ejbCreate() del bean viene eseguito. Mi sembra che č come se lo stub


 >


Cosģ, per curiositą, piuttosto del service Locator hai provato ad 
utilizzare L'Initial Context?

 utilizzare L'Initial Context?
Si, infatti... ho provato a copiare il codice del Service locator nel
metodo del Business Delegate e funziona. Ma perchč? Se devo utilizzare
l'Initial context che l'ho fatto a fare il Service Locator? E se poi
dovesse cambiare il reference JNDI che faccio, devo modificare tutte le
istruzioni che lo usano anche nel business delegate?
Che casino... 


Non so cosa faccia esattamente il tuo Service Locator, ma comunque di 
solito si utilizza JNDI per localizzare un bean... Proprio per il motivo 
che hai detto, cioé evitare di ricompilare tutto l'applicativo se il 
bean viene spostato!!!!
Di fatto le informazioni di localizzazione del bean sono nel descriptor 
xml e i bean che utilizzano altri bena posso fare dei collegamenti 
simbolici sempre nel descrittore XML (che vengono letti sempre da JNDI 
in modo trasparente), in questo modo anche se i bean vengono sopostati, 
è sufficeinte correggere il descrittore e non ricompilare le classi...
Sono stato un po' criptico, ma se guardi le sezioni ejb-ref e 
ejb-local-ref del descrittore puoi capire...
Gian Luca