首页 > 其他分享 >websphere6.1开发、部署、远程调用EJB2.0

websphere6.1开发、部署、远程调用EJB2.0

时间:2023-04-26 20:32:56浏览次数:47  
标签:调用 EJB2.0 websphere6.1 javax ejb import com public out


开发工具是IBM RAD 7.5.4。

WAS版本6.1。

EJB版本2.0。


开发过程如图:

websphere6.1开发、部署、远程调用EJB2.0_xml


websphere6.1开发、部署、远程调用EJB2.0_java_02


新建完后,工程结构如下:


websphere6.1开发、部署、远程调用EJB2.0_jar_03


再新建SessionBean


websphere6.1开发、部署、远程调用EJB2.0_java_04


下一步


websphere6.1开发、部署、远程调用EJB2.0_java_05


完成。

如图:


websphere6.1开发、部署、远程调用EJB2.0_xml_06


修改几个文件:

package com.ejb;

import static java.lang.System.out;

/**
 * Bean implementation class for Enterprise Bean: HelloSession
 */
public class HelloSessionBean implements javax.ejb.SessionBean {

	static final long serialVersionUID = 3206093459760846163L;
	private javax.ejb.SessionContext mySessionCtx;

	/**
	 * getSessionContext
	 */
	public javax.ejb.SessionContext getSessionContext() {
		return mySessionCtx;
	}

	/**
	 * setSessionContext
	 */
	public void setSessionContext(javax.ejb.SessionContext ctx) {
		mySessionCtx = ctx;
	}

	/**
	 * ejbCreate
	 */
	public void ejbCreate() throws javax.ejb.CreateException {
		out.println("ejbCreate");
	}

	/**
	 * ejbActivate
	 */
	public void ejbActivate() {
		out.println("ejbActivate");
	}

	/**
	 * ejbPassivate
	 */
	public void ejbPassivate() {
		out.println("ejbPassivate");
	}

	/**
	 * ejbRemove
	 */
	public void ejbRemove() {
		out.println("ejbRemove");
	}

	public String sayHello(String someOne) {
		out.println("sayHello");
		return "Hello, " + someOne + "!";
	}
}



package com.ejb;

import java.rmi.RemoteException;

/**
 * Remote interface for Enterprise Bean: HelloSession
 */
public interface HelloSession extends javax.ejb.EJBObject {
	public String sayHello(String someOne) throws RemoteException;
}



增加一个测试类:

package com.ejb;

import java.rmi.RemoteException;
import java.util.Properties;

import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;

public class TestClient {

	/**
	 * @param args
	 * @throws NamingException
	 * @throws CreateException
	 * @throws RemoteException
	 */
	public static void main(String[] args) throws NamingException,
			RemoteException, CreateException {
		Properties props = new Properties();
		props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
		props.setProperty(Context.PROVIDER_URL, "iiop://127.0.0.1:2810/");
		Context ctx = new InitialContext(props);
		Object objref = ctx.lookup("ejb/com/ejb/HelloSessionHome");
		HelloSessionHome home = (HelloSessionHome) PortableRemoteObject.narrow(objref, HelloSessionHome.class);
		HelloSession hello = home.create();
		String msg = hello.sayHello("ejb");
		System.out.println(msg);

	}

}



上面jndi的名字,可以在ibm-ejb-jar-bnd.xmi中找到,其内容:

<?xml version="1.0" encoding="UTF-8"?>
<ejbbnd:EJBJarBinding xmi:version="2.0"
	xmlns:xmi="http://www.omg.org/XMI" xmlns:ejb="ejb.xmi" xmlns:ejbbnd="ejbbnd.xmi"
	xmi:id="EJBJarBinding_1393691689296">
	<ejbJar href="META-INF/ejb-jar.xml#ejb-jar_ID" />
	<ejbBindings xmi:id="EnterpriseBeanBinding_1393691689296"
		jndiName="ejb/com/ejb/HelloSessionHome">
		<enterpriseBean xmi:type="ejb:Session"
			href="META-INF/ejb-jar.xml#HelloSession" />
	</ejbBindings>
</ejbbnd:EJBJarBinding>



ejb-jar.xml内容:


<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar id="ejb-jar_ID">
	<display-name>EJB</display-name>
	<enterprise-beans>
		<session id="HelloSession">
			<ejb-name>HelloSession</ejb-name>
			<home>com.ejb.HelloSessionHome</home>
			<remote>com.ejb.HelloSession</remote>
			<ejb-class>com.ejb.HelloSessionBean
			</ejb-class>
			<session-type>Stateless</session-type>
			<transaction-type>Bean</transaction-type>
		</session>
	</enterprise-beans>
	<ejb-client-jar>EJBClient.jar</ejb-client-jar>
</ejb-jar>



上面两个文件内容,都是自动生成的,无需修改。如果知道怎么改,也可以改。


然后把EJBSystem加到WAS6.1里去,启动WAS,会生成一些java文件,如图:

websphere6.1开发、部署、远程调用EJB2.0_xml_07

websphere6.1开发、部署、远程调用EJB2.0_java_08


此时,运行TestClient,会报错,解决办法


上面的问题,解决后,就可以测试成功了。上面的URL里的端口,一般是2809,我这里的是2810。反正就从2809开始往上加1。


服务端输出:

[14-3-2 0:44:04:890 CST] 00000041 SystemOut     O ejbCreate
[14-3-2 0:44:04:906 CST] 00000041 SystemOut     O sayHello



客户端输出:

Hello, ejb!




标签:调用,EJB2.0,websphere6.1,javax,ejb,import,com,public,out
From: https://blog.51cto.com/u_1002776/6228857

相关文章

  • (转载)MFC下一个类调用另一个类中变量的解决方法
    https://blog.csdn.net/xiaqunfeng123/article/details/39207517/ 假如有类A,类B两个类。如果想在B中调用A的成员函数,该怎么办呢?方法一:在类B的cpp文件中包含A类的头文件,然后在B的需要调用A的函数的函数中,添加#include"A.h"B::funcB(){Aa;a.funcA();}由于类A的funcA不是静态(st......
  • 解析方法调用
    解析方法调用的语法,支持常量(双引号包含)、变量、函数(嵌套调用)作为入参。自动机:java实现://方法执行publicStringexcuteMethod(Stringexpression,JSONObjectformData)throwsException{if(null==expression)return"";while(e......
  • 用java调用oracle存储过程总结
    用java调用oracle存储过程总结[code]1、什么是存储过程。存储过程是数据库服务器端的一段程序,它有两种类型。一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户。另一种类似于INSERT或DELETE查询,它不返回数据,只是执行一个动作。......
  • Spring注入接口,接口多个实现类调用哪个实现类的三种方案
    https://blog.csdn.net/JingXu1114/article/details/124747047代码所示:···@AutowiredUserServiceuserService···在这个接口有多个实现类的情况下三种方式定义调用实现类:方法1:···`@Autowired UserServiceuserServiceImpl_1`···在变量名中直接写成想要调用......
  • 【NLP教程】用python调用百度AI开放平台进行情感倾向分析
    目录一、背景二、操作步骤2.1创建应用2.2获取token2.3情感倾向分析三、其他情感分析四、讲解视频一、背景Hi,大家!我是@马哥python说,一名10年程序猿。今天我来演示一下:通过百度AI开放平台,利用python调用百度接口进行中文情感倾向分析,并得出情感极性分为积极、消极还是中性以......
  • 记php调用chatgpt接口
    $openai_api_key='your_openai_api_key_here';$engine='davinci';//ChatGPT中的AI模型名称$prompt='Hello,canyouhelpme?';//ChatGPT中的提示信息//构造请求数据$data=array('model'=>$engine,'prompt&#......
  • Java中不同对象调用该实例方法返回值是同一个地址空间吗?
    结论不管是基本类型还是引用类型都是新开辟的内存空间即返回的不是同一个地址空间不然操作返回值A变量直接影响到返回值B变量'=='基本比较的是两者的值是否相同而引用类型比较两者的是引用地址是否相同基本类型返回的值相同'=='就为truepublicintm1(){ return-1;......
  • Linux VFS中write系统调用实现原理
    目录用户空间的write函数在内核里面的服务例程为sys_write.1Vfs_write函数实现原理...2 WORD里面的目录复制过来似乎不能直接用。。还是放在这里当主线看吧..用户空间的write函数在内核里面的服务例程为sys_writeroot@syslab~]#grepwrite/usr/include/asm/unistd......
  • 调用有道翻译接口进行翻译
    1'''2i:你好3from:AUTO4to:AUTO5smartresult:dict6client:fanyideskweb7salt:16643765479061//毫秒级别的时间戳后面加上个0-9之间的随机数,js代码:r+parseInt(10*Math.random(),10);这里的r表示时间戳字符串8sign:1d69ce8f7c6258......
  • springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、j
    由于在开发业务时,可能同时调用的存储过程不知道参数,但是参数从界面、或已经存储在数据库的获取,所以就不希望手动写存储过程的参数,通过简化的调用。能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以......