EJB 3入門

3809 ワード

やはりEJB 3の例を挙げてみましょう.
まず、リモートインタフェースを定義します.
package com.bms;

import javax.ejb.Remote;

@Remote
public interface FacadeBeanRemote {
	
	public String question();

}

このインタフェースは、ステートレスセッションBeanで実装される.
package com.bms;

import javax.ejb.Stateless;

/**
 * Session Bean implementation class Facade
 */
@Stateless(mappedName = "FacadeBean")
public class FacadeBean implements FacadeBeanRemote {

    /**
     * Default constructor. 
     */
    public FacadeBean() {
        // TODO Auto-generated constructor stub
    }

	@Override
	public String question() {
		return "who am i";
	}

}

ejb-jar.xmlの内容は次のとおりです.
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
  <display-name>bpm3-ejb </display-name>
</ejb-jar>

weblogic-ejb-jar.xmlの内容は次のとおりです.
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-ejb-jar xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.2/weblogic-ejb-jar.xsd">
    <!--weblogic-version:10.3.6-->
    <wls:weblogic-enterprise-bean>
        <wls:ejb-name>FacadeBean</wls:ejb-name>
        <wls:stateless-session-descriptor></wls:stateless-session-descriptor>
        <wls:jndi-name>FacadeBean</wls:jndi-name>
    </wls:weblogic-enterprise-bean>
</wls:weblogic-ejb-jar>

EJBプロジェクトをweblogic serverに配備します.
クライアント呼び出しコードは次のとおりです.
package com.bms;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Ejb3InvocationTest {

	public static void main(String[] args) {
		Properties p = new Properties();
		p.put(Context.INITIAL_CONTEXT_FACTORY,
				"weblogic.jndi.WLInitialContextFactory");
		p.put(Context.PROVIDER_URL, "t3://localhost:7001");
		p.put(Context.SECURITY_PRINCIPAL, "weblogic");
		p.put(Context.SECURITY_CREDENTIALS, "welcome1");

		InitialContext ctx;
		try {
			ctx = new InitialContext(p);
			FacadeBeanRemote remote = (FacadeBeanRemote) ctx
					.lookup("FacadeBean#com.bms.FacadeBeanRemote");
			System.out.println(remote.question());

		} catch (NamingException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		}

	}

}

JNDIの検索名はMappedName#リモートインタフェースのクラス名、すなわちFacadeBean#comである.bms.FacadeBeanRemote.
クライアントコードが正常に呼び出されるように、EJBプロジェクトのLibrariesでWebLogic System Librariesを外し、プロジェクトパスの下にwlfullclientを追加することに注意してください.jarパッケージ.
クライアント呼び出しコードを実行し、「who am i」を印刷します.
Done!!!!!!!!!!!!!