1

我想使用 Context.list("") 方法从独立应用程序中列出 Glassfish JNDI 树根内容。

JNDI 树上下文从远程 (127.0.0.1) Glassfish 服务器启动。查找工作正常,因为我使用 asadmin 工具在“资源”上下文中注册了自定义资源。

问题是 list() 返回空集合,我得到"hasMore() returns: false"输出。 asadmin list-jndi-entries(没有指定 --context )给出了几行输出,其中包含“资源”上下文,我希望在这个示例程序输出中看到这些行。

package jndisampleapp;

import java.util.Hashtable;
import javax.naming.*;

/**
 *
 * @author user1
 */
public class JNDISampleApp {

    static Context ctx;

    public static void main(String[] args) {
        Hashtable properties = new Hashtable(2);

        properties.put(Context.PROVIDER_URL,"iiop://127.0.0.1:3700");
        properties.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.enterprise.naming.SerialInitContextFactory");

        // Creating initial context instance.
        try {
            ctx = new InitialContext(properties);
        } catch (NamingException ex) {
            System.out.println(ex.getMessage());
        }
        // Test lookups (works fine).
        try {
            System.out.println("Res: " + String.valueOf((Double)ctx.lookup("resource/rate")));
        } catch (NamingException ex) {
            System.out.println(ex.getMessage());
        }
        try {
            System.out.println("Res: " + String.valueOf((Boolean)ctx.lookup("resource/flag")));
        } catch (NamingException ex) {
            System.out.println(ex.getMessage());
        }
        // Listing context contents.
        try {
            NamingEnumeration enumN = ctx.list("");
            System.out.println("hasMore() returns: " + enumN.hasMore());
            while (enumN.hasMore()) {
                NameClassPair p = (NameClassPair) enumN.next();
                System.out.println(
                        "name = " + p.getName() + ", class = " + p.getClassName());
            }
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        }
}
4

0 回答 0