- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 Java EE 的新手。目前,我正在阅读 Sun Microsystems 的Java EE 6 教程,第 1 卷(基本概念测试版)。为了摆脱单调的阅读,我经常玩一些其他人编写的 Java EE 项目/代码。
我来自东南部。我的脑袋里仍然充满了SE。在 SE(两层 应用程序)中,我使用
DATABASE_URL = "jdbc:mysql://something.db_server.com/db_name"
这就是我的客户端知道数据库服务器位置的方式。
在我看到的一个 Java EE 示例中
// Access JNDI Initial Context.
Properties p = new Properties();
p.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
p.put("java.naming.provider.url","jnp://localhost:1099");
p.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
InitialContext ctx = new InitialContext(p);
// Change jndi name according to your server and ejb
HelloRemote remote = (HelloRemote) ctx.lookup("HelloBean/remote");
msg = "Message From EJB --> " + remote.sayHello();
这个我明白了。该代码具有 url 和端口号。有这条线
p.put("java.naming.provider.url","jnp://localhost:1099");
客户端通过 url 和访问哪个端口知道服务器在哪里。我认为代码是在 Java EE 5 时编写的。
今天我发现了另一个使用 Netbeans 7、Java EE 6 和 GlassFish 3 的例子。客户端代码
@EJB
private static MySessionRemote mySession;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JOptionPane.showMessageDialog(null,
"result = " + mySession.getResult());
}
这是链接 http://netbeans.org/kb/docs/javaee/entappclient.html
没有给出 url 和端口号。
David R. Heffelfinger 的Java EE 6 Development with Netbeans 7 在第 7 章中有一个类似的例子。作者没有在书中解释它是如何完成的。我想他已经做到了,但我可能错过了……
我的问题是客户端如何在没有url的情况下定位服务器?它是在那些 xml 文件之一中说明的吗?客户端可以在加利福尼亚,而 GlassFish Server 可以在纽约。任何人都可以向我解释一下或指向我可以找到答案的任何教程/博客/文章吗?
谢谢。
最佳答案
这里发生了两件事。
首先,Java EE 中没有指定获取远程 EJB 引用的方式。您受制于个别供应商认为应该如何完成。
虽然 JNDI 是用于此的事实上的标准,但即使它本身也不是强制性的。
在 AS 7 之前的 JBoss AS 中,以下序列用于获取远程引用:
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
env.put(Context.PROVIDER_URL, "jnp://myserver.example.com:1099");
InitialContext context = new InitialContext(env);
Bean bean = (Bean) context.lookup("myear/MyBean/remote");
在这里,远程服务器的 URL 被提供给初始上下文,并从该上下文中检索一个 bean。 (请注意,您必须不要在此处添加众所周知的“java:/”前缀,否则它将被 JNDI 拦截并在本地解析,尽管在远程上下文中进行查找)
由于此方法如前所述未标准化,因此单个供应商可以在实现版本之间完全更改它。即使对于相同 Java EE 版本的实现也是如此。
在 JBoss AS 7 中,JBoss 想要摆脱 JNDI(因为没有指定必须使用 JNDI),现在它发生在大约 following way。 :
您首先需要将一个 jboss-ejb-client.properties
文件放在您的类路径中,上下文如下:
endpoint.name = client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED = false
remote.connections = default
remote.connection.default.host = myserver.example.com
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS = false
并使用如下代码:
Properties env = new Properties();
env.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
InitialContext context = new InitialContext(env);
Bean bean = (Bean) context.lookup("ejb:/myear/mymodule/MyBean!com.example.Bean");
所以从代码看似乎没有给出 URL,但它静态隐藏在配置文件中。
Today I have found another example where Netbeans 7, Java EE 6, and GlassFish 3 are used. The client side code [...]
这是另一回事。所展示的是所谓的Application Client Container (aka ACC)。
这与上面的示例不同,在该示例中,Java SE 应用程序使用 JNDI 联系远程服务器。 Application Client Container 在 Java EE 中有点晦涩难懂。这个想法似乎是您从服务器动态下载客户端代码(如 Applet 或 Java Web Start 应用程序),然后它神奇地“知道”它的来源。主类中对(静态)注入(inject)的支持非常有限,您可以使用它直接注入(inject)远程 bean。
应用程序客户端容器是 Java EE 早期的一个想法,据我所知从未受到太多关注。经过这么多年,它在最初的构想之后从未取得太大进展。因为它仍然需要完成大量特定于供应商的事情,所以我认为大多数人不会理会它而只是使用 JNDI。
关于java - EJB客户端如何定位没有url的EJB服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13643127/
假设我拥有域 mydomain.com,并且我在服务器上有一个 Web 应用程序,网址为 http://99.99.99.99:1234/MyApplication/startpage.somethi
我正在尝试通过以下方式更新已解析的 URL: u, _ := url.Parse(s) if u.Scheme == "" { u.Scheme = "https" } if u.Path =
如何将 www.somesite.com/api(.*) 映射到 www.somesite.com/$1:9000? (我需要将/api 映射到运行 @ 端口 9000 的 Play 框架应用程序)
我有一个资源结构,如航类 > 座位 > 预订,所以预订属于某个航类的某个座位: http://example.com/jdf_3prGPS4/1/jMBDy46PbNc
我想知道以下网址是否有效。 路径中的点,在主机之后: http://www.example.com/v.b.w..com 主机中的点,作为子域的一部分: http://v.b.w..co.manufa
我有两个域 - crmpicco.co.uk 和 ayrshireminis.com - 如果我浏览到: www.crmpicco.co.uk/mini/new我希望能够重定向到 www.ayrshi
我正在尝试使用 URL 重写和应用程序请求路由来重写到外部 URL。我设置了以下规则: 在规则中,“patternToMatch”是我试
我已经安装了带有 SharePoint 和 Url Rewrite 模块的 IIS 7.0。 是以下句子还是我配置错误才能看到这个结果? Url Redirect 可以将 url 重定向到任何内部(在
我想知道,为了获得良好的 SEO,您必须在 URL 中使用自然语言。您知道字符中单词或短语的最大大小吗?例如: www.me.com/this-is-a-really-long-url.htm 我问这
有人知道在 SEO 友好 URL 中使用逗号有什么问题吗?我正在使用一些在其 SEO 友好 URL 中使用大量逗号的软件;但我 100% 肯定我见过一些程序/平台无法正确识别 URL 并在第一个逗号后
我有一个网站,我正在为所有链接使用干净的 URL。我想知道对于简短的基本 URL 与较长的描述性 URL 有何看法。 例如,如果我的网站是关于 Georgia Bulldog 足球新闻的,那么哪个网站
我正在编写一个类似于 tinyurl 的 URL 缩短器,我想知道如何跟踪已经使用我的服务缩短的 URL?例如,tinyurl 为相同的长 URL 生成相同的小 URL,而不管是谁创建的。如
我是 magento 的新手。我正在开发一个模块。为此,我有一些要显示链接的 css 和 js 文件。我目前有类似 的链接 getSkinUrl('module_tryouts/css/jquery.
我想基于 HTTP_URL 重写 URL 以重定向到不同的端口,同时保留其余的 URL 和查询字符串(如果指定)。例如, http://host/john/page.aspx 应该重定向到 http:
我遇到了以下问题: 我的 Grails (2.2.0) 应用程序具有以下 URL 映射: "/api/clientQuote/$labcode/$cliCode/$quoCode"(controlle
我有一个很长的 URL,它不适合 URL 字段。它一直在修剪。该怎么办?有没有办法增加 SharePoint 2010 中的 URL 字段字符限制? 或者解决方法来容纳长 URL。例如,以下 URL
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我们从客户以前的开发人员那里继承了相当多的 Google Apps 脚本项目。 Apps 脚本通过嵌入式小部件部署在 Google 网站 (sites.google.com) 的各个页面上。每当我们需
我正在编写一些文档,但遇到了一些词汇问题: http://www.example.com/en/public/img/logo.gif 被称为“绝对”网址,对吗? ../../public/img/l
我们从客户以前的开发人员那里继承了相当多的 Google Apps 脚本项目。 Apps 脚本通过嵌入式小部件部署在 Google 网站 (sites.google.com) 的各个页面上。每当我们需
我是一名优秀的程序员,十分优秀!