miércoles, 17 de marzo de 2010

Utilizar un DataSource desde una clase con Main

Para poder consumir y utilizar un DataSource desde una clase que no esta dentro de un Jboss lo que hay que hacer es lo siguiente

1) Definir los siguientes métodos:

private static final String NAME_JNDI_DS = "ds/PlataformaBase"; // OJO!! -> SIN EL "java:ds/PlataformaBase" DataSource dataSource = null; private static ConnectionPool instance;
private ConnectionPool() {
try {
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, "10.33.13.22:1199");

InitialContext context = new InitialContext(env);
dataSource = (DataSource)context.lookup(NAME_JNDI_DS);
} catch (NamingException e) {
System.out.println(" ERROR NamingException ConnectionPool: " + e + " - " + e.getMessage());
}
}

public static ConnectionPool getInstance (){
if (instance == null )
instance = new ConnectionPool();
return instance;
}

public Connection getConnection () throws SQLException {
try {
Connection retorno = null;
retorno = dataSource.getConnection();

return retorno;
} catch (SQLException e) {
log.error("ERROR NamingException ConnectionPool: " + e + " - " + e.getMessage());
throw e;
}
}

2) El main es el siguiente:

public static void main(String[] args) {
// TODO Auto-generated method stub

try {
ConnectionPool objCP = ConnectionPool.getInstance();
Connection conn = objCP.getConnection();
PreparedStatement prst = null;
ResultSet rs = null;

String strConsulta = "";
strConsulta = "SELECT * FROM FUNCIONALIDAD_SERVICIO";
prst = conn.prepareStatement(strConsulta);
rs = prst.executeQuery();
while(rs.next()){
System.out.println(rs.getString("PK_FSE_COD_FUN")+" -> "+rs.getString("FSR_NOM"));
}
} catch (Exception e) {
System.out.println("Error al conectarse");
e.printStackTrace();
}
}

3) El datasource debe estar definido asi:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>ds/PlataformaBase</jndi-name>
<!--<use-java-context>false</use-java-context>-->
<connection-url>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = _HOST_)(PORT=1521)))(CONNECT_DATA =(SERVICE_NAME = _SERVICE_NAME_)))</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>_USER_</user-name>
<password>_PASSWORD_</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<idle-timeout-minutes>10</idle-timeout-minutes>
<min-pool-size>1</min-pool-size>
<max-pool-size>8</max-pool-size>
</local-tx-datasource>
</datasources>

4) Hacer el deploy de la aplicacion y el DataSource en JBoss y deberia funcionar.

No hay comentarios:

Mis fotos en TrekEarth