Accesso al bean di sessione remota

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à

  1. 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.

  2. 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.

    1. Per applicazioni di processo, comprimere il file <root_installazione>/ProcessChoreographer/client/bpe137650.jar con il file EAR (enterprise archive) dell'applicazione.
    2. Per le applicazioni dell'attività, comprimere il file <root_installazione>/ProcessChoreographer/client/task137650.jar con il file EAR dell'applicazione.
    3. 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.
    4. 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.

  3. 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.
  4. 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.

  5. 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:
    • 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:
      // Obtain user transaction interface
      UserTransaction transaction= 
             (UserTransaction)initialContext.lookup("jta/usertransaction");
      
      // Begin a transaction
      transaction.begin();
      
      // Applications calls ...
      
      // On successful return, commit the transaction
      transaction.commit();
    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);
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)