ejb 2.1 jboss_JBoss AS7 JNDI和EJB 3.1命名更改

ejb 2.1 jboss

由于“功能培训”继续前进,而我们又没有保持软件堆栈的最新状态,因此我们的团队发现自己处于不得不迁移的不利位置:

  • JBoss 4.2.3到AS 7.1.x(当前为7.1.1)
  • EJB 2.1到EJB 3.1
  • Hibernate2到Hibernate3或4

以快速的方式。 我的意思是,谁想要发布具有8-10年历史的软件的新版本,而不是我! 以下是我在研究从具有EJB 2.1的JBoss 4.2.3升级到具有EJB 3.1的AS 7.1.x时所做的一些研究的结果。 我相信还会有更多

与不久的将来的迁移相关的帖子,但这与JNDI命名区域的更改有关。

过去/当前

在我们当前的代码中,JNDI的命名非常简单:

  1. 我们在部署描述符中将“ ejb /”与远程会话Bean接口的名称连接起来,以指示服务应绑定的名称。
  2. 在代码中,我们使用以下代码来处理JNDI查找。 真正令人高兴的部分是,远程客户端可以在容器内的服务器上以及服务器上使用相同的代码。

当前代码

Hashtable properties = new Hashtable();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url", "jnp://localhost:1099");
Context ctx = new InitialContext(properties);
Object ref = ctx.lookup(jndiName);

AS7和EJB 3.1

EJB 3.1规范进行了一些更改,以强制要求EJB的可移植JNDI名称,您可以在AS 7.1.1中继承它。 我发现的另一件棘手的事情是,我无法再使用来自远程客户端和服务器的完全相同的查找代码。

现在,AS 7具有两个用于远程EJB调用的选项 。 您需要的信息可以在JBoss文档中找到,但并没有打动我! 经过几天的努力,我决定创建一个小程序,以帮助(希望)使差异非常清楚。 下面是我创建用来从远程客户端调用无状态会话Bean的程序。 我从7.1快速入门示例中部署了“ ejb-remote”示例。 该代码尝试使用两种远程方法加载远程服务。 可以预期的是,对于第一组查找,第一次查找成功,而第二次使用“ ejb:/”命名格式失败。 然后,将值为“ org.jboss.ejb.client.naming”的Context.URL_PKG_PREFIXES属性添加到传递给InitialContext构造函数的jndi属性中,并重复查找。 现在,两个查找都应该成功。 我已将所有JNDI属性包含在代码中,而不是依赖从类路径中获取的“ jboss-ejb-client.properties ”或“ jndi.properties ”的副本。

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;import java.util.Hashtable;public class EJBClient {private static String[] JNDINAME = {"jboss-as-ejb-remote-app/CalculatorBean!org.jboss.as.quickstarts.ejb.remote.stateless.RemoteCalculator", "ejb:/jboss-as-ejb-remote-app/CalculatorBean!org.jboss.as.quickstarts.ejb.remote.stateless.RemoteCalculator" };private Hashtable jndiProps;public EJBClient() {// setup 'base' jndi properties - no jboss-ejb-client.properties being picked up from classpath!jndiProps = new Hashtable();jndiProps.put("java.naming.factory.initial",
"org.jboss.naming.remote.client.InitialContextFactory");jndiProps.put(InitialContext.PROVIDER_URL, "remote://localhost:4447");jndiProps.put("jboss.naming.client.ejb.context", true);// needed for remote access - remember to run add-user.batjndiProps.put(Context.SECURITY_PRINCIPAL, "client");jndiProps.put(Context.SECURITY_CREDENTIALS, "password");}public void doLookups() {// the 'exported' namespacefor (int i = 0; i < JNDINAME.length; i++) {lookup(JNDINAME[i]);}// This is an important property to set if you want to do EJB invocations via the remote-naming projectjndiProps.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");// now with the ejbfor (int i = 0; i < JNDINAME.length; i++) {lookup(JNDINAME[i]);}}private void lookup(String name) {System.out.println("Lookup name="+name);Context ctx = null;try {ctx = new InitialContext(jndiProps);Object ref = ctx.lookup(name);System.out.println("...Successful");} catch (NamingException e) {System.out.println("...Failed");//System.out.println(e.getMessage());e.printStackTrace();} finally {if (ctx != null) {try {ctx.close();} catch (NamingException e) {}}}}public static void main(String[] args) throws Exception {EJBClient client = new EJBClient();client.doLookups();System.out.println("Done!");}}

服务器端的AS7

现在,在服务器上进行JNDI查找的简单部分与旧方法非常相似,不同之处在于,您仍然需要根据新规范格式化JNDI名称,并且命名工厂不再是jnp版本!

Hashtable jndiProps = new Hashtable();jndiProps.put("java.naming.factory.initial", "org.jboss.as.naming.InitialContextFactory");ctx = new InitialContext(jndiProps);Object ref = ctx.lookup(jndiName);

结论

就像我之前说的那样,该信息已经在JBoss文档中,但是我可能读了几次。 我要寻找的是一个示例,该示例显示了从客户端和服务器加载EJB。

希望这可以帮助!

参考: JBoss AS7 JNDI&EJB 3.1在Scratching我的编程itch博客上,我们的JCG合作伙伴 Mike Miller的命名更改 。

翻译自: https://www.javacodegeeks.com/2013/05/jboss-as7-jndi-ejb-3-1-naming-changes.html

ejb 2.1 jboss

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信号与系统 chapter8 LTI连续系统的描述

我们这里对LTI系统的描述主要是用在电路分析上&#xff0c;我们一般先写出电路方程&#xff0c;对电路方程抽象以后得到微分方程 LTI系统的数学模型 这里注意一下电感上要求二阶导数&#xff0c;电阻上求一阶&#xff0c;然后为每一项分别写上系数&#xff0c;倘若读者到这里还…

安装jdk步骤rpm_jenkins rpm包方式安装

war包方式安装jenkins已经说过java openjdk的安装和注意事项&#xff0c;这里不做赘述前提&#xff1a;确保 java的jdk或者jre已安装#]java -version#]whereis java (whereis查看程序运行命令的)#]ls -lrt /usr/bin/java#]ls -lrt /etc/alternatives/java这里简单讲下which、wh…

使用ADF绑定创建视图对象行CreateInsert操作

在这篇简短的文章中&#xff0c;我将重点介绍与在任务流中创建新记录的一种非常常见的方法有关的一个小陷阱。 让我们考虑一个简单的任务流示例&#xff0c;该任务流创建一个新的VO行&#xff0c;如果用户单击“确定”按钮&#xff0c;则在页面片段上显示该行并提交事务&#…

信号与系统 chapter9 关于信号与系统中微分方程的求解

微分方程的求解 许多同学之所以觉得信号与系统难的原因之一就在于它的数学推导&#xff0c;特别是对于一些高等数学基础比较薄弱的同学来说&#xff0c;且不说后面的求解傅里叶变换部分&#xff0c;目前的LTI连续系统微分方程的求解&#xff0c;已经是的有的同学感到云里雾里。…

jpa 托管_Spring Boot-不是托管类型

我使用Spring boot JPA&#xff0c;启动服务时遇到问题。Caused by: java.lang.IllegalArgumentException: Not an managed type: class com.nervytech.dialer.domain.PhoneSettingsat org.hibernate.jpa.internal.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:21…

信号与系统 chapter10 系统的初值问题与系数匹配法

系统的初值问题就是让你求一下系统在0时刻的y(t)y(t)y(t)函数 我们看到它要我们求关于t0t0t0时刻的一些参数&#xff0c;我们这里首先就要想到冲激函数&#xff0c;为什么&#xff1f;因为冲激函数最特殊&#xff0c;它的特性就是在0时刻才有定义&#xff0c;才有值&#xff0…

信号与系统 chapter11 LTI系统的响应

我发现好多人都喜欢写“LTI连续系统”&#xff0c;殊不知LTI的全称就是LinearTimeInvariantSystemsLinear Time Invariant SystemsLinearTimeInvariantSystems&#xff0c;已经写出线性连续时不变了&#xff0c;就不要再翻译中画蛇添足了。 言归正传&#xff0c;前面我们分析的…

lora终端连接云服务器_终端连接服务器主机

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"云服务器 ECS(Elastic Compute Service)是一…

通过函数式编程实现动态对话框处理程序

在我以前的文章中&#xff0c;我提到了一个常见的用例&#xff0c;当我们需要以编程方式检查当前事务是否脏了&#xff0c;并在做某件事之前通知用户有关该事务的信息。 就像“您有未保存的更改将丢失&#xff0c;要继续吗&#xff1f;”。 假设我们需要在应用程序的许多位置&…

数字通信系统的组成框图

通信系统组成框图有两种&#xff0c;一种较为简略&#xff0c;为广义上的通信系统&#xff1b;一种比较全面&#xff0c;为数字通信系统&#xff0c;现整理如下&#xff1a; 简略版&#xff1a; 信源→发送设备→信道→接收设备→信宿信源\rightarrow 发送设备\rightarrow 信道…

哨兵一号数据snap预处理_利用SNAP软件进行Sentinel-1A卫星微波影像的预处理

利用SNAP软件对雷达影像进行预处理&#xff0c;主要包括热噪声去除、轨道文件校正、辐射定标、滤波校正、多普勒地形校正&#xff0c;最终获得入射角和后向散射信息。数据&#xff1a;本次实验所用数据为哨兵一号(Sentinel-1A)干涉宽幅模式(Interferometric Wideswath&#xff…

Spring Boot&Angular 5&Spring Data&Rest示例(CRUD)

本教程提供了Spring Boot&#xff0c;Angular 5和spring数据的完整实现&#xff0c;以示例为例构建端到端的单页Java Web应用程序。我们将使用Spring Boot 1.5公开REST API和angular5并通过路由来构建我们的客户端不仅要消耗服务器公开的API&#xff0c;还要将MySql数据库与后端…

信号与系统 chapter12 卷积及其性质

卷积的概念 卷积算得上是信号与系统里面一个比较抽象的概念&#xff0c;它广泛应用在统计学、工程学&#xff0c;好多人明白了怎么做题&#xff0c;却仍然说不清楚卷积的概念&#xff0c;我们把它当作一种运算&#xff0c;它的运算形式如下&#xff1a; 有f1(t)f2(t)f_1(t)f_2…

第二章导数与微分思维导图_线性代数第二章 矩阵 思维导图

这章内容复习集中在两方面&#xff1a;矩阵乘法&#xff1b;可逆矩阵及相关内容&#xff08;矩阵方程和伴随矩阵&#xff09;。可逆矩阵是全课程的一个关键性概念&#xff0c;与各章内容都有联系&#xff0c;应着重注意这些联系。

图像的常用压缩技术以及视频码率的计算

图像压缩方法&#xff1a; 冗余度压缩方法&#xff1a;也称无损压缩&#xff0c;压缩比较低信息量压缩方法&#xff1a;有损压缩&#xff0c;多用在数字电视技术与静止图像通信&#xff0c;压缩编码中丢弃了一些没有作用的信息 压缩种类压缩方法无损压缩哈夫曼编码&#xff0…

框架优点_铝型材框架相比其他框架的优点

很多自动化技术机械厂都是应用到工业铝型材框架做为设备的支撑点件&#xff0c;还会继续有一些顾客会有疑问&#xff0c;用铁或是是其他的原材料来做框架能不能&#xff1f;当然是能够 的&#xff0c;但是为什么有生产厂家把原来其他原材料换为工业铝型材框架来应用呢&#xff…

使用Maven进行Selenium测试自动化

今天&#xff0c;我想帮助您更好地管理自动GUI测试&#xff08;Selenium&#xff09;。 在过去&#xff0c;我已经看到人们处理此问题的许多不同方式。 有些人只是用Selenium-IDE编写普通HTML TestCases&#xff0c;将其存储在HDD上的某个位置&#xff0c;并在需要时手动运行。…

2018年工业机器人销量排位_长安-2018年11月汽车销量 细分销量

根据盖世汽车社区-销量数据库查询&#xff0c;为广大汽车行业人士整理了长安-2018年11月细分销量(按变速箱)数据如下:变速箱类型九月十月十一月累计4AT[TS-40/Ss-II]4,6554,0545,34814,0575AMT[AF512]11711202295DCT[DF515]56955139915195MT[MF510]2,34298475040765MT[MF515/TM…

OFDM技术及其应用

OFDM简介 OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术&#xff0c;实际上OFDM是MCM(Multi Carrier Modulation)&#xff0c;多载波调制的一种。通过频分复用实现高速串行数据的并行传输, 它具有较好的抗多径衰弱的能力&#xff0c;能够支持多用户接入…

Spring中@ Component,@ Service,@ Controller和@Repository之间的区别

在了解Spring框架中Repository Component &#xff0c; Service Controller &#xff0c; Repository Controller和Repository批注之间的区别之前&#xff0c;了解Component批注在Spring中的作用很重要。 在Spring的初始发行期间&#xff0c;所有bean都用于在XML文件中声明。 对…