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

  • 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的命名非常简单:

  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我们的JCG合作伙伴 Mike Miller在Scratching我的编程痒博客上的命名发生了变化 。

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

JBoss AS7 JNDI和EJB 3.1命名更改相关推荐

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

    ejb 2.1 jboss 由于"功能培训"继续前进,而我们又没有保持软件堆栈的最新状态,因此我们的团队发现自己处于不得不迁移的不利位置: JBoss 4.2.3到AS 7.1.x ...

  2. jconsole_我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问

    jconsole 与以前的版本相比,JBoss AS7的目标之一是使其在默认情况下更加安全. 受此目标直接影响的领域之一是,您不再期望服务器在端口上公开某些服务并无需任何身份验证/授权就可以访问它. ...

  3. jconsole 使用_我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问

    jconsole 使用 与以前的版本相比,JBoss AS7的目标之一是使其在默认情况下更加安全. 受此目标直接影响的领域之一是,您不再期望服务器在端口上公开某些服务,而无需任何身份验证/授权即可访问 ...

  4. jboss as7 下载_JBoss AS 7:定制登录模块

    jboss as7 下载 JBoss AS 7很整洁,但是文档仍然很缺乏(错误消息没有那么有用). 这篇文章总结了如何创建自己的兼容JavaEE的登录模块,以对部署在JBoss AS上的Web应用程序 ...

  5. 我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问

    与以前的版本相比,JBoss AS7的目标之一是使其在默认情况下更加安全. 受此目标直接影响的领域之一是,您不再期望服务器在端口上公开某些服务,而无需任何身份验证/授权就可以访问它. 请记住,在以前的 ...

  6. Using Apache2 with JBoss AS7 on Ubuntu

    大体思路同<Using Apache Web Server with Jboss AS 7>一致,但在Ubuntu上的操作与之前有些区别. 这里仍然演示mod_proxy的配置. 首先加载 ...

  7. Jboss AS7 的一些配置备忘

    因为要运行众多的应用,所以选择了domain的方式,除特别说明,均指domain.xml的配置 推荐个不错的关于Jboss的网站:http://www.mastertheboss.com/ 1.关于U ...

  8. 图片批量重命名/更改图片格式

    下面代码可以批量更改文件夹中图片的名字,或者更改图片的格式为.jpg或者.png格式. #coding=utf-8 import os #打开文件时需要 from PIL import Image i ...

  9. [JBoss] JNDI与JBossNS

    JNDI的作用 JNDI是 Java 命名与目录接口(Java Naming and Directory Interface). 随着分布式应用的发展,远程访问对象访问成为常用的方法.虽然说通过Soc ...

最新文章

  1. sublime配置全攻略
  2. 要学习的别人的博客网址---收藏
  3. POJ1042 Gone Fishing
  4. 垃圾回收器的基本原理是什么?
  5. Java 9 中的 9 个新特性
  6. 2018青岛ICPC ZOJ 4063: Tournament(构造)
  7. 浅析刚参加工作的大学生的心理态势
  8. 微软云服务器的优点,探寻:微软私有云的优势究竟是什么
  9. python有道批量单词音标整理-使用有道API在线批量翻译单词
  10. VirtualBox 磁盘扩容(亲测有效)
  11. 数夫,家具行业MES软件和家具MES制造执行系统龙头企业
  12. sizebox模型下载_css盒子模型:内联盒模型、width、height、替换元素、边距、border...
  13. 茶文化入门 --茶分类
  14. 睿联技术在创业板过会:收入依赖摄像机单机,计划募资11亿元
  15. The machine learning algorithm cheat sheet
  16. Nios和Qsys互连
  17. chrome无法打开无痕模式的解决方案
  18. Go语言GoFrame开发框架
  19. GNSS连续运行单参考站解决方案
  20. Java-PTA 无聊的小明来数1

热门文章

  1. 外链式样式表_引入CSS样式表(书写位置)
  2. java速学_5分钟快速入门Java,不看真的可惜了
  3. unity 3d shaderlab 开发实战详解_vue实战开发011:使用router-view嵌套路由详解
  4. jvm(13)-线程安全与锁优化
  5. jax-rs/jersey_JAX-RS 2.1的Jersey客户端依赖性
  6. 服务器编写_编写下载服务器。 第六部分:描述您发送的内容(内容类型等)...
  7. ejb能调用另一个ejb吗_异步EJB只是一个Gi头吗?
  8. lucene快速入门_为Lucene选择快速唯一标识符(UUID)
  9. [免费网络研讨会] Java 11的第一印象
  10. Java的精妙之处,包括基元和变量参数数组