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