WebSphere Extended Deployment, Version 6.0.x     Betriebssysteme: AIX, HP-UX, Linux, Solaris, Windows

Session-Bean programmieren

Öffnen Sie die Datei AccountTransactionBean.java in WSAD Version 5.1 und sehen Sie sich den Code an. In der Session-Bean werden der Name der Ressourcenreferenz und die aufgelösten JNDI-Namen definiert. Der folgende Code in dieser Bean definiert die Attribute.
    /** Der Name der Ressourcenreferenz für die Proxy-Datenquelle */
    private static String proxyResRef = "jdbc/proxyDS";

    	/** Ressourcenreferenz 1 für Datenquelle */
    	private static String resRef1 = "jdbc/myDS1";

    	/** Ressourcenreferenz 2 für Datenquelle */
    	private static String resRef2 = "jdbc/myDS2";

    	/** Globaler JNDI-Name der Datenquelle für Ressourcenreferenz 1 */
    private String globalDSJNDIName1 = null;

    	/** Globaler JNDI-Name der Datenquelle für Ressourcenreferenz 2 */
    private String globalDSJNDIName2 = null;
    
    /** Globaler JNDI-Name der Datenquelle für die Proxy-DataSource-Ressourcenreferenz*/
    private String globalProxyDSJNDIName = null;
Außerdem definieren Sie eine WSProxyDataSourceHelper-Instanz, damit die Session-Bean diese verwenden kann, um den JNDI-Namen der Datenquelle aufzulösen und den JNDI-Namen der Datenquelle für die Transaktion festzulegen.
	/** 
	 * Die WSProxyDataSourceHelper-Instanz, die verwendet wird, um den JNDI-Namen
	 * der Datenquelle für die aktuelle Transaktion festzulegen und die Ressourcenreferenz
	 * für die Datenquelle in den globalen JNDI-Namen aufzulösen.
	 */
	WSProxyDataSourceHelper dsHelper = null;

Im Folgenden wird die Methode setSessionContext gezeigt:
	public void setSessionContext(javax.ejb.SessionContext ctx) {
        	mySessionCtx = ctx;

        // WSProxyDataSourceHelper und Local-Home-Interfaces der EJB suchen
        try  {    
            	InitialContext ic = new InitialContext();
            dsHelper = (WSProxyDataSourceHelper) ic.lookup(WSProxyDataSourceHelper.JNDI_NAME);
            			accountHome = (AccountLocalHome) ic.lookup(accountHomeJNDIName);
            			accountOwnerHome = (AccountOwnerLocalHome) ic.lookup(accountOwnerHomeJNDIName);
        }
              catch(Exception e){
            		throw new EJBException(e);
        }
        
        // Servernamen abrufen
        		AdminService service = AdminServiceFactory.getAdminService();
        SERVER_NAME =
            service.getCellName()
                + "/"
                				+ service.getNodeName()
                + "/"
                + AdminServiceFactory.getAdminService().getProcessName();

        		// Ressourcenreferenz in globale JNDI-Namen für Datenquelle auflösen
        try  {    
            globalDSJNDIName1 = dsHelper.resolveDataSourceReference(resRef1);
            			globalDSJNDIName2 = dsHelper.resolveDataSourceReference(resRef2);
            globalProxyDSJNDIName = dsHelper.resolveDataSourceReference(proxyResRef);
        }
        catch (ResRefNotFoundException rrnfe) {
            			throw new EJBException(rrnfe);
Verwenden Sie die folgende Anweisung, um die WSProxyDataSourceHelper-Instanz im JNDI-Namespace zu suchen:
dsHelper = (WSProxyDataSourceHelper ) ic.lookup(WSProxyDataSourceHelper .JNDI_NAME);
Suchen Sie anschließend wie gewohnt AccountLocalHome und AccountOwnerLocalHome. Rufen Sie danach mit der API AdminService den Servernamen ab. Mit diesem Servernamen können Sie prüfen, ob die Partitions-Routing ordnungsgemäß funktioniert. Der Benutzer selbst muss dies in seiner Anwendung nicht tun. Die WPF-Laufzeitumgebung gewährleistet ein ordnungsgemäßes Partitions-Routing.
Verwenden Sie die folgende Anweisung, um die Referenzen auf die Datenquellen aufzulösen:
globalDSJNDIName1 = dsHelper.resolveDataSourceReference(resRef1);
Während der Anwendungsentwicklung ist dem Entwickler nicht bekannt, welchem JNDI-Namen diese Ressourcenreferenz zugeordnet wird. Die Komponente Proxy DataSource stellt eine API bereit, mit der die Anwendung den JNDI-Namen der Datenquelle abrufen kann. Dieser JNDI-Name wird verwendet, um der Laufzeitumgebung die zu verwendende Datenquelle mitzuteilen.
Sehen Sie sich jetzt die Business-Methode an. Im Folgenden sehen Sie das Codefragment für eine der Business-Methoden "withdraw" in AccountTransactionBean.java:
	/**
	 * Geld von einem Konto abheben
	 * @param accountId
	 * @param amount
	 * @return
	 * @throws InSufficientFundException
	 */
	public String withdraw(String accountId, float amount) throws 
  InSufficientFundException {
		// Datenquelle angeben, auf die diese Transaktion zugreift
		setDataSource(accountId);

		try {
			AccountLocal account = accountHome.findByPrimaryKey(accountId);
			account.withdraw(amount);
		}
		catch (ObjectNotFoundException onfe) {
			throw new EJBException(onfe);
		}
		catch (FinderException fe) {
			throw new EJBException(fe);
		}
		return SERVER_NAME;
	}

Der Unterschied zwischen dieser Methode und einer normalen Methode ist die folgende hinzugefügte Anweisung:
		// Datenquelle angeben, auf die diese Transaktion zugreift
		setDataSource(accountId);
Im Folgenden wird die Methode setDataSource gezeigt:
	    /**
     	 * Datenquelle angeben, die die CMP für die aktuelle Transaktion verwendet.
     	 * Wenn die accountID mit W beginnt, wird die Datenquelle 1 verwendet.
  * Beginnt die accountID mit E, wird die Datenquelle 2 verwendet.
* 
     	 * @param s
     */
    private void setDataSource(String s) {
        		if (s.startsWith("W")) {
            dsHelper.setCurrentDataSourceJndiName(globalProxyDSJNDIName, globalDSJNDIName1);
        }
        else {
            dsHelper.setCurrentDataSourceJndiName(globalProxyDSJNDIName, globalDSJNDIName2);
        }
    }
Die Methode setDataSource verwendet WSProxyDataSourceHelper, um den Namen der aktuellen Datenquelle für die aktuelle Transaktion zu setzen. Wenn die accountId mit "W" beginnt, was bedeutet, dass die Konto-ID in der Datenbank an der Westküste gespeichert werden soll, wird der JNDI-Name globalDSJNDIName1 im Thread definiert. Beginnt die Konto-ID mit "E", was bedeutet, dass die Konto-ID in der Datenbank an der Ostküste gespeichert werden soll, wird der JNDI-Name globalDSJNDIName2 im Thread definiert.

Jetzt ist in Ihrer Anwendung die Unterstützung von Proxy-Datenquellen aktiviert. Im nächsten Schritt wird demonstriert, wie Sie die DB2-Datenquellen und die Proxy-Datenquelle konfigurieren.




Related concepts
Anwendungen mit der Unterstützung für Proxy-Datenquellen in WSAD entwickeln

Referenzartikel    

Nutzungsbedingungen | Feedback Letzte Aktualisierung: Mar 23, 2006 9:57:42 AM EST
http://publib.boulder.ibm.com/infocenter/wxdinfo/v6r0/index.jsp?topic=?topic=/com.ibm.websphere.xd.doc/info/WPF51/rwpfprgramsessionbean.html

© Copyright IBM 2005, 2006. Alle Rechte vorbehalten.
Dieses Information Center beruht auf der Eclipse-Technologie. (http://www.eclipse.org)