快捷搜索:

在不同平台下部署J2EE连接器和J2EE应用

开拓造访资本适配器的EJB组件

EJB组件经由过程资本适配器来造访EIS,在EJB组件中,定义了终极客户端要应用的营业措施,一样平常实现为会话Bean,它一样平常经由过程和多个J2EE组件或者资本适配器交互来完成详细的营业逻辑。在这个案例中,EJB组件的功能异常简单,便是接管终极客户真个哀求,然后经由过程资本适配器调用EIS并得到结果,终极把结果返回给客户端。

EJB组件定义了一个营业措施,它的远程接口的代码如例程1所示。

例程1 EJB组件的远程接口

1 例程1 EJB组件的远程接口

2 package com.hellking.jca.ejb;

3 import java.rmi.RemoteException;

4 import javax.ejb.*;

5 public interface Demo extends EJBObject

6 {

7public String sayHello(String arg) throws RemoteException;

8 }

9

在这个接口里,定义了一个营业措施,便是sayHello(String name)。我们来看EJB组件的实现类部分代码,如例程2所示。

例程2 EJB实现类的部分代码

1 例程2 EJB实现类的部分代码

2 package com.hellking.jca.ejb;

3 import ….

4 public class DemoEJB implements SessionBean

5 {

6private SessionContext sessionCtx;

7

8//营业措施

9public String sayHello(String arg)throws Exception

10{

11System.out.println("echo, arg="+arg);

12String result="";

13try

14{

15InitialContext iniCtx = new InitialContext();

16Context enc = (Context) iniCtx.lookup("java:comp/env");

17Object ref = enc.lookup("eis/DemoEISFactory");//得到连接工厂

18ConnectionFactory dcf = (ConnectionFactory) ref;

19DemoConnection dc =(DemoConnection) dcf.getConnection();//从连接工厂创建连接

20result=dc.sayHello(arg);//调用虚拟连接的营业措施

21dc.close();//应用完,关闭虚拟的连接。

22}

23catch(NamingException e)

24{

25System.err.println("在查找JNDI名字时遇履新错:"+ e);

26}

27return result;//返回调用的结果

28}

29 …

30 }

31

以上代码是范例的应用资本适配器的措施,首先经由过程JNDI来查找连接工厂实例(这个实例由利用办事器自动绑定),然后从这个连接工厂得到连接实例,接下来从连接实例调用营业措施,着末关闭连接。

开拓客户端

本案例应用了两种类型的客户端,一种客户端基于浏览器,它经由过程HTTP造访JSP组件,JSP组件经由过程RMI调用EJB组件,EJB组件再经由过程资本适配器调用EIS;另一种客户端是通俗的Java法度榜样,这个Java法度榜样经由过程RMI调用EJB,EJB组件再经由过程资本适配器调用EIS。

在实现中,JSP代码和通俗java法度榜样的代码基础一样,不合的是它们得到初始高低文情况(InitialContext)的措施不合。

我们看一下简单的JSP客户端,如例程3所示。

例程3 JSP客户端

1 例程3JSP客户端

2 @ page contentType="text/html;charset=gb2312" import="com.hellking.jca.ejb.*,javax.naming.*"%>

3 html>body>form>table>tr>td>请输入名字:

4 td>td>input name=name type=text>td>tr>

5 tr>td>input value=submit type=submit>td>tr>table>form>

6

7 String name=(String)request.getParameter("name");

8 try

9 {

10 InitialContext context=new InitialContext();

11 DemoHome home=(DemoHome)javax.rmi.PortableRemoteObject.narrow(

12context.lookup("ejb/demo"),DemoHome.class);

13 Demo demo=home.create();

14 if(demo!=null)out.println("demo is ok");

15 out.println("调用ejb-->jca-->eis");

16 out.println("发送了:hellking,返回以下的值:");

17 out.println(demo.sayHello(name));

18 out.println("");

19 out.flush();

20}

21catch(Exception e)

22{

23}

24 %>body>html>

25

通俗的java客户端和JSP基础一样,只是必要指定相关的属性才能得到InitialContext实例。可以经由过程以下的措施得到InitialContext实例。

例程4 在通俗的Java客户端得到InitialContext实例

1 例程4 在通俗的Java客户端得到InitialContext实例

2 //创建初始的高低文情况

3 public Client()

4 {

5context=this.getInitialContext();

6 }

7 public InitialContext getInitialContext()

8{

9try

10{

11Properties p=new Properties();

12p.load(new FileInputStream("config.properties"));

13return new InitialContext(p);

14}

15catch(Exception e)

16{

17System.out.println("got ee");

18e.printStackTrace();

19return null;

20}

21}

22

Java客户真个具体代码见src/client/Client.java文件。

下面先容装置和支配的相关问题。

支配措施先容

在不合的利用办事器下支配J2EE利用时,基础上大年夜同小异。支配事情基础上按照以下步骤进行:

把J2EE利用和连接器打包成ear文件;

应用利用办事器厂商供给的对象把ear装置成可以支配的ear包,在装置的历程中,和利用办事器特定的支配描述符自动添加到ear包中;

应用利用办事器供给的节制台进行支配,在支配时,可能必要指定一些属性。

对付JBOSS,没有供给装置对象和支配节制台,必要手工进行编写专有的支配描述,并且手工支配。

在进行装置、支配事情前,请把J2EE利用打包成ear文建,打包后的布局如下:

1 +resource.ear

2+hello.jar

3-META-INF/ejb-jar.xml

4+com/hellking/jca

5+com/hellking/jca/ejb

6+demo.rar

7-META-INF/ra.xml

8+com/hellking/jca

9+web.war

10-WEB-INF/web.xml

11-test.jsp

12-META-INF/application.xml

13

下面首先先容在J2SDKEE1.3下装置和支配J2EE利用。

在J2SDKEE1.3下支配连接器和J2EE利用

step1 首先启动J2EE和支配对象,在节制台输入:

start j2ee -verbose

start deploytool

step2 新建一个利用。

依次点击FileànewàApplication,选择利用的目录,输入利用的名称,如图1所示。

图1新建一个利用

step3 把资本适配器添加到利用中

依次点击File→new→Resource Adapter,在第一个窗口点击next,然后把资本适配器的类添加进来,然后点击next,如图2所示。

图2 添加资本适配器相关的类

鄙人一个窗口指定资本适配器的相关接口和实现类,如图3所示。

图3 指定资本适配器的相关接口和实现类

然后点击vsersion information按钮,输入版真相关的信息,完成后,点击next。

鄙人一个窗口为连接工厂添加两个属性,然后点击next,它们的名称和值如图4所示。

图4 为连接工厂添加属性

在解下来的窗口直接点击next,着末将天生支配代码,点击finish。

Step4 把EJB组件添加到J2EE利用中

File→new→Enterprise Bean,然后把EJB组件相关的类添加进来,如图5所示。

图5 添加EJB组件相关的类

接下来的窗口指定Bean的类型为无状态会话Bean,实现类为DemoEJB,远程接口为Demo,Home接口为DemoHome,然后在接下来的窗口直接点击Next,直到呈现资本工厂引用窗口,添加一个资本工厂引用,它的名字为"eis/DemoEISFactory",类型是"javax.resource.cci.ConnectionFactory",如图6所示。

图6 为EJB添加资本引用

然后点击finish。

Step5 新建一个Web组件,把test.jsp测试页面添加进来。

Step6 在支配对象中指定EJB的JNDI名字为"ejb/demo"。

Step 7 指定Web组件的Context(高低文)为"/resource"。

Step8 反省装置的描述是否精确,选中resource利用,然后点击对象栏 图标即可。

Step9 支配,选中resource利用,然后点击对象栏 ,在弹出的对话框点击finish即可。

Step10 支配成功后,把资本适配器添加到对应的利用办事器,使其运行。如图7所示,选择localhost,点击new。

图7 把资本适配器添加到办事器

然后指定连接工厂的JNDI,如图8所示。

图8 指定连接工厂的JNDI

支配成功后,启动EIS办事器,EIS办事器经由过程履行src/eis-server/run.bat进行启动,然后就可以进行测试了,在浏览器里输入:

http://localhost:8000/resource/test.jsp

进行测试。假如统统顺利,将在页面中返回测试的结果,如图9所示。

图9 测试资本适配器

在测试时,通用可以看到EIS办事器也输出了类似以下的信息:

启动办事.... 监听客户端连接...接管到一个连接 监听客户端连接...接管到以下输入: hellking

在IBM WebShpere5.0下支配连接器和J2EE利用

step1 启动利用法度榜样组装器,打开必要装置的J2EE利用,如图10所示。

图10打开必要装置的J2EE利用

step2 选中DemoEJB,点击绑定选项卡,输入DemoEJB的JNDI名字,然后点击利用,如图11所示。

图11 确定DemoEJB的JNDI名字

step3 其它的值都默认,然后保存变动。

Step4 天生支配代码。顺次点击文件→天生支配代码,在弹出的对话框里点击现在天生。如图12所示。

图12 天生支配代码

留意天生代码时应该是没有差错的,假如有差错,请参考对应的差错信息。

Step5 启动IBM Websphere办事器,在浏览器里输入:

http://localhost:9090/admin

进入治理节制台。

Step6 支配J2EE利用。

选择利用法度榜样→安装新的利用法度榜样,浏览到刚才天生的支配代码,如图13所示,然后点击下一步。

图13 安装利用法度榜样第一步

在接下来的几个窗口直接点击下一步,直到呈现如图14所示的窗口,在这个窗口中指定映射资本引用到资本的JNDI名字,这个是"eis/DemoEISFactory"。

图14 指定映射资本引用到资本的JNDI名字

其它的步骤整个默认即可,设置设置设备摆设摆设完成后,保存设置设置设备摆设摆设。

Step7 启动刚支配的J2EE利用

顺次选择利用法度榜样à企业利用法度榜样,然后选中刚支配的法度榜样,点击启动。

Step8 为资本适配器指定J2C连接工厂

选中刚才支配的J2EE利用,顺次选择连接器模块→demo.rar→J2C 连接工厂,新建一个J2C连接工厂,它的名称为DemoEISFactory,JNDI名称为"eis/DemoEISFactory",其它默认,然后点击确定。着末别忘了保存设置设置设备摆设摆设。

Step9 从新启动利用办事器,启动EIS办事(src/eis-server/run.bat),在浏览器里输入:

http://localhost:9080/resource/test.jsp?name=hellking

进行测试,假如测试成功,那么结果和图9一样。

在JBOSS3.2下支配连接器和J2EE利用

JBOSS虽然没有装置对象和支配节制台,然则在JBOSS下支配J2EE利用和资本适配器同样异常方便,JBOSS支持及时开拓、及时支配的要领,当把要支配的利用拷贝到JBOSS的支配目录下,JBOSS利用办事器会自动支配它。

在JBOSS下支配利用时,可以不打包,而是直接J2EE利用放在名称为奸淫.jar、奸淫.ear的文件夹下。如图15所示。

图15 JBOSS下的J2EE利用的布局

Step1 手工编写资本适配器的支配描述符,如例程5所示。

例程5 JBOSS下的资本适配器的支配描述符

1 例程5 JBOSS下的资本适配器的支配描述符

2 server>

3 mbean code="org.jboss.resource.connectionmanager.NoTxConnectionManager"

4name="jboss.jca:service=NoTxCM,name=DemoRA">

5depends>jboss.jca:service=RARDeployerdepends>

6depends optional-attribute-name="ManagedConnectionFactoryName">

7mbean code="org.jboss.resource.connectionmanager.RARDeployment"

8name="jboss.jca:service=NoTxDemo,name=DemoRA">

9depends optional-attribute-name="OldRarDeployment">

10jboss.jca:service=RARDeployment,name=DemoRA

11depends>

12attribute name="JndiName">NoTransDemoattribute>

13mbean>

14depends>

15depends optional-attribute-name="ManagedConnectionPool">

16mbean code="org.jboss.resource.connectionmanager.JBossManagedConnectionPool"

17name="jboss.jca:service=NoTxPool,name=DemoRA">

18attribute name="MinSize">0attribute>

19attribute name="MaxSize">50attribute>

20attribute name="BlockingTimeoutMillis">5000attribute>

21attribute name="IdleTimeoutMinutes">15attribute>

22attribute name="Criteria">ByContainerattribute>

23mbean>

24depends>

25depends optional-attribute-name="CachedConnectionManager">

26jboss.jca:service=CachedConnectionManager

27depends>

28depends optional-attribute-name="JaasSecurityManagerService">

29jboss.security:service=JaasSecurityManager

30depends>

31mbean>

32server>

33

留意上面的两个黑体字,name=DemoRA,这里的DemoRA必须和资本适配器支配描述符ra.xml中的"DemoRA"维持同等,NoTransDemo是应用这个资本适配器的JNDI名字,应用"java:/ NoTransDemo"来引用它。把这个文件保存为hellkingjca-service.xml。

Step2 手工编写EJB的支配描述符jboss.xml。

并且在支配描述符里指定对资本适配器的引用。如例程6所示。

例程6 在EJB的描述中指定对资本适配器的引用

1 例程6 在EJB的描述中指定对资本适配器的引用

2 xml version="1.0"?>

3 jboss>

4 secure>falsesecure>

5container-configurations />

6resource-managers />

7enterprise-beans>

8session>

9ejb-name>DemoEJBejb-name>

10jndi-name>ejb/demojndi-name>

11resource-ref>

12res-ref-name>eis/DemoEISFactoryres-ref-name>

13jndi-name>java:/NoTransDemojndi-name>

14resource-ref>

15session>

16enterprise-beans>

17 jboss>

18

留意对资本适配器引用的JNDI名字,它必须和hellkingjca-service.xml的指定的JNDI名字同等。把这个文件保存在resource.ear/hello.jar/META-INF/目录下。

Step 3 支配,把resource.ear文件夹和hellkingjca-service.xml拷贝到%JBOSS_HOME%\\server\\default\\deploy\\目录下。启动JBOSS,支配就会自动完成。

Step4 测试,启动JBOSS和EIS办事(src/eis-server/run.bat),在浏览器里输入:

http://localhost:8080/resource/test.jsp?name=hellking

即可进行测试,假如统统成功,那么结果应该和图9一样。

您可能还会对下面的文章感兴趣: