跨应用程序服务器的mappedName 始终相同?

发布于 2024-09-18 10:08:00 字数 416 浏览 6 评论 0原文

我有一个具有一些属性的无状态 bean:

  1. 它是一个 EJB3
  2. 类 AddressFacade
  3. 实现了 AddressFacadeRemote
  4. 它位于 ejb-jar (MyJAR.jar) 中
  5. 它位于 EAR (MyEAR) 中。

我的应用程序服务器 (Weblogic) 生成了此名称 (jndiName/mappedName):

MyEARMyJAR_jarAddressFacade_AddressFacadeRemote

我无法使用注入,因此我将使用此名称进行查找。

问题是:如果我维护相同的 EAR、JAR、类和接口名称,这个名称总是相同的吗?或者它可以从应用程序服务器更改?

I have a stateless bean with some properties:

  1. It's a EJB3
  2. class AddressFacade
  3. implements AddressFacadeRemote
  4. it's inside a ejb-jar (MyJAR.jar)
  5. it's in a EAR (MyEAR).

My application server (Weblogic) generated this name (jndiName/mappedName):

MyEARMyJAR_jarAddressFacade_AddressFacadeRemote

I can't use injection, so I'll make a lookup with this name.

The question is: this name always will be the same if I maintain the same EAR,JAR,Class and interface name? Or it can change from application servers?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

东北女汉子 2024-09-25 10:08:00

问题是:如果我维护相同的 EAR、JAR、类和接口名称,这个名称总是相同的吗?或者它可以从应用程序服务器更改?

JNDI 名称在 Java EE 5 中未标准化,并且会从一个应用程序服务器更改为另一个应用程序服务器。 Adam Bien 写了一篇很好的文章来说明这一点:

EJB 3 可移植性问题:为什么 JNDI 名称未标准化?

正如我在上一篇文章中提到的,
Java EE 5 的可移植性
应用程序比在
旧的 J2EE 1.4 世界。我找到了一个
问题,这需要付出一些努力 -
缺乏明确和统一的
JNDI-命名和寻址。这
glassfish applicationsserver 使用
完全限定名称
默认远程业务接口。
JBoss 应用程序服务器使用的名称
以“/remote”结尾的 EJB。所以
以下会话 Bean:

package com.abien;

@无状态
公共类 HelloWorldBean 实现 HelloWorld {

    公共字符串sayHello(字符串你好){
        返回“来自服务器的回显:”;
    }
}

可以通过 JBoss 找到(通过 EJB3
支持)使用以下
代码片段:

Context context = new InitialContext();
HelloWorld helloWorld = (HelloWorld) context.lookup("myEarName/HelloWorldBean/remote");

和 Glassfish(v1 和 v2),使用
的完全限定名称
远程业务接口:

Context context = new InitialContext();
HelloWorld helloWorld = (HelloWorld) context.lookup(HelloWorld.class.getName());

处理此问题的一种不错的方法是使用 ServiceLocator 和“可插入”应用程序服务器特定策略。查看ServiceLocator、JNDI 命名助手和 Java EE 5

在 Java EE 6 中,问题得到了解决,我们终于有了可移植全局 JNDI 名称

The question is: this name always will be the same if I maintain the same EAR,JAR,Class and interface name? Or it can change from application servers?

JNDI names are not standardized in Java EE 5 and will change from one application server to the other. Adam Bien wrote a nice post illustrating this:

EJB 3 Portability Issue: why JNDI names are not standardized?

As I mentioned in my previous post,
the portability of Java EE 5
applications is much better, than in
the old J2EE 1.4 world. I found one
issue, which causes some effort - the
lack of defined and unified
JNDI-Naming and addressing. The
glassfish applicationsserver uses the
fully qualified name of the
remote business interface as default.
The JBoss appserver uses the name of
the EJB with the "/remote" ending. So
the following Session Bean:

package com.abien;

@Stateless
public class HelloWorldBean implements HelloWorld {

    public String sayHello(String hello){
        return "Echo from server: ";
    }
}

can be found with JBoss (with EJB3
support) using the following
code-snippet:

Context context = new InitialContext();
HelloWorld helloWorld = (HelloWorld) context.lookup("myEarName/HelloWorldBean/remote");

and Glassfish (v1 and v2), using the
fully qualified name of the
remote-business interface:

Context context = new InitialContext();
HelloWorld helloWorld = (HelloWorld) context.lookup(HelloWorld.class.getName());

One decent way to handle this is to use a ServiceLocator and "pluggable" application server specific strategies. Have a look at at ServiceLocator, JNDI Naming Helper and Java EE 5.

In Java EE 6, things are fixed and we finally have Portable Global JNDI Names.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文