Gestione del carico di lavoro |
Note tecniche per l'esempio BeenThere |
Individuazione del codice sorgente |
Visualizzazione delle note di codifica |
Il codice sorgente per l'applicazione BeenThere si trova della directory
Per i clienti z/OS: La struttura ad albero dei codici sorgente per gli esempi non viene fornita in z/OS, perché le applicazioni di esempio non sono create sulla piattaforma z/OS.
L'applicazione BeenThere mostra le capacità WLM (workload management) di IBM WebSphere Application Server Network Deployment Edition. L'applicazione BeenThere contiene il servlet BeenThere e il bean enterprise di sessione senza stato BeenThere. Il servlet BeenThere mostra il server delle applicazioni in un cluster al quale viene distribuita la richiesta HTTP. Il bean enterprise BeenThere mostra il server delle applicazioni in un cluster al quale viene distribuita la richiesta del bean enterprise. Il bean enterprise BeenThere viene richiamato dal servlet BeenThere.
Il servlet BeenThere visualizza le seguenti informazioni:
Inoltre, il servlet BeenThere può effettuare le seguenti azioni:
L'ambiente dell'esempio utilizzato per dimostrare la gestione del carico di lavoro del contenitore Web e del contenitore EJB viene descritto nella seguente illustrazione:
Figura 1 L'ambiente dell'esempio
Le macchine in questo ambiente comprendono:
La configurazione contiene due cluster di server, MyWebCluster e MyEJBCluster. Un cluster di server è costituito da un gruppo di server delle applicazioni. Se uno dei server membri non ha esito positivo, le richieste vengono inviate agli altri membri del cluster. Ciascuno dei cluster dell'esempio è composto da due membri del cluster. Il cluster MyWebCluster è composto dai membri del cluster, WebServer1 e WebServer2, e il cluster MyEJBCluster è composto dai membri del cluster, EJBServer1 e EJBServer2.
Questo ambiente configurato è un esempio utilizzato per dimostrare come eseguire l'applicazione BeenThere. In un ambiente di produzione, è necessaria una pianificazione della capacità delle risorse per stabilire quanti membri del server delle applicazioni creare in un determinato numero di macchine, in base al carico di richieste client previste.
WebSphere Application Server Network Deployment Edition fornisce la WLM (workload management) delle richieste HTTP e EJB.
La gestione dal carico di lavoro delle richieste HTTP viene gestita dal plugin del server Web.
Si consideri la configurazione della Figura 1. La macchina web esegue un IBM HTTP Server che distribuisce le richieste HTTP ai server delle applicazioni WebServer1 e WebServer2 che comprendono i membri del cluster MyWebCluster ed eseguono il servlet BeenThere. Questi server delle applicazioni sono configurati rispettivamente sulle macchine app1 e app2. Inoltre, il plugin IBM HTTP Server è configurato in modo che WebServer1 abbia un peso WLM di 2 e WebServer2 abbia un peso WLM di 3. È possibile pensare ai pesi come contatori che partono dal relativo valore configurato e vengono incrementati di 1 in seguito ad ogni richiesta elaborata. Le richieste vengono distribuite utilizzando un processo arrotondato per ciascun server delle applicazioni con un valore del peso superiore a 0. Se il valore è 0, il server delle applicazioni viene ignorato. Dopo che tutti i contatori del peso sono stati portati a 0, tutti i contatori del peso del server delle applicazioni vengono reimpostati sul valore configurato e il processo di distribuzione inizia di nuovo.
La gestione del carico di lavoro delle richieste EJB viene gestita internamente dal controller WLM in WebSphere Application Server.
Si consideri la configurazione nella Figura 1. Viene definito un cluster MyEJBCluster composto dai membri del server delle applicazioni EJBServer1 e EJBServer2 responsabili dell'esecuzione del bean enterprise di sessione senza stato BeenThere. Il servlet BeenThere esegue una chiamata all'enterprise bean per ottenere le informazioni di esecuzione sul server delle applicazioni in cui il bean enterprise viene eseguito. Inoltre, questi server sono configurati con i valori del peso rispettivamente di 1 e 3.
Sulla piattaforma z/OS, i valori del peso vengono utilizzati per bilanciare le richieste HTTP, ma non vengono utilizzati per bilanciare le richieste IIOP (Internet Inter-ORB Protocol).
L'applicazione BeenThere utilizza le interfacce di programmazione dell'applicazione amministrativa in WebSphere Application Server. Con queste interfacce, le applicazioni possono accedere alle informazioni di configurazione di ambiente e runtime:
Fornisce le interfacce dal lato server per ottenere informazioni sugli attributi del server delle applicazioni nonché la capacità di eseguire funzioni di gestione JMX MBean standard.
Fornisce le interfacce dal lato client per un oggetto AdminService remoto. La classe AdminClient fornisce un proxy all'oggetto AdminService remoto mediante uno dei connettori JMX (Java Management Extensions) supportati.
Fornisce le interfacce per interrogare o modificare i dati di configurazione, localmente o in remoto, e gestisce l'ubicazione e il contenuto dei documenti di configurazione del server delle applicazioni.
Per dimostrare la potenza e la flessibilità delle applicazioni quando utilizzano le interfacce amministrative WebSphere Application Server, l'applicazione BeenThere utilizza tutte queste interfacce nei seguenti modi:
L'interfaccia AdminService viene utilizzata dal servlet BeenThere e dall'enterprise bean per ottenere il nome nodo, il nome del server delle applicazioni e l'ID processo per il server delle applicazioni in cui vengono eseguiti. Il seguente segmento di codice mostra come ottenere le informazioni sugli attributi server:
// Get the WebSphere AdminService. AdminService adminService = AdminServiceFactory.getAdminService(); // Get the WebSphere Admin Local Server MBean instance. ObjectName localServer = adminService.getLocalServer(); // Get the Node name. nodeName = (String) adminService.getAttribute(localServer, "nodeName"); // Get the Application Server name. serverName = (String) adminService.getAttribute(localServer, "name"); // Get the Application Server Process Id. serverPid = (String) adminService.getAttribute(localServer, "pid");
L'interfaccia AdminClient viene utilizzata per collegarsi al processo del gestore distribuzione per recuperare i valori del carico membro del cluster per tutti i membri del server delle applicazioni del cluster che esegue il bean enterprise BeenThere. Il seguente segmento di codice mostra come ottenere un'istanza dell'interfaccia AdminClient:
// Get the WebSphere AdminService. AdminService adminService = AdminServiceFactory.getAdminService(); // Richiamare l'istanza AdminClient per il gestore di distribuzione. adminClient = adminService.getDeploymentManagerAdminClient();
L'interfaccia ConfigService viene utilizzata per leggere il documento di configurazione di WebSphere Application Server cell.xml per stabilire se l'applicazione BeenThere viene eseguita in un ambiente WebSphere Application Server Base Edition oppure Network Deployment Edition. Il seguente segmento di codice mostra come stabilire l'ambiente in cui viene eseguita un'applicazione:
// Create a new WebSphere Management Session. Session session = new Session(); // Get the WebSphere ConfigService instance // for the application server executing this servlet. ConfigService configService = ConfigServiceFactory.getConfigService(); if (configService != null) { // Read the cell.xml document. ObjectName cellObj = ConfigServiceHelper.createObjectName(null, "Cell"); ObjectName[] cellObjs = configService.queryConfigObjects(session, null, cellObj, null); if (cellObjs.length != 0) { cellObj = cellObjs[0]; String cellName = (String) configService.getAttribute(session, cellObj, "name"); String cellType = (String) configService.getAttribute(session, cellObj, "cellType"); if (cellType.equals("DISTRIBUTED")) { websphereND = true; } } // Release the Session. configService.discard(session);Se viene rilevato un ambiente Network Deployment, l'opzione Display bean cluster member weights viene abilitata e visualizzata perché è valida solo in questo tipo di ambiente. In caso contrario, questa opzione non viene visualizzata come opzione selezionabile.