EJB学习笔记---

1.胖客户端:指的是定义的接口太多了,接口做的工作太多;

胖接口:

2.EJB实现类型的定义,用注解的方式,当一个EJBbean,实现了多个接口的时候,


需要用注解的方式指明哪一个接口是用Remote方式访问,哪一个接口使用


local方式访问

3.实现多个接口的情况下定义,访问方式:

有三种:

a.第一种:在接口的实现类中:

@Remote(value={EJB04Interface01.class,EJB04Interface02.class})//


定义哪些接口使用remote方式访问

@Local(value={EJB04Interface03.class,EJB04Interface04.class})*/

public class Ejb04Bean implements


EJB04Interface01,EJB04Interface02

,EJB04Interface03,EJB04Interface04{

}

b.第二种:在接口的实现类中定义,简单的方式

@Remote({EJB04Interface01.class,EJB04Interface02.class})//定义


哪些接口使用remote方式访问

@Local({EJB04Interface03.class,EJB04Interface04.class})*/

/**

* 注意:

* 1.如果是remote,和local访问方式,且()中定义的只有value一个


属性的时候

* 可以使用这种简便的方法定义value属性;去掉value=

* 2.如果定义在了接口的前面,那么这个注解在这个地方就不用定义了

*/

--------------------------------------------------------------------


EJB学习例子:多接口的时实现类处理方法:

新建EJB项目:EJBTest_04

1.com.credream.ejb建包

2.编写接口:

EJB04Interface01.java


package com.credream.ejb;


import javax.ejb.Remote;


@Remote

public interface EJB04Interface01 {

public void m1();

}

----------------------------------------------------

EJB04Interface02.java


package com.credream.ejb;


import javax.ejb.Remote;


@Remote

public interface EJB04Interface02 {

public void m2();

}


-----------------------------------------------


EJB04Interface03.java

package com.credream.ejb;


import javax.ejb.Local;


@Local

public interface EJB04Interface03 {

public void m3();

}

------------------------------------------------


EJB04Interface04.java

package com.credream.ejb;


import javax.ejb.Local;


@Local

public interface EJB04Interface04 {

public void m4();

}

--------------------------------------------------------------

3.编写接口的实现类:

Ejb04Bean.java

package com.credream.ejb;


import javax.ejb.Local;

import javax.ejb.Remote;

import javax.ejb.Stateless;


@Stateless(name="ejb04beanname")

/*@Remote({EJB04Interface01.class,EJB04Interface02.class})//定义哪些


接口使用remote方式访问

@Local({EJB04Interface03.class,EJB04Interface04.class})*/

/**

* 注意:

* 1.如果是remote,和local访问方式,且()中定义的只有value一个属性的


时候

* 可以使用这种简便的方法定义value属性;去掉value=

* 2.如果定义在了接口的前面,那么这个注解在这个地方就不用定义了

*/

/*@Remote(value={EJB04Interface01.class,EJB04Interface02.class})//定


义哪些接口使用remote方式访问

@Local(value={EJB04Interface03.class,EJB04Interface04.class})*/

public class Ejb04Bean implements EJB04Interface01,EJB04Interface02

,EJB04Interface03,EJB04Interface04{


public void m1() {

System.out.println("m1方法被调用了!!!");


}


public void m2() {

System.out.println("m2方法被调用了!!!");


}


public void m3() {

System.out.println("m3方法被调用了!!!");


}


public void m4() {

System.out.println("m4方法被调用了!!!");


}


}

-----------------------------------------------------------------

4.编写远程客户端:EJBTest04_client

a.com.credream.ejb

5.编写客户端代码:EJB04BeanClient.java

package com.credream.ejb;


import javax.naming.InitialContext;


public class EJB04BeanClient {


/**

* @param args

*/

public static void main(String[] args) throws Exception{

InitialContext context=new InitialContext();

/*EJB04Interface01 ejb04Interface01=


(EJB04Interface01) context.lookup("ejb04beanname/remote");

ejb04Interface01.m1();

EJB04Interface02 ejb04Interface02=(EJB04Interface02)


context.lookup("ejb04beanname/remote");

ejb04Interface02.m2();*/

//没有把EJB04Interface03定义成local访问

EJB04Interface03 ejb04Interface03=(EJB04Interface03)


context.lookup("ejb04beanname/remote");

ejb04Interface03.m3();

//注意:远程客户端是用不了local的

}

}

--------------------------------------------------------------

5.导入EJB的jar包,并且写入类路径中jndi.properties文件

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

java.naming.provider.url=localhost

-----------------------------------------------------------