开发访问 enterprise bean 的 portlet
本文描述了如何通过 portlet 代码来调用遵循 Sun 的 Enterprise JavaBean
体系结构(以下简称 EJB)的 enterprise bean。本文包含了循序渐进的指令,用于开发访问无状态会话 EJB 的
portlet。同时还提供了 EJB 企业应用程序以供下载,以及用于将该程序部署到 WebSphere Application Server
的详细指令。
引言
对
于企业应用程序,Enterprise Archive (EAR) 文件可以既包含 Web 模块也包含 EJB 模块。如果访问 EJB 的
servlet 部署在单个 EAR 文件中,那么就可以很容易的开发它。然而,portlet 只能作为 WAR
文件来开发,您不能在单个文件中部署 portlet 和 EJB。因此,开发通过 portlet 代码访问 EJB 的 portlet
不同于开发访问 EJB 的 servlet。
本文针对需要通过 portlet 代码来访问 EJB 的 portlet 开发人员。要想充分的理解本文,您应该了解如何使用 WebSphere 环境在 Websphere Portal 中开发和部署 portlet。
要理解本文描述的场景,您需要
下载范例 ZIP 文件并将内容解压缩到硬盘上的一个目录。您还需要有权使用下列环境:
- IBM® WebSphere® Studio Application Developer V5.1.2(以下简称 Application Developer),用于开发企业应用程序。
- 将 IBM Portal Toolkit 5.0.2.2 作为插件安装到 Application Developer,用于开发 portlet。
- IBM WebSphere Application Server V5.0.2,用于安装该应用程序。
部署企业应用程序范例
附加的企业应用程序(在
下载中)遵照 EJB 1.1 规范。它包括一个 EAR 文件和一个包含 EJB 会话 bean 的 JAR 文件。该企业应用程序项目包含一个无状态会话 bean,它提供
sayHello方法。您在以后会看到 portlet 范例代码将调用该方法。您必须按照下面的描述在 portlet 中封装 EJB JAR 文件。
要部署范例 EJB:
- 在 Web 浏览器中打开 WebSphere 管理控制台。
- 展开
Applications然后单击
Install New Application。
- 对于 local path 字段,浏览到您解压缩下载文件的目录,选择
HelloWorldEAR.ear ,然后单击
Next。
- 在
You can choose to generate default bindings and mappings窗口,单击
Next。
- 单击
Step 5 Summary,然后单击
Finish。
- 单击
Save to Master Configuration,然后单击
Save。
- 单击
Application ->Enterprise Applications,并找到
HelloWorldEAR.ear 。
- 单击应用程序前面的复选框,并单击
Start以启动它。
开发 portlet 以访问范例 EJB
在本部分中,您将看到如何开发使用 JNDI 上下文访问会话 bean 的 portlet 应用程序。
生成 portlet 代码
- 打开 WebSphere Studio。
- 选择
File =>New =>Other 以启动 New 向导。
- 在 Select 页面上,在左边的栏中选择
Portlet development,在右边的栏中选择
Portlet
Project。
图 2. 选择 portlet 项目类型
- 单击
Next。
- 在 Project Name 字段中,输入
PortletAccessingEJB ,并选中
Configure advanced options。
- 单击
Next。
- 在 J2EE Settings Page 的 EAR project 字段中,输入
PortletAccessingEJBEAR 。
图 4. J2EE Settings Page
- 单击
Next直到您看见 Event Handling 页面。
- 取消选择
Add action Listener。
图 5. Event Handling
- 单击
Finish,然后在 Confirm Perspective Switch 窗口上单击
Yes 以查看 Portlet 透视图。
portlet.xml 文件在 Application Developer 的 Portlet 视图中打开。
图 6. portlet.xml
将 EJB JAR 复制到 portlet 项目
您需要复制 EJB JAR 至 portlet 项目中,这样 portlet 代码能在会话 bean 中调用方法。
将
Helloworld.jar 拖放至
WEB-INF/lib 目录,以实现从 download 处复制
Helloworld.jar 。
请参见路径中的 JAR 文件, 如图 8所示。
修改 Portlet 代码
接着您将会了解如何修改
PortletAccessingEJBPortlet.java 文件来调用远程会话 bean 上的方法。您需要将
doView() 方法中的
Context.PROVIDER_URL 值移到服务器的 URL 上,EAR 便是在该服务器的上配置的。
- 在
Java Resources 文件夹中,打开
PortletAccessingEJBPortlet.java 。用清单 2 所示的代码替换清单 1 所示的
doView 方法。
清单 1. 包含 JSP
// Invoke the JSP to render getPortletConfig().getContext(). include(VIEW_JSP+getJspExtension(request), request, response); |
清单 2.调用 MyHelloWorld bean 上方法的代码
PrintWriter pw = response.getWriter(); try{ Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"); env.put( Context.PROVIDER_URL, "corbaloc:iiop:sukumar.dfw.ibm.com:2809"); InitialContext ctx= new InitialContext(env); Object objectHome =ctx.lookup("ejb/com/ibm/dr/MyHelloWorldHome"); MyHelloWorldHome home=(MyHelloWorldHome)javax.rmi.PortableRemoteObject. narrow(objectHome, MyHelloWorldHome.class); MyHelloWorld myHelloWorld=home.create(); String s=myHelloWorld.sayHello(); pw.println( "The sayHello method of MyHelloWorld returns" + s + " "); } catch(Exception e){ pw.println("the exception is " + e); } |
-
用已配置的 EJB 中适当的 URL 来替换以上代码中的 Context.PROVIDER_URL 值。即将其转移到配置 EAR 的服务器的 URL 中,
以下将在 Application Developer 显示。
图 9. PortletAccessingEJBPortlet.java
- 会出现一些错误。要修复这些错误,右键单击,并选择
Source->Organize Imports。如图 10 所示。
- 在 Organize Imports 向导中,选择
javax.naming.context 类型。会出现没有错误的文件,如图 11。
- 按 Ctrl+S 保存文件。
输出 WAR 文件
- 选择项目并单击
File ->Export.
- 选择 WAR 文件。
- 指向 WAR 文件。
- 单击
Finish完成 WAR 文件的输出。
测试 portlet
要测试 portlet:
- 在 WebSphere Portal 中安装 portlet。
- 用 portlet 定制门户页面。
- 显示页面,内容如图 15 所示。
图 15. portlet 的输出
在图 15 中,您将会看见 portlet 显示来自 EJB 会话 bean 的
sayHello 方法中的数据。
结束语
本
文按部就班地向您介绍了开发 portlet 以访问无状态会话 EJB 的步骤。从 portlet 代码调用实体 bean
是类似的。由于您不能将 portlet 和 EJB 封装在一起,因此您需要用不同的方式编写代码以访问已部署的 EJB,这和用 servlet
访问企业应用程序是不同的。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/374079/viewspace-130626/
,如需转载,请注明出处,否则将追究法律责任。