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à
- 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.
- 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.
- 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.
- 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);