2

スタンドアロン JNDI をセットアップし、データソースを JNDI にロードしています。私が使用するデータソースは次のとおりです: org.apache.commons.dbcp.BasicDataSource

JNDI は次のように設定されます。

        String detectorHost = InetAddress.getLocalHost().getHostName();
        System.out.println("detectorHost: " + detectorHost);
        System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        final NamingBeanImpl namingInfo = new NamingBeanImpl();
        namingInfo.start();

        final Main JNDIServer = new Main();

        JNDIServer.setNamingInfo( namingInfo );
        JNDIServer.setPort( 5400 );
        JNDIServer.setBindAddress(InetAddress.getLocalHost().getHostName());
        JNDIServer.start();

        final Hashtable _properties = new Hashtable();
        _properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        _properties.put(Context.PROVIDER_URL,            "jnp://" + InetAddress.getLocalHost().getHostName() + ":5400");

        final Context _context = new InitialContext(_properties);
        _context.createSubcontext("jdbc");
        String JNDI_PATH = "jdbc" + "/" + "mydbname";
        _context.bind(JNDI_PATH, getDataSource());

次の例外が発生します

javax.naming.CommunicationException [Root exception is     java.io.NotSerializableException: org.apache.commons.dbcp.BasicDataSource]
    at org.jnp.interfaces.NamingContext.bind(NamingContext.java:677)
    at org.jnp.interfaces.NamingContext.bind(NamingContext.java:611)
    at javax.naming.InitialContext.bind(Unknown Source)
    at com.lombardrisk.reform.integration.ReformIntegration.createJNDIServer(ReformIntegration.java:93)
    at     com.lombardrisk.reform.integration.ReformIntegration.main(ReformIntegration.java:44)
Caused by: java.io.NotSerializableException: org.apache.commons.dbcp.BasicDataSource
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.writeObject(Unknown Source)
    at java.rmi.MarshalledObject.<init>(Unknown Source)
    at org.jnp.interfaces.MarshalledValuePair.<init>(MarshalledValuePair.java:65)
    at org.jnp.interfaces.NamingContext.createMarshalledValuePair(NamingContext.java:1425)
    at org.jnp.interfaces.NamingContext.bind(NamingContext.java:640)

NotSerializableException 例外が発生する理由がよくわかりません。これは同じ JVM 内のローカル JNDI であり、リモート JNDI ではありません。なぜこれが起こるのか分かりません。

ここで何が間違っているのか誰かがアドバイスできますか。

よろしくD

4

1 に答える 1