JBoss AS7 JNDI和EJB 3.1命名更改
由于“功能培训”继续前进,而我们又没有使软件堆栈保持最新,因此我们的团队发现自己处于迁移的不可行位置:
- JBoss 4.2.3到AS 7.1.x(当前为7.1.1)
- EJB 2.1到EJB 3.1
- 休眠2到休眠3或4
以快速的方式。 我的意思是,谁想要发布具有8-10年历史的软件的新版本,而不是我! 以下是我在研究从具有EJB 2.1的JBoss 4.2.3升级到具有EJB 3.1的AS 7.1.x时所做的一些研究的结果。 我相信还会有更多
与不久的将来的迁移相关的帖子,但这与JNDI命名区域的更改有关。
过去/当前
在我们当前的代码中,JNDI的命名非常简单:
- 我们在部署描述符中将“ ejb /”与远程会话Bean接口的名称连接起来,以指示服务应绑定到的名称。
- 在代码中,我们使用以下代码来处理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。
希望这可以帮助!
翻译自: https://www.javacodegeeks.com/2013/05/jboss-as7-jndi-ejb-3-1-naming-changes.html
JBoss AS7 JNDI和EJB 3.1命名更改相关推荐
- ejb 2.1 jboss_JBoss AS7 JNDI和EJB 3.1命名更改
ejb 2.1 jboss 由于"功能培训"继续前进,而我们又没有保持软件堆栈的最新状态,因此我们的团队发现自己处于不得不迁移的不利位置: JBoss 4.2.3到AS 7.1.x ...
- jconsole_我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问
jconsole 与以前的版本相比,JBoss AS7的目标之一是使其在默认情况下更加安全. 受此目标直接影响的领域之一是,您不再期望服务器在端口上公开某些服务并无需任何身份验证/授权就可以访问它. ...
- jconsole 使用_我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问
jconsole 使用 与以前的版本相比,JBoss AS7的目标之一是使其在默认情况下更加安全. 受此目标直接影响的领域之一是,您不再期望服务器在端口上公开某些服务,而无需任何身份验证/授权即可访问 ...
- jboss as7 下载_JBoss AS 7:定制登录模块
jboss as7 下载 JBoss AS 7很整洁,但是文档仍然很缺乏(错误消息没有那么有用). 这篇文章总结了如何创建自己的兼容JavaEE的登录模块,以对部署在JBoss AS上的Web应用程序 ...
- 我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问
与以前的版本相比,JBoss AS7的目标之一是使其在默认情况下更加安全. 受此目标直接影响的领域之一是,您不再期望服务器在端口上公开某些服务,而无需任何身份验证/授权就可以访问它. 请记住,在以前的 ...
- Using Apache2 with JBoss AS7 on Ubuntu
大体思路同<Using Apache Web Server with Jboss AS 7>一致,但在Ubuntu上的操作与之前有些区别. 这里仍然演示mod_proxy的配置. 首先加载 ...
- Jboss AS7 的一些配置备忘
因为要运行众多的应用,所以选择了domain的方式,除特别说明,均指domain.xml的配置 推荐个不错的关于Jboss的网站:http://www.mastertheboss.com/ 1.关于U ...
- 图片批量重命名/更改图片格式
下面代码可以批量更改文件夹中图片的名字,或者更改图片的格式为.jpg或者.png格式. #coding=utf-8 import os #打开文件时需要 from PIL import Image i ...
- [JBoss] JNDI与JBossNS
JNDI的作用 JNDI是 Java 命名与目录接口(Java Naming and Directory Interface). 随着分布式应用的发展,远程访问对象访问成为常用的方法.虽然说通过Soc ...
最新文章
- sublime配置全攻略
- 要学习的别人的博客网址---收藏
- POJ1042 Gone Fishing
- 垃圾回收器的基本原理是什么?
- Java 9 中的 9 个新特性
- 2018青岛ICPC ZOJ 4063: Tournament(构造)
- 浅析刚参加工作的大学生的心理态势
- 微软云服务器的优点,探寻:微软私有云的优势究竟是什么
- python有道批量单词音标整理-使用有道API在线批量翻译单词
- VirtualBox 磁盘扩容(亲测有效)
- 数夫,家具行业MES软件和家具MES制造执行系统龙头企业
- sizebox模型下载_css盒子模型:内联盒模型、width、height、替换元素、边距、border...
- 茶文化入门 --茶分类
- 睿联技术在创业板过会:收入依赖摄像机单机,计划募资11亿元
- The machine learning algorithm cheat sheet
- Nios和Qsys互连
- chrome无法打开无痕模式的解决方案
- Go语言GoFrame开发框架
- GNSS连续运行单参考站解决方案
- Java-PTA 无聊的小明来数1
热门文章
- 外链式样式表_引入CSS样式表(书写位置)
- java速学_5分钟快速入门Java,不看真的可惜了
- unity 3d shaderlab 开发实战详解_vue实战开发011:使用router-view嵌套路由详解
- jvm(13)-线程安全与锁优化
- jax-rs/jersey_JAX-RS 2.1的Jersey客户端依赖性
- 服务器编写_编写下载服务器。 第六部分:描述您发送的内容(内容类型等)...
- ejb能调用另一个ejb吗_异步EJB只是一个Gi头吗?
- lucene快速入门_为Lucene选择快速唯一标识符(UUID)
- [免费网络研讨会] Java 11的第一印象
- Java的精妙之处,包括基元和变量参数数组