如何从 Java SE 中的 GlassFish 服务器获取初始上下文?

2024-03-22

我有一个如下所示的课程:

public class Poligon {

    public static void main(String[] args) {

        try {
            Context ctx = new InitialContext();
            ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("jms/javaee7/ConnectionFactory");
            Destination destination = (Destination) ctx.lookup("jms/javaee7/Topic");
            JMSContext context = connectionFactory.createContext();
            OrderDTO order = context.createConsumer(destination).receiveBody(OrderDTO.class);
            System.out.println("Order received: " + order);
        } catch (NamingException ex) {
            Logger.getLogger(Poligon.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

我想从本地主机上运行的服务器(glassfish)获取 InitialContext(),但出现以下错误:

SEVERE: null
javax.naming.NoInitialContextException: Need to specify class name in environment or  system property, or as an applet parameter, or in an application resource file:  
    java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)
    at javax.naming.InitialContext.lookup(InitialContext.java:411)
    at poligon.Poligon.main(Poligon.java:29)

我知道我必须在 glassfish 上创建 ldap 领域并将以下代码(? - 不知道确切的值)添加到我的类中:

Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY,
            "?");
    env.put(Context.PROVIDER_URL, "?");
    env.put(Context.SECURITY_PRINCIPAL, "?");
    env.put(Context.SECURITY_CREDENTIALS, "?");

Context ctx = new InitialContext(env);

我的问题是我不知道应该是什么值:

Context.INITIAL_CONTEXT_FACTORY
Context.PROVIDER_URL (I want it on localhost)
Context.SECURITY_PRINCIPAL
Context.SECURITY_CREDENTIALS

我不知道应该如何配置 glassfish 服务器?

Maven 依赖项

    <dependency>
        <groupId>org.glassfish.main.extras</groupId>
        <artifactId>glassfish-embedded-all</artifactId>
        <version>4.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.main.appclient.client</groupId>
        <artifactId>gf-client</artifactId>
        <version>3.1.2.2</version>
    </dependency>

为了使用 JNDI,您需要指定java.naming.factory.initial不知怎的,就像错误消息所说的那样。

有多种方法可以做到这一点:

您可以通过以下方式将其指定为 Glassfish 中的系统属性server (Admin server) -> Properties

或者,您可以在 HashTable 中指定它并将其传递给构造函数InitialContext:

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,  
    "com.sun.enterprise.naming.SerialInitContextFactory");

Context ctx = new InitialContext(env);

如果你使用Spring,你也可以这样做:

<bean id="myJndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">com.sun.enterprise.naming.SerialInitContextFactory</prop>
            <prop key="java.naming.factory.url.pkgs">com.sun.enterprise.naming</prop>
            <prop key="java.naming.factory.state">com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl</prop>
        </props>
    </property>
</bean>

See http://docs.oracle.com/javase/jndi/tutorial/beyond/env/context.html http://docs.oracle.com/javase/jndi/tutorial/beyond/env/context.html了解更多信息。

就实际值而言,上面的 Spring 配置是我们实际使用的Glassfish。我们不指定提供商 url 或凭据。

我不认为这与创建 ldap 领域真正相关,但 Glassfish 可能会使用 JNDI 来查找领域。

Edit:

我想我可能明白问题是什么,您正在尝试从客户端访问远程类。有了这个假设,您可以使用 Spring 和 JndiTemplate 来完成此操作。假设服务器提供了正确的 EJB 类,请在客户端执行此操作:

为 JndiTemplate 创建一个 bean:

  <bean id="myJndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
      <props>
        <prop key="java.naming.factory.initial">com.sun.enterprise.naming.SerialInitContextFactory</prop>
        <prop key="org.omg.CORBA.ORBInitialHost">${servername}</prop>
        <prop key="org.omg.CORBA.ORBInitialPort">${jndiport}</prop>
      </props>
    </property>
  </bean>

然后您可以使用这个 bean 来查找服务器上的内容。如果您想更进一步,调用您自己的远程 EJB 类,您也可以这样做:

  <bean id="ejbProxy"
        class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean"
        abstract="true">
    <property name="refreshHomeOnConnectFailure" value="true"/>
    <property name="cacheHome" value="true"/>
    <property name="lookupHomeOnStartup" value="true"/>
    <property name="resourceRef" value="false"/>
    <property name="jndiTemplate" ref="mySpringTemplate"/>
  </bean>

然后将 bean 定义为:

  <bean id="someRemoteService" parent="ejbProxy">
    <property name="jndiName"
              value="com.company.service.MyRemoteService"/>
    <property name="businessInterface"
              value="com.company.service.MyRemoteService"/>
  </bean>

您可以像常规 bean 一样注入它,对它的任何调用都将发送到服务器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Java SE 中的 GlassFish 服务器获取初始上下文? 的相关文章

  • eclipse juno 打开时出错

    在安装 Eclipse 并正常工作一年多后 我今天打开 Eclipse Juno 并在打开工作区时收到一条错误消息 我使用的是 Windows 8 64 位 Java 64 位和 Eclipse 64 位 此后我尝试重新安装 Java 和
  • 匿名内部类显示不正确的修饰符

    据我了解 以下代码应该打印true作为输出 但是 当我运行这段代码时 它正在打印false 来自 Java 文档15 9 5 匿名类 https docs oracle com javase specs jls se8 html jls 1
  • 包含小时、分钟和秒的周期[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个代表年 月 周 日 小时 分钟 秒的间隔数据类型 前三年 年 月 日 可以用Period最后
  • 如何在 Java 中安装附加包?

    我对 Java 很陌生 我想使用名为的包中的一些功能daj 教程代码有以下几行 import daj import java util import java lang Math import Msg 但第一行和第四行会产生红色下划线 导致
  • Java 中的本机方法

    我花了一些时间学习什么是 Java Native 方法以及它们是在平台相关代码 主要是 C 中实现的 但是我在哪里可以找到这些 Java 的本机实现呢 例如 Thread 类的 sleep long millis 方法是本机的 但它的实现代
  • 将二进制数据的 byte[] 转换为 String

    我有二进制格式的数据 hex 80 3b c8 87 0a 89 我需要将其转换为字符串 以便通过 Jackcess 将二进制数据保存在 MS Access 数据库中 我知道 我不打算在 Java 中使用 String 来存储二进制数据 但
  • 无法启动组件 [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/LabWebServletHibernate]]

    当使用 eclipse neon 1 在 tomcat 8 上运行应用程序时 我收到此错误 它使用 spring 4 3 3 hibernate 5 2 4 和 maven 嚴重 A child container failed durin
  • 首选项活动中的广告“没有足够的空间来显示广告!需要:<480, 75>,拥有:<432, 1073741823>”

    我试图在偏好活动中展示广告 但它从未出现 Logcat 始终显示消息 没有足够的空间来显示广告 想要 有 这就是我制作广告的方式 我对广告有自定义偏好 public class AdmobPreference extends Prefere
  • 可以混合使用 JVM 语言吗?即:Groovy 和 Clojure

    我知道你可以轻松地混合groovy java clojure java 无论什么JvmLang java 这是否也意味着我也可以让 clojure 和 groovy 代码进行交互 如果我使用 Grails 或 jRoR 我也可以在该环境中使
  • 如何连接hibernate和DB2

    我正在运行一个使用 struts 和 hibernate 的应用程序 我目前正在使用 Derby 数据库 现在我必须转向 DB2 数据库 请告诉我 我必须做什么配置 休眠配置文件 我必须设置任何类路径吗 多变的 我知道 DB2 有两个 ja
  • 在 javafx 中注册鼠标处理程序,但处理程序不是内联的

    我有一个 JavaFX 应用程序变得有点大 我想保持代码的可读性 我有一个折线图 我希望内置缩放功能 该功能在单击鼠标时发生 我知道我需要向图表注册鼠标侦听器 我无法从 Oracle 示例中弄清楚什么 即如下所示 http docs ora
  • 如何在 Ivy 中使用不同的分类器下载多个 Maven 依赖项?

    我试图依靠Neo4j 服务器 jar http repo neo4j org content repositories snapshots org neo4j app neo4j server 1 5 SNAPSHOT neo4j serv
  • 使用antlr4获取预处理器行并解析C代码

    我正在使用 Antlr4 来解析 C 代码 并使用以下语法来解析 链接到 C g4 https github com antlr grammars v4 blob master c C g4 上面的语法默认不提供任何解析规则来获取预处理器语
  • 在 Java 中打开现有文件并关闭它。

    是否可以在java中打开一个文件附加数据并关闭多次 例如 psuedocode class variable declaration FileWriter writer1 new FileWriter filename fn1 writer
  • 如何在Webview中保存用户名和密码

    目前 我还在学习Android开发的过程中 所以如果我的这个问题对你来说不太容易理解 请原谅 我创建了一个 Android 应用程序 它使用 RecyclerView 显示一组列表 当用户单击列表中的每个名称时 它会将它们重定向到一组不同的
  • WebSocketStompClient 将无法连接到 SockJS 端点

    我正在尝试新的 从版本 4 2 开始 java STOMP 客户端支持 我的出发点是入门指南 使用 WebSocket 构建交互式 Web 应用程序 http spring io guides gs messaging stomp webs
  • Maven `help: effective-pom` 只为单个项目生成,而不是所有项目

    我想为多模块构建中的所有子项目生成有效的 pom The help effective pom文档here http maven apache org plugins maven help plugin usage html The hel
  • Android应用程序中的模式输入

    我想知道是否有其他替代方案可以替代 Android 上平庸的 EditText 密码输入 是否有 API 或开源代码可以集成到我的应用程序中 类似于锁屏图案解锁 Intent 可能会返回哈希值 数字 字符串或代表用户输入的模式的任何内容 我
  • javafx中的stackpane和root有什么区别?

    我正在练习javafx做饼图 以下是开发饼图的代码 如果我这样做Group并与StackPane 我发现输出没有区别 我已经评论了组部分 只是徘徊两者之间的区别 import javafx application Application i
  • 按字母顺序对对象的 ArrayList 进行排序

    我必须创建一个方法来排序数组列表根据电子邮件按字母顺序排列对象 然后打印排序后的数组 我在排序时遇到麻烦的部分 我已经研究过并尝试使用Collections sort vehiclearray 但这对我不起作用 我是因为我需要一个叫做比较器

随机推荐

  • BMI计算器C代码[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在尝试编写一个简单的 BMI 计算器 但出于某种原因 当我尝试身高 175 公式为 1 75 和体重 70 时 它应该给出 2
  • 使用 OpenXmlReader

    我讨厌诉诸 StackOverflow 来获取如此 看似 基本的东西 但过去几个小时我一直在与 Microsoft 斗争 似乎陷入了死胡同 我正在尝试阅读 大型 Excel 2007 电子表格 Google 友好地告诉我 使用 OpenXm
  • UITableview:单击自定义按钮时动态更改单元格高度

    我有一个 UITableview 其中每个单元格都有一个按钮 我的问题是 如果我单击第一行中的按钮 单元格的高度会增加 然后我单击 tableviewcell 中的另一个按钮 已展开的单元格高度将减小 选定的单元格高度将增加 尝试此链接后U
  • Ruby on Rails:符号作为 form_for 中的参数

    我明白传递给的是什么form for执行以下操作时的方法 if user在控制器中设置 这是很明显的 但当我们经过时会发生什么 user 正如我在很多例子中看到的那样 我什么时候应该使用符号版本 使用该符号将生成
  • Objective C 类通过工厂方法继承

    我想继承一个具有工厂方法的框架类 如何使工厂方法返回我继承的类类型的对象 我发现这篇有用的文章 http qualitycoding org factory method 它描述了类似的情况 但在他们的情况下你可以控制超类 我怎么能写 比如
  • 我可以使用临时的右值引用吗?这是未定义的行为吗?

    更新问题为什么这两个右值引用示例有不同的行为 https stackoverflow com questions 35315472 why this two rvalue references examples have different
  • java.util.List 的降序迭代器

    链表可以使用升序或降序迭代器进行迭代 如下所示 LinkedList list new LinkedList StringJoiner sJ1 new StringJoiner list iterator forEachRemaining
  • 在Java 线程中使用PreparedStatements 是否正确?

    我还是一名本科生 只是在做兼职 所以我总是试图了解更好的做事方法 最近 我必须编写一个工作程序 其中程序的主线程将生成 任务 线程 对于每个数据库 任务 记录 该线程将执行一些操作 然后更新记录以表明它已完成 因此 我需要 Threaded
  • 判断两个数组是否具有相同成员的算法

    比较两个数组以查看它们是否具有相同成员的最佳算法是什么 假设没有重复项 成员可以按任何顺序排列 并且都没有排序 compare a b c d b a d c gt true compare a b e a b c gt false com
  • 如何在firebase云函数中指定声音和click_action

    我尝试使用以下函数 node js v8 exports sendComNotification functions firestore document Comunicados comID onUpdate snap context gt
  • 如何为 ASP.NET MVC 3 + Razor 视图封装可重用的“控件”

    我正在寻找有关如何创建可在多个 MVC 3 视图上使用的可重用 控件 的最佳实践 我可以创建一个 Html 帮助程序扩展方法 以编程方式或使用 razor 中的声明性帮助程序 或者我可以创建一个部分视图 就我而言 诀窍是我需要做的不仅仅是将
  • CSS垂直浮动技术

    垂直浮子是否可以与水平浮子类似地工作 在下面的 Html 中 我希望绿色按钮保持原样 黄色按钮漂浮到灰色形状边缘之外的底部 table style margin 250px width 50px height 100px backgroun
  • python追加到json对象中的数组

    我在 python 中有以下 json 对象 jsonobj a b c var1 d var2 e 我想将键值元素附加到 e 中 但无法弄清楚它的语法 我尝试附加以下内容 但括号和引号的结果不正确 jsobj a b e append f
  • 如何向ListView的列表项添加图标/图像

    我已经使用 arrayadapter 创建了 listview 我将 arrayadapter 添加到包含字符串数组的 listview 但我无法添加图标来 eatch listitem 帮帮我 这里有一个免费摘录 http commons
  • 是否可以禁用隐式 ToString() 调用?

    我想知道是否有办法获得此代码的编译错误 var customer new SomeCustomerClass Console WriteLine Customer address customer 所以我将被迫写这样的东西 var cust
  • 如何创建全局样式表以在 Nx React 项目中共享 scss 变量?

    现在 我真的希望这不是太基于意见 但我只是想在这里提供一些建议 因为我不知道如何开始 我有一个基本的Nx https nx dev 带有 TypeScript React 前端的工作区SCSS https sass lang com 风格
  • 如何使用 ARC 处理“require(..., bail)”语句?

    我正在查看一些示例代码Apple 示例代码中的 Square Cam http developer apple com library ios samplecode SquareCam Introduction Intro html 我想使
  • 获取编辑文本的值错误NULLPOINTER 为什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在尝试从对话框上显示的编辑字段的值获取文本并将其保存在变量中 final Dialog dialog new Dialog contex
  • 在jboss 7.1.1中配置gmail

    我正在使用 jboss 7 1 1 想使用 JavaMail 发送电子邮件 我尝试过以下配置 但出现错误 有人用 Jboss 7 1 1 配置过 gmail 吗
  • 如何从 Java SE 中的 GlassFish 服务器获取初始上下文?

    我有一个如下所示的课程 public class Poligon public static void main String args try Context ctx new InitialContext ConnectionFactor