Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 从EJB2.0到EJB3.0_Jakarta Ee_Ejb 3.0_Websphere 7_Remoteobject_Initial Context - Fatal编程技术网

Jakarta ee 从EJB2.0到EJB3.0

Jakarta ee 从EJB2.0到EJB3.0,jakarta-ee,ejb-3.0,websphere-7,remoteobject,initial-context,Jakarta Ee,Ejb 3.0,Websphere 7,Remoteobject,Initial Context,下面是我必须创建EJB2.0的代码 如何将其转换为可用于EJB3.0 java.lang.Object ejbHomeStub = initCtx.lookup(ejbJNDIName); EJBHome ejbHome = (EJBHome) javax.rmi.PortableRemoteObject.narrow(ejbHomeStub, EJBHome.class); EJBMetaData ejbMetaData = ejbHome.getEJBMetaData(); Cla

下面是我必须创建EJB2.0的代码 如何将其转换为可用于EJB3.0

java.lang.Object ejbHomeStub = initCtx.lookup(ejbJNDIName);
EJBHome ejbHome = (EJBHome) 
    javax.rmi.PortableRemoteObject.narrow(ejbHomeStub, EJBHome.class);
EJBMetaData ejbMetaData = ejbHome.getEJBMetaData();
Class ejbHomeClass = ejbMetaData.getHomeInterfaceClass();
//get ejb object of home interface type
ejbHome = (EJBHome) javax.rmi.PortableRemoteObject.narrow(ejbHome, ejbHomeClass);
//create ejb remote object
Method ejbMethodCreate = ejbHomeClass.getDeclaredMethod(EJB_CREATE, null);
ejbRemoteObj = (EJBObject) ejbMethodCreate.invoke(ejbHome, null);
如果您的意思是“如何将EJB3.0接口添加到EJB2.0JAR”,那么您不需要转换客户机或bean,因为EJB3.0与EJB2.0向后兼容。相反,只需更新ejb-jar.xml以删除XSD,添加XSD+xmlns,并更新
的version属性

如果您的意思是“如何将其转换为注释”,那么在bean类上使用
@RemoteHome
注释,并保持您的接口不变

如果您的意思是“如何将EJB转换为使用业务接口而不是家庭”,那么您不能直接这样做,因为您必须事先知道业务接口的类型:

java.lang.Object businessObjectStub = initCtx.lookup(ejbJNDIName);
BusinessObject businessObject = (BusinessObject)
    javax.rmi.PortableRemoteObject.narrow(businessObjectStub, BusinessObject.class);

(一些应用服务器不需要EJB3.0的狭义版本,但WebSphereApplicationServer7.0需要。)

请看我的回答,我之前已经看过那篇文章,但我的问题有点具体。既然EJB3中已经没有了ejbRemoteObj,我如何在OTU使用home的情况下以通用方式创建ejbRemoteObj谢谢您的回复。我是说你的第三个建议。我正在从servlet调用不同的bean。我们曾经指定EJBindiName(如我的代码中所示)。代码是泛型的,因此它可以使用主接口处理任何类型的bean。但是EJB3没有主接口。我不想创建一个,因为它扼杀了拥有EJB3的所有目的。我只是想弄清楚如何实现“泛型”不指定BusinessObjective的调用我会说EJB3的最大好处是注释,而不是删除主接口。