Como usar datasource no jboss 5.1.0.GA?

Amigos,

eu estou tentando usar o data source do jboss 5.1.0.GA
mas não estou conseguindo pois esta dando erro. Uso Linux e JDK 1.6.0_17.
Baixei o Jboss 7.1 final pois vi que ele é mais facil pra configurar. Mas vi que nem a ultima versao do netbeans
da pra adicionar o servidor, dando a mensagem que aceita somente
da versao 6 pra baixo. Desta forma baixei até um plugin que adiciona no netbeans mas mesmo assim não adiantou, pois ainda não reconhece a versao 7 do JBoss.
Estou pensando continuar tentando fazer a configuração do datasource no JBoss 5.1.0.GA mesmo. Existe duas formas que estou tentando fazer, uma pelo .cfg do Hibernate e outra um teste em um .jar mas o resultado é o mesmo.

como fazer para configurar e acessar um datasource no Jboss tando pelo hibernate(session factory) e um .jar?

oracle-ds.xml dentro da pasta deploy do jboss

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
    <local-tx-datasource>
        <jndi-name>MyOracleDS/jndi-name>
        <use-java-context>false</use-java-context>                        
         <connection-url>jdbc:oracle:thin:@enderecobd:1521:Banco</connection-url>
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
        <user-name>user</user-name>
        <password>senha</password>     
         <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
        <metadata>
            <type-mapping>Oracle9i</type-mapping>
        </metadata>
    </local-tx-datasource>
</datasources>

no hibernate cfg do oracle

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.datasource">java:MyOracleDS</property>
        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
         ...
         ...
         ...

inicia o jboss sem nenhum erro e printa essa linha

[WrapperDataSourceService] Bound ConnectionManager ‘jboss.jca:service=DataSourceBinding,name=MyOracleDS’ to JNDI name ‘MyOracleDS’

classe de teste

import java.util.Hashtable;
import java.util.List;
import javax.naming.Context;
import org.hibernate.Session;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import java.util.Queue;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

/**
 *
 * @author pc
 */
public class TesteDataSource {

    /**
     * Testei de varias formas encontradas na internet mas nenhum deu
     */
    public static void main(String[] args) throws NamingException, SQLException {
//        testDataSource1();
//        testDataSource2();
//        testDataSource3();
//        testDataSource4();
//        testDataSource5();
//        testDataSource6();
//        testDataSource7();
        testDataSource8();
    }

    private static void testDataSource1() throws NamingException, SQLException {
        Properties properties = new Properties();
        properties.setProperty(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        properties.setProperty(InitialContext.PROVIDER_URL, "jnp://localhost:2809");//ja tentei varias portas aqui

        InitialContext ic = new InitialContext(properties);//isso daqui nunca funciona, só se não tiver nada no construtor
        if (ic != null) {
            DataSource ds = (DataSource) ic.lookup("MyOracleDS");
            Connection con = ds.getConnection();
            ResultSet rs = null;
            try {
                con = ds.getConnection();
                rs = con.prepareCall("select * from tabela").executeQuery();
                while (rs.next()) {
                    System.out.println(rs.getString(1));
                    System.out.println(rs.getString(2));
                    System.out.println(rs.getString(3));
                    System.out.println(rs.getString(4));
                    System.out.println(rs.getString(5));
                }
            } finally {
                if (rs != null) {
                    rs.close();
                }
                if (con != null) {
                    con.close();
                }
            }
        }

    }

    private static void testDataSource2() throws NamingException, SQLException {
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
        env.put(Context.PROVIDER_URL, "https://localhost:8443/invoker/JNDIFactorySSL");

        Context ic = null;
        DataSource dataSource = null;
        ic = new InitialContext(env);
        dataSource = (DataSource) ic.lookup("MyOracleDS");//ou java:MyOracleDS
        Connection con = dataSource.getConnection();
    }

    private static void testDataSource3() throws NamingException {
        final Properties env = new Properties();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
        env.put(Context.PROVIDER_URL, "remote://localhost:4447");
        Context context = new InitialContext(env);
        DataSource dataSource = (DataSource) context.lookup("java:MyOracleDS");
        Queue queue = (Queue) context.lookup("java:jdbc/MyOracleDS");
    }

    private static void testDataSource4() throws NamingException, SQLException {
        InitialContext ctx = new InitialContext();
        Connection con = null;
        DataSource dataSource = (DataSource) ctx.lookup("java:MyOracleDS");
        con = dataSource.getConnection();

        ResultSet rs = con.prepareCall("select * from tabela").executeQuery();
        while (rs.next()) {
            System.out.println(rs.getString(1));
            System.out.println(rs.getString(2));
            System.out.println(rs.getString(3));
            System.out.println(rs.getString(4));
            System.out.println(rs.getString(5));
        }
    }

    private static void testDataSource5() throws NamingException, SQLException {
        Context ic = new InitialContext();
        Context envCtx = (Context) ic.lookup("java:comp/env");
        DataSource dataSource = (DataSource) envCtx.lookup("jdbc/MyOracleDS");
        Connection conn = dataSource.getConnection();
        //Session session = sessionFactory.openSession(conn);
    }

    private static void testDataSource6() {
        //HibernateDAO dao = HibernateDAO.getHibernate();//aqui pegaria do cfg
        //Session s = dao.newSession();
        //List<Tabela> tabelas = s.createQuery("from Tabela").setMaxResults(10).list();
        //for (Tabela p : tabelas) {
        //    System.out.println(p.getNome());
        //}
    }

    private static void testDataSource7() throws SQLException {
        try {
            Properties env = new Properties();
            env.put(Context.SECURITY_PRINCIPAL, "guest");
            env.put(Context.SECURITY_CREDENTIALS, "guest");
            env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory");
            env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
            Context ctx = new InitialContext(env);

            Connection con = null;
            DataSource dataSource = (DataSource) ctx.lookup("java:MyOracleDS");
            con = dataSource.getConnection();

            ResultSet rs = con.prepareCall("select * from tabela").executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString(1));
                System.out.println(rs.getString(2));
                System.out.println(rs.getString(3));
                System.out.println(rs.getString(4));
                System.out.println(rs.getString(5));
            }

        } catch (NamingException ex) {
            ex.printStackTrace();
        }

    }

    private static void testDataSource8() throws NamingException, SQLException {
        InitialContext ic = new InitialContext();//isso daqui nunca funciona, só se não tiver nada no construtor
        DataSource ds = (DataSource) ic.lookup("MyOracleDS");//aqui da o erro
        Connection con = ds.getConnection();
    }
}

erros que acontecem:

teste1:

Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
        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 ppacote.TesteDataSource.testDataSource1(TesteDataSource.java:40)
        at pacote.TesteDataSource.main(TesteDataSource.java:26)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
        ... 5 more
Java Result: 1

teste 8:

Exception in thread "main" 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:645)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at pacote.TesteDataSource.testDataSource8(TesteDataSource.java:153)
        at pacote.TesteDataSource.main(TesteDataSource.java:33)
Java Result: 1

qualquer ajuda é bem vinda

Em uma linha vc diz para não usar o contexto java.

oracle-ds.xml

... <use-java-context>false</use-java-context> ...

Mas no arquivo do Hibernate vc usa com o contexto java.
hibernate.cfg.xml

... <property name="hibernate.connection.datasource">java:MyOracleDS</property> ...

Ou vc coloca true no oracle-ds.xml ou altera o hibernate.cfg.xml e remove o java:.

No caso do jar, se tiver dentro de uma aplicação que esteja rodando no JBoss basta isso:

Context context = new InitialContext(); DataSource dataSource = (DataSource) context.lookup("java:MyOracleDS"); // retirar o java: se colocar o use-java-context para false

Remoto é mais ou menos igual vc fez, eu lembro que fazia assim com EJB, talvez seja igual para o DS:

Properties env = new Properties(); properties.put("java.naming.factory.initial", "org.jboss.as.naming.InitialContextFactory"); properties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces"); properties.put("java.naming.provider.url","jnp://localhost:1099"); Context context = new InitialContext(env); DataSource dataSource = (DataSource) context.lookup("java:MyOracleDS"); // retirar o java: se colocar o use-java-context para false

ok, na hora que eu colei no post do forum esqueci de alterar, mas eu ja tinha testado com e sem java:

fiz um teste novamente com contexto false e passando direto mesmo assim não dá.

        <jndi-name>MyOracleDS</jndi-name>
        <use-java-context>false</use-java-context>


        no java.....


        DataSource ds = (DataSource) ic.lookup("MyOracleDS");

erro que da:

Exception in thread "main" 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:645)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        pacote.TesteDataSource.testDataSource8(TesteDataSource.java:153)
        pacote.TesteDataSource.main(TesteDataSource.java:33)
Java Result: 1

eu vou ter que criar um EJB pra isso?