Un'applicazione client EJB accede al bean di sessione remota appropriato tramite l'interfaccia home del bean.
Perché e quando effettuare questa attività
Il bean di sessione può essere BusinessFlowManager per applicazioni di processo o HumanTaskManager per applicazioni di attività.
Procedura di questa attività
- Aggiungere un riferimento al bean di sessione remota sul descrittore di distribuzione dell'applicazione. Aggiungere un riferimento a uno dei seguenti file:
- Il file application-client.xml per un'applicazione client J2EE (Java 2 Platform, Enterprise Edition)
- Il file web.xml, per un'applicazione Web
- Il file ejb-jar.xml per un'applicazione EJB (Enterprise JavaBeans)
Il riferimento all'interfaccia home remota per le applicazioni di processo viene illustrato nel seguente esempio:
<ejb-ref>
<ejb-ref-name>ejb/BusinessFlowManagerHome</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.ibm.bpe.api.BusinessFlowManagerHome</home>
<remote>com.ibm.bpe.api.BusinessFlowManager</remote>
</ejb-ref>
Il riferimento all'interfaccia home remota per le applicazioni dell'attività è illustrato nel seguente esempio:
<ejb-ref>
<ejb-ref-name>ejb/HumanTaskManagerHome</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.ibm.task.api.HumanTaskManagerHome</home>
<remote>com.ibm.task.api.HumanTaskManager</remote>
</ejb-ref>
Se si utilizza WebSphere Integration Developer per aggiungere il riferimento EJB al descrittore di distribuzione, il collegamenmto 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.
- Comprimere gli stub creati con l'applicazione.
Se l'applicazione viene eseguita su una JVM (Java Virtual Machine) diversa da quella in cui è in esecuzione l'applicazione BPEContainer o TaskContainer, effettuare le seguenti azioni.
- Per applicazioni di processo, comprimere il file <root_installazione>/ProcessChoreographer/client/bpe137650.jar
con il file EAR (enterprise archive) dell'applicazione.
- Per le applicazioni dell'attività, comprimere il file <root_installazione>/ProcessChoreographer/client/task137650.jar
con il file EAR dell'applicazione.
- Se si utilizzano tipi di dati complessi in un processo aziendale o human task e il client non viene eseguito in un'applicazione EJB o in un'applicazione Web, comprimere i file XSD o WSDL corrispondenti con il file EAR dell'applicazione.
- Impostare il parametro Classpath nel file manifest del modulo dell'applicazione per includere il file JAR.
Il modulo dell'applicazione può essere un'applicazione J2EE, un'applicazione Web o un'applicazione EJB.
- Richiamare un riferimento all'interfaccia home del bean di sessione remota dall'interfaccia JNDI (Java).
L'esempio di seguito riportato illustra questo passo per un'applicazione di processo:
// Obtain the default initial JNDI context
InitialContext initialContext = new InitialContext();
// Lookup the remote home interface of the BusinessFlowManager bean
Object result =
initialContext.lookup("java:comp/env/ejb/BusinessFlowManagerHome");
// Convert the lookup result to the proper type
BusinessFlowManagerHome processHome =
(BusinessFlowManagerHome)javax.rmi.PortableRemoteObject.narrow
(result,BusinessFlowManagerHome.class);
L'interfaccia home del bean di sessione contiene un metodo create per gli oggetti EJB.
Il metodo restituisce l'interfaccia remota del bean di sessione.
- Accedere all'interfaccia remota del bean di sessione.
L'esempio di seguito riportato illustra questo passo per un'applicazione di processo:
BusinessFlowManager 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, inoltre, deve essere autorizzato a eseguire tali azioni. Quando viene creata un'istanza del bean di sessione, ad essa viene associato un contesto. Il contesto contiene l'ID principale del chiamante, l'elenco di appartenenza al gruppo, e indica se il chiamante dispone di uno dei ruoli J2EE di
Business Process Choreographer. Il contesto viene utilizzato per verificare l'autorizzazione del chiamante per ciascuna chiamata, anche quando non è impostata la sicurezza globale. Se la sicurezza globale non è impostata, il valore dell'ID principale del chiamante è UNAUTHENTICATED.
- Richiamare le funzioni aziendali 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 avviata e terminata in uno dei seguenti modi:
Suggerimento: Per impedire blocchi critici del database, in transazioni parallele evitare di eseguire istruzioni simili alla seguente:
// Obtain user transaction interface
UserTransaction transaction=
(UserTransaction)initialContext.lookup("jta/usertransaction");
transaction.begin();
//read lock on the activity instance
process.getActivityInstance(aiid);
//write lock on the activity instance
process.claim(aiid);
transaction.commit();
Esempio
Esempio
Di seguito viene riportato un esempio dei passi da 3 a 5 per l'applicazione di un'attività.
//Obtain the default initial JNDI context
InitialContext initialContext = new InitialContext();
//Lookup the remote home interface of the HumanTaskManager bean
Object result =
initialContext.lookup("java:comp/env/ejb/HumanTaskManagerHome");
//Convert the lookup result to the proper type
HumanTaskManagerHome taskHome =
(HumanTaskManagerHome)javax.rmi.PortableRemoteObject.narrow
(result,HumanTaskManagerHome.class);
...
//Access the remote interface of the session bean.
HumanTaskManager task = taskHome.create();
...
//Call the business functions exposed by the service interface
task.callTask(tkiid,input);