阿里云是不是做网站的,用户上传商品网站用什么做,河北建设网工程信息网,大宗商品交易平台排名ejb 2.1 jboss由于“功能培训”继续前进#xff0c;而我们又没有保持软件堆栈的最新状态#xff0c;因此我们的团队发现自己处于不得不迁移的不利位置#xff1a; JBoss 4.2.3到AS 7.1.x#xff08;当前为7.1.1#xff09; EJB 2.1到EJB 3.1 Hibernate2到Hibernate3或4… 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的命名非常简单 我们在部署描述符中将“ 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 namename);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 JNDIEJB 3.1在Scratching我的编程itch博客上我们的JCG合作伙伴 Mike Miller的命名更改 。 翻译自: https://www.javacodegeeks.com/2013/05/jboss-as7-jndi-ejb-3-1-naming-changes.htmlejb 2.1 jboss