簡體   English   中英

Websphere MQ無法創建初始JNDI上下文

[英]Websphere MQ unable to create initial JNDI context

我正在嘗試在“ websphere安裝位置” \\ tools \\ jms \\ samples上運行Websphere MQ 7.0安裝隨附的演示類(JMSJNDIProducer.java)。 我已啟動並運行Websphere,以下是我的Websphere配置...

  • 隊列管理器名稱:JMSDEMO
  • 隊列管理器端口:1414
  • 通道(默認):SYSTEM.DEF.CLNTCONN
  • 隊列名稱:JMSDEMO.QL
  • 讓我知道是否需要更多信息...

我的代碼在初始上下文創建期間失敗,我是Websphere MQ的新手,不確定是否需要initialContextUrl?

public class JMS_JNDI_Websphere_Sample {

private static String initialContextUrl = "tcp://localhost:1414";

public static void main(String args[]) {

    // Instantiate the initial context
    String contextFactory = "com.sun.jndi.fscontext.RefFSContextFactory";
    Hashtable<String, Object> environment = new Hashtable<String, Object>();
    environment.put(Context.INITIAL_CONTEXT_FACTORY, contextFactory);
    environment.put(Context.PROVIDER_URL, initialContextUrl);
    try {
        Context context = new InitialDirContext(environment);
    } catch (NamingException e) {
        e.printStackTrace();
    }
    System.out.println("Initial context found!");

}
}

我收到以下異常。

    javax.naming.InvalidNameException: tcp://localhost:1414 [Root exception is java.net.MalformedURLException: unknown protocol: tcp]
    at com.sun.jndi.fscontext.FSContextFactory.getFileNameFromURLString(FSContextFactory.java:119)
    at com.sun.jndi.fscontext.RefFSContextFactory.createContext(RefFSContextFactory.java:41)
    at com.sun.jndi.fscontext.RefFSContextFactory.createContextAux(RefFSContextFactory.java:47)
    at com.sun.jndi.fscontext.FSContextFactory.getInitialContext(FSContextFactory.java:49)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.init(InitialContext.java:223)
    at javax.naming.InitialContext.<init>(InitialContext.java:197)
    at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:82)
    at com.hcsc.jms.websphere.jndi.JMS_JNDI_Websphere_Sample.main(JMS_JNDI_Websphere_Sample.java:32)
Caused by: java.net.MalformedURLException: unknown protocol: tcp
    at java.net.URL.<init>(URL.java:574)
    at java.net.URL.<init>(URL.java:464)
    at java.net.URL.<init>(URL.java:413)
    at com.sun.jndi.fscontext.FSContextFactory.getFileNameFromURLString(FSContextFactory.java:117)
    ... 9 more

私有靜態字符串initialContextUrl =“ tcp:// localhost:1414”;

首先,我不認為“ tcp”是有效值,如果是,那么您是否在端口1414上運行某些東西來回復JNDI查找請求?

其次,我認為您將MQ端口1414與JNDI查找混淆了。

第三,為什么不遵循JmsJndiProducer.java中的示例並使用基於文件的JNDI。

即使用MQ Explorer並選擇“ JMS管理對象”,然后執行基於文件的JNDI。

一旦創建了基於文件的JNDI,那么該值即為您的初始上下文。

您需要分離出JMS API提供的消息處理的概念,以及通過JNDI查找對象的方法。 正如Roger所說,問題是MQ偵聽器和JNDI URL之間的混亂

JNDI分為用於綁定和查找目錄中對象的接口,以及用於將對象帶入某些持久性存儲區的“服務提供者”。 com.sun.jndi.fscontext.RefFSContextFactory是使用文件系統的服務提供者,因此此URL必須為EXISTING目錄。 當對象被“綁定”到.bindings文件中時(如果對象已經存在,則更新)。 您不需要創建.bindings文件。 該文件是由文件系統上下文為您創建的。 也不要手工修改。

通常,您將使用LDAP支持的JNDI服務提供商進行生產使用。 應用程序中使用的“查找” API相同; 所要更改的是提供者URL(將提供LDAP服務器的位置)以及可能的對象名稱。

建議閱讀Oracle的JNDI教程 ..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM