Accesso al bean della sessione locale

Un'applicazione client EJB accede al bean locale di sessione appropriato tramite l'interfaccia home del bean.

Perché e quando effettuare questa attività

Il bean di sessione può essere il bean di sessione LocalBusinessFlowManager per le applicazioni del processo o il bean di sessione LocalHumanTaskManager per le applicazioni human task.

Procedura di questa attività

  1. Aggiungere un riferimento al bean di sessione locale sul descrittore di distribuzione dell'applicazione. Aggiungere un riferimento ad uno dei seguenti file:
    • Il file application-client.xml per un'applicazione client Java 2 Platform, Enterprise Edition (J2EE)
    • Il file web.xml, per un'applicazione Web
    • Il file ejb-jar.xml per un'applicazione Enterprise JavaBeans (EJB)
    Il riferimento all'interfaccia home locale per le applicazioni del processo viene illustrato nel seguente esempio:
    <ejb-local-ref>
    	<ejb-ref-name>ejb/LocalBusinessFlowManagerHome</ejb-ref-name>
    	<ejb-ref-type>Session</ejb-ref-type>
    	<local-home>com.ibm.bpe.api.LocalBusinessFlowManagerHome</local-home>
    	<local>com.ibm.bpe.api.LocalBusinessFlowManager</local>
    </ejb-local-ref>
    Il riferimento all'interfaccia home locale per le applicazioni dell'attività è illustrato nel seguente esempio:
    <ejb-local-ref>
    	<ejb-ref-name>ejb/LocalHumanTaskManagerHome</ejb-ref-name>
    	<ejb-ref-type>Session</ejb-ref-type>
    	<local-home>com.ibm.task.api.LocalHumanTaskManagerHome</local-home>
    	<local>com.ibm.task.api.LocalHumanTaskManager</local>
    </ejb-local-ref>

    Se si utilizza WebSphere Integration Developer per aggiungere il riferimento EJB al descrittore di distribuzione, il bind del riferimento EJB viene creato automaticamente al momento della distribuzione dell'applicazione. Per ulteriori informazioni sull'aggiunta dei riferimenti EJB, fare riferimento alla documentazione di WebSphere Integration Developer.

  2. Richiamare un riferimento all'interfaccia home locale del bean di sessione locale da JNDI (Java Naming and Directory Interface).

    L'esempio di seguito riportato illustra questo passo per un'applicazione del processo:

    // Ottenere il contesto JNDI iniziale predefinito
    InitialContext initialContext = new InitialContext();
    
      // Ricercare l'interfaccia home locale del bean LocalBusinessFlowManager
     
       LocalBusinessFlowManagerHome processHome = 
            (LocalBusinessFlowManagerHome)initialContext.lookup
            ("java:comp/env/ejb/LocalBusinessFlowManagerHome");
    L'interfaccia home del bean di sessione locale contiene un metodo create per gli oggetti EJB. Il metodo restituisce l'interfaccia locale del bean di sessione.
  3. Accedere all'interfaccia locale del bean di sessione locale.

    L'esempio di seguito riportato illustra questo passo per un'applicazione del processo:

    LocalBusinessFlowManager process = processHome.create();

    L'accesso al bean di sessione non garantisce l'esecuzione da parte del chiamante di tutte le azioni fornite dal bean; il chiamante deve essere autorizzato a eseguire queste azioni. Quando viene creata un'istanza del bean di sessione, un contesto viene associato all'istanza del bean di sessione. Il contesto contiene l'ID principale del chiamante, l'elenco di appartenenze e indica se il chiamante dispone di uno dei ruoli J2EE Business Process Choreographer. Il contesto viene utilizzato per verificare l'autorizzazione del chiamante per ciascuna chiamata, anche quando la sicurezza globale non è impostata. Se la sicurezza globale non è impostata, l'ID principale del chiamante ha valore UNAUTHENTICATED.

  4. Richiamare le funzioni business esposte dall'interfaccia del servizio.

    L'esempio di seguito riportato illustra questo passo per un'applicazione del processo:

    process.initiate("MyProcessModel",input);
    Le chiamate dalle applicazioni vengono effettuate come transazioni. Una transazione viene stabilita e terminata in uno dei seguenti modi:
    • Automaticamente da WebSphere Application Server (il descrittore di distribuzione specifica TX_REQUIRED).
    • In modo esplicito dall'applicazione. È possibile raggruppare le chiamate dell'applicazione in un'unica transazione:
      // Ottenere l'interfaccia transazione utente
      UserTransaction transaction= 
             (UserTransaction)initialContext.lookup("jta/usertransaction");
      
      // Iniziare una transazione
      transaction.begin();
      
      // Chiamate delle applicazioni ...
      
      // Sulla restituzione riuscita, eseguire il commit della transazione
      transaction.commit();
    Suggerimento: per impedire blocchi critici del database, evitare l'esecuzione di una sequenza di istruzioni simile alle seguenti transazioni parallele:
    // Ottenere l'interfaccia transazione utente
    UserTransaction transaction= 
           (UserTransaction)initialContext.lookup("jta/usertransaction");
    
    transaction.begin();
    
    //blocco lettura sull'istanza di attività 
    process.getActivityInstance(aiid);     
    //blocco scrittura sull'istanza di attività
    process.claim(aiid);               
         
    transaction.commit();

Esempio

Esempio

Di seguito viene riportato un esempio del dei passi da 2 a 4 per l'applicazione di un'attività.

// Ottenere il contesto JNDI iniziale predefinito
InitialContext initialContext = new InitialContext();

// Ricercare l'interfaccia home locale del bean LocalHumanTaskManager
LocalHumanTaskManagerHome taskHome = 
        (LocalHumanTaskManagerHome)initialContext.lookup
        ("java:comp/env/ejb/LocalHumanTaskManagerHome");

...
//Accedere all'interfaccia locale del bean di sessione locale
LocalHumanTaskManager task = taskHome.create();

...
//Richiamare le funzioni business esposte dall'interfaccia del servizio.
task.callTask(tkiid,input);
Concetti correlati
Autorizzazione dei ruoli per i processi aziendali
Autorizzazione dei ruoli per human task

(c) Copyright IBM Corporation 2005, 2006.
This information center is powered by Eclipse technology (http://www.eclipse.org)