URGENTE- Dúvida de JNDI

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

public class JNDIBind {
    
    private final static String JNDI = "sams/book";
    
    public static void main(String[] args) {
        try {
            Hashtable env = new Hashtable();
            
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
            env.put(Context.PROVIDER_URL, "localhost:1099");                        
            
            Context ic = new InitialContext();
            ic.bind(JNDI, "Teach YourSelf J2EE in 21 Days");
            
            System.out.println("Bound: " + JNDI);
        }catch(NamingException ex) {
            System.err.println(ex);
            System.exit(1);
        }
    }
}

Galera, tá vendo esse código aí? Não tá funcionando… Ele remete um erro na execução:

javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]

Pelo que eu tenho no livro, essa classe é a Default do JNDI para o contexto inicial.
Eu sei que tem que fazer alguma referência no ClassPath, mas não sei que referencia é essa…

O J2EE que eu to usando é o 1.4…
Alguém pode me ajudar?

Abs

Ramon

A classe com.sun.enterprise.naming.SerialInitContextFactory não está no seu classpath.

Poxa, então eu vou ter que colocar todas as classes que eu uso no classpath? Acho que isso não é muito viável…visto que o meu classpath já está configurado perfeitamente (Eu acredito)

Tem outra soluçao? Alguma outra classe que eu possa usar?

Ramon

Passe como parâmetro da tua JVM…

Ou você passa pra JVM como achar a classe, ou não tem negocio.

Isso não vai resolver o meu problema.
Mas mesmo assim,

Obrigado.

Ramon

Vc pode criar um jar com seus principais pacotes e colocar no classpath, mas lembra que se vc publicar esta aplicacao devera levar o jar junto com a aplicacao.

Ah, entaum sem dúvida isso aquih vai!!! :twisted:

(187,000 hits in 0.07 seconds…Eu amo a Sta. Google! :mrgreen: )

Tente isso:

import java.util.;
import javax.naming.
;

public class JNDIBind {

private final static String JNDI = "sams/book";

public static void main(String[] args) {
    try {
        Hashtable env = new Hashtable();

env.put(“java.naming.factory.initial”,
“com.sun.jndi.cosnaming.CNCtxFactory”);
env.put(“java.naming.provider.url”, “iiop://” + host + “:”+port);

        Context ic = new InitialContext();
        ic.bind(JNDI, "Teach YourSelf J2EE in 21 Days");
        
        System.out.println("Bound: " + JNDI);
    }catch(NamingException ex) {
        System.err.println(ex);
        System.exit(1);
    }
}

}

Olá

[quote=RamonSilva]…visto que o meu classpath já está configurado perfeitamente (Eu acredito)
[/quote]

Se você tem a variável de ambiente CLASSPATH configurada no seu computador então precisa rever seus conceitos. Eu realmente não entendo porque alguém que usa mais de um programa diferente escrito em Java teria alguma necessidade de configurar a variável CLASSPATH no seu computador. Desde a versão 1.2 do Java que isto não é mais necessário. O modo correto é fazer o que o Louds indicou, isto é, passar o classpath específico de cada aplicação na linha de comando que invoca a JVM dentro do arquivo de script (.bat ou .sh) que inicializa a aplicação, seja o classpath de que tamanho for.

[]s
Luca