Como crear un DataSource en WebLogic

Data SourceEn este artículo les explico los pasos que se tiene que llevar a cabo para registrar un nuevo Data Source en WebLogic. Los Data Source o fuentes de datos nos permitirán administrar el acceso a los datos de una forma mas segura, ya que en vez que cada aplicación mantenga las credenciales a las base de datos, estas estarán resguardas por el Data Source. Los data source también permiten mantener un conjunto de conexiones abiertas para estar disponibles al instante de ser requeridas.

  1. Lo primero que tendremos que hacer es entrar a la consola de WebLogic la cual generalmente la URL es http:// <host> : <puerto> /console y en caso de estar instalada en el localhost la url por default es http://localhost:7001/console.
  2. Una vez en la consola ubicamos la opción de Data Source que se encuentra las opciones del lado izquierdo.DataSource
  3. En Data Source aparece una tabla con los Data Source registrados en WebLogic y la opción de crear uno nuevo, para lo cual presionamos en New y presionamos en la opción Generic Data Source. DataSourceEn caso de que la opción no aparezca habilitada es por que tenemos configurado el WebLogic en modo productivo y para poder crear un Data Source es necesario crear una Actividad desde la parte superior izquierda.
  4. En la siguiente pantalla determinamos el nombre del DataSource el Nombre de JNDI y el tipo de base de datos que vamos a utilizar. presionamos Next para continuar.DataSourceName representa el identificador dentro de WebLogic, JNDI Name representa el nombre con el cual aremos referencia desde nuestra aplicación para poderlo inyectar por medio de CDI, Database Type es el tipo de base de datos o proveedor a utilizar.
  5. En la siguiente pantalla tendremos que elegir el driver que queremos utilizar para realizar la conexión a la base de datos. En este caso seleccionamos el driver de Oracle con soporte para XA o Transacciones Distribuidas. en caso de no ser requerido una conexión XA solo seleccionamos la driver que no dice XA y listo.DataSource
  6. En la siguiente pantalla solo presionamos NextDataSource
  7. Es tiempo de configurar el acceso a la base de datos pues en esta pantalla tendremos que poner el nombre de la base de datos,host,puerto,suario/password y presionamos Next para continuar.DataSource
  8. La siguiente pantalla nos confirma la clase a utilizar para la conexión y el String de conexión, a qui solo nos queda presionar en Test Configuration para asegurarnos de que los datos de conexión son correctos. continuamos con Next.DataSource
  9. En este punto los datos de conexión son correctos y solo falta desplegar el DataSource por lo que Weblogc nos pide seleccionar las instancias o servidores en los cuales nuestro DataSource estará presente, En mi caso solo tengo un servidor por lo que solo selecciono AdminServer. Finalmente presionamos Finish y nuestro DataSource estará listo para utilizarse.DataSource
  10. WebLogic nos regresa a la lista de DataSource donde podremos ver nuestro data source. Nota:Si estas con una configuración de modo productivo tendrás que dar commit a la actividad que creaste hace un momento en la parte superior izquierda de la pantalla.

 

Con esto finalizo y espero que les sea de utilidad.

Artículos relacionados

JPA – Resource Local transaction Resource Local es un tipo de transaccionalidad que soporta JPA que delegar la responsabilidad de las transacciones al programador, de esta manera, el ...
Web Services con Java (JAX-WS) Los Web Services cada vez son más indispensable a la hora de construir aplicaciones, debido a que ya casi cualquier aplicación empresarial, requiere i...
Java 8 – Default Method Una de las novedades que trae Java 8 a nivel del lenguaje, son los Default Method o Métodos default, los cuales permiten agregar métodos implementados...

Oscar Blancarte

Ideológico, Innovador y emprendedor, Padre, Tecnólogo y Autor, amante de la ciencia y la tecnología en todos sus colores y sabores. Arquitecto de software & Full Stack Developer con experiencia en la industria del desarrollo de software y la consultoría. Amante de la programación y el Ajedrez.

38 comentarios en “Como crear un DataSource en WebLogic

  1. Hi, greetings from colombia. You could help me with an answer about how to get a data source from java class. I am trying and trying and trying and nothing. My jndi name: jdbc_jndi, data source name: jdbc_data_Source. The error: “javax.naming.NoInitialContextException: Need to specify class name in environment or system property,..”, my code is:

    package java_conexion;

    import java.sql.*;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    public class J03_conexion_03 {
    public static void main(String[] args) {
    Connection connection=null;
    try {
    Context ctx=new InitialContext();
    javax.sql.DataSource ds=(javax.sql.DataSource)ctx.lookup(“jdbc_data_Source”);
    Connection con=ds.getConnection();

    Statement stat = connection.createStatement();

    String sentencia_sql_consultar_general = “SELECT * FROM USUARIOS”;
    ResultSet rs2 = stat.executeQuery(sentencia_sql_consultar_general);
    while (rs2.next()) {
    System.out.println( rs2.getString(“nom”) );
    }
    stat.close();
    connection.close();
    }
    catch(Exception e)
    {
    System.out.println(e);
    }
    }
    }

    1. Hola Carlos.
      El problema es muy simple, cuando tu inicializas la clase Context ctx=new InitialContext(); desde un método main o desde una contexto fuera del servidor, el InitialContext no se inicializa correctamente, para tu poder obtener recursos por medio de JNDI desde fuera del servidor tienes que indicarle al InititalContext los parámetros de conexión con el servidor, para saber que parámetros enviarle te invito a que accedas a la siguiente URL http://docs.oracle.com/javase/jndi/tutorial/basics/prepare/initial.html
      Por otra parte, si tu intentas acceder a los recursos por medio del InitialContext desde dentro del servidor como por ejemplo en un Servlet, EJB, Webservices, etc. veras que el InitialContext como lo tienes definido funcionara perfectamente.

      Saludos.

      1. Muchas gracias Oscar por la pronta respuesta que efectivamente me hace tener en cuenta desde donde quiero acceder al data source si dentro o fuera del server, claro, tiene razón. Voy a revisar bien. El link recomendado no funciona. saludos y gracias.

        1. Como comentario adicional, una buena práctica es que los data source inicialicen con jdbc/ por dos razones: la primera es muho más descriptivo el nombre, ya que nos dice rápidamente que se trata de un DataSource y la segunda es que hay menos posibilidades que colicione con algún otro JNDI de otro tipo de recurso, recurda que el JNDI es un identificador único de recursos en todo el servidor.

          1. Buenos días Oscar. Quería molestarlo y hacerle una consulta. Como puedo sacar una copia de las aplicaciones de ejemplo que he hecho en jdev11. No encuentro las carpetas. Recuerdo que en jdev10 era solo ir a jdevstudio10134-B4270jdevmywork. Voy a reinstalarlo. Por ahora me rindo con lo del Data Source. Ayer inicié mis vacaciones del trabajo y tendré unas cuantas semanas para seguir revisando todo esto. saludos, gracias.

  2. Buenos días Oscar. Quería molestarlo y hacerle una consulta. Como puedo sacar una copia de las aplicaciones de ejemplo que he hecho en jdev11. No encuentro las carpetas. Recuerdo que en jdev10 era solo ir a jdevstudio10134-B4270jdevmywork. Voy a reinstalarlo. Por ahora me rindo con lo del Data Source. Ayer inicié mis vacaciones del trabajo y tendré unas cuantas semanas para seguir revisando todo esto. saludos, gracias.

  3. Oscar, ya resolví la consulta de las copias de las aplicaciones. Las dejó en UsersLCRAMIREZCDocumentsJDevelopermywork , seguramente no me fijé en la configuración al instalarlo. saludos.

    1. De igual forma puedes revisar la URL en donde se creó el proyecto al entrar a las propiedades del proyecto, para lo cual solo realizamos un click derecho sobre el proyecto en cuestión y listo, en la primera opción del menú izquierdo encontraras la URL.
      Saludos.

  4. Tengo 20 días de vacaciones. Oscar, quisiera saber si tengo un limite de preguntas que pueda hacer en este blog, o podría consultarle abiertamente, obviamente con la espera correspondiente. Saludos

  5. Oscar buenos días, como está. Quería consultarle sobre este error generado en una JSP: “no tag library could be found with this uri”. Tengo entendido que se genera porque no empata el atributo uri con el que se encuentra en el archivo descriptor .tld. Quisiera saber como lo puedo configurar en mi ventana del web.xml, sección “tag libraries” en jdeveloper11g, y como sé cual archivo .tld se debe cargar, en donde está ubicado. Por otro lado, quería recomendarle por favor si tiene o sabe de alguna guía con ejemplos cortos sobre el envío/manejo de datos desde jsp con servlets DAO. Ya superé lo del Data Source, ya pude hacer la conexión desde weblogic. Pero ahora quiero usando la conexión con el Data Source capturar datos en una JSP (o enviarlos desde una clase) y manejarlos con un servlet que los reciba con DTO y los procese con DAO para insertarlos en la DB. He encontrado unos ejemplos que son muy extensos y tienen cosas adicionales que me confunden y no me dejan ver la esencia básico de lo que necesito. Gracias saludos.

    1. Hola Luis, sin ver tu código es complicado saber con precisión que está pasando, lo qué te puedo decir es que probablemente desde tu IDE estas usando una versión distinta que la que soporta el Runtime del Weblogic, lo que te propongo que realices para validar si este es el problema es que agregues la Liberia jstl.jar que está utilizando desde el IDE al paquete WEB-INF/lib de tu proyecto, es importante que cuando generes el War, esta Liberia se incluya, deploya y veremos si efectivamente este fue el problema.

      Con respecto a lo del JSP, de momento no tengo nada en mi blog que hable de esto, pero te puedo invitar a que veas la siguiente página (http://www.tutorialspoint.com/jsp/jsp_database_access.htm) en donde hablan de cómo realizar las operaciones básicas de los JSP.

      1. Voy a revisar lo recomendado. De otro lado acabando de ver la página recomendada sobre operaciones a la DB desde la JSP, me sorprendió. Pero qué es mejor, hacer esas operaciones desde un servlet usando DAO, o desde una clase, o desde la JSp?. La verdad no había tenido oportunidad de verlas dentro de la JSP, es algo nuevo. Pero según lo que he leido, esto mezcla la capa de presentación con la persistencia. Pero está muy interesante. saludos, y gracias

        1. Realizar la persistencia desde un DAO obedece a la famosa arquitectura de 3 capas, en donde tienes una capa de presentación, una segunda de negocio y la tercera la capa de persistencia. En este caso el DAO representa la tercera capa. Si hablamos de buenas prácticas y ventajas, desde luego que persistir desde un DAO sería mucho mejor, aun que requiere un conocimiento un poco superior, si lo que quieres es aprender a guardar en base de datos, y estas trabajando en un proyecto didáctico, sería buena opción que lo hagas directamente y ya que te sientas seguro pases a implementar un arquitectura de 3 capas.

          1. Si si de acuerdo, por eso es que busco ejemplos muy sencillos, los entiendo y luego voy ampliando y conociendo mas. gracias, saludos

  6. Hola Oscar. Hice la copia del jstl.tl en el directorio mas semejante al que usted me indicó: “C:UsersLCRAMIREZCDocumentsJDevelopermyworkServletBasicoDaoProject1public_html”, pero no me funcionó. El foldercito WEB-INF/ si aparece dentro del Application navigator del jdev11g, pero en las carpetas en el exploraodor no la encontré. En Fin, dado que usted me dijo que era un jstl, consulté y encontré que había que adicionarle al proyecto las JSP Tag Libraries en las propiedades del proyecto enb jdev11g, y ahi aparecen todas, incluida la jstl Core que era la del error de la JSP, ya me corrió la JSP. Voy a seguir revisando mi ejemplo. Gracias, saludos.

  7. Que tal Oscar como está. Quería consultarle sobre el tema de los DAO. Ya hice mis ejemplos DAO con clases sencillas, y luego otro ejemplo usando una interface que contiene todas las operaciones para aplicar con el DAO. He visto unos ejemplos usando servlets, y que también usan la interface que contiene todas las operaciones para aplicar con el DAO. Sé que muchas cosas se pueden hacer con diferentes técnicas, pero mi pregunta es: si decido usar servlets con DAO es porque principalmente mi aplicación será distribuida o será accedida por varios usuarios por red o por internet?, o si decido usar clases normales y la interface es porque mi aplicación será local/standalone?, o esto no tiene nada que ver?, o yo podría para una aplicación distribuida y montada sobre internet usar mis clases normalitas sin servlets?. Gracias, saludos.

    1. Que pregunta más interesante, te comento que esto que preguntas es más común de lo que imaginas cuando un empieza con esto del JavaEE.
      Primero que nada te comento que utilizar un Servlet como DAO no es una buena práctica, debido a que la naturaleza del Servlet es la de servir páginas web o servir como puente entre el navegador y el servidor, el Servlet básicamente lo que hace es construir la página web de forma dinámica basándose en recursos externos como pueden ser los parámetros de entrada o consultas a base de datos, lo que tú puedes hacer es seguir utilizando tu servlet pero delegar la responsabilidad de acceso a datos a las clases que ya tienes, de esta forma separa la lógica de acceso a datos con la capa de presentación y controles.
      Por otra parte, hablar de aplicaciones distribuidas es un tema mucho más complejo y te puedo decir que está en la sima del aprendizaje Java, ya que son muchísimos factores lo que hay que tener en cuenta para que un aplicación sea distribuida y funcione correctamente, pero si estas interesado en crear componentes de BackEnd te recomiendo que le des una lectura a la especificación de EJB 3 la cual para mí es la mejor para componentes del lado del servidor.

      Saludos.

  8. Es decir, como dijo usted, para fines didacticos, y ahora como buena practica, puedo dejar mis clases normalitas e interface para que manejen el DAO, y el servlet (que no debe contener ni DAO ni nada que opere sobre la DB) solamente para hacer las páginas dinámicas o llamar a las JSP ?. Gracias por los comentarios. Voy a ver como me sale el ejemplo con servlet. Usted conoce sobre el framework ADF?, tendré que implementarlo en mis ejercicios, pero será más adelante. le recomiendo algo para pre Dummies, para leer mas adelante. Saludos.

    1. Es correcto, los servlet o jsp úsalos solo para construir tu página y utiliza tus clases para el acceso a datos, con respecto al framework de ADF la verdad yo he trabajado con la versión 11g y he tenido una muy mala experiencia, es un framework con muchos bugs y muy lento en tiempo de ejecución, aunque destaco que tiene componentes gráficos muy potentes. Desconozco si la versión de ADF 12c mejore muchas de estas cosas, pero en mi experiencia no lo recomiendo.

  9. Que pena Oscar le hago la útima consulta para aclarar algo. Es que acabo de ver este código de un servlet (aunque no es el que voy a estudiar) que está referenciado en un web.xml (se llama desde una JSP) y lo que veo es que el método del servlet está haciendo operaciones pero sobre el DTO, aun asi el servlet sigue separando la lógica con el acceso a la DB, pues los DTO son un nivel intermedio entre la BD y un componente, cierto?.

    protected void process(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
    Employee employee = new Employee();
    employee.setEmpNo(Integer.parseInt(request.getParameter(“empNo”)));
    employee.setEmpName(request.getParameter(“empName”));
    employee.setEmpSal(Long.parseLong(request.getParameter(“empSal”)));

    EmployeeService employeeService = ServiceFactory.getEmployeeService();
    RequestDispatcher dispatcher = null;
    int status = 0;

    referencia:
    http://learnasmaster.blogspot.com.co/2014/01/jsp-servlet-service-dao-example.html

    Muchas gracias. Me voy a trotar un rato. Saludos.

    1. Es correcto, los DTO o Data Transfer Object son un patrón de diseño que permite crear representaciones más simples de los objetos de negocio o Entidades, las cuales son utilizadas para transferir datos entre el backend y la interface gráfica.

  10. Que tal Oscar. Quería consultarle sobre el tema de autenticación de usuarios. He visto que una de las técnicas es dejarle ese trabajo al servidor de aplicaciones, en mi caso weblogic, y usar en la html/jsp una etiqueta action con “j_security_check”. Lo que he leído es que se deben crear primero los usuarios en la consola del servidor de weblogic para que la autenticación sea automática. Pero tengo una duda sobre su uso. Si yo tengo mi aplicación web y quiero tener en una tabla de mi DB los usuarios de mi aplicación web, concluiría yo que no debería usar la autenticación con “j_security_check”, lo digo porque si espero que mi aplicación sea usada por muchos usuarios no tendría entonces que ingresar a weblogic y ponerme a crear 20, 30 usuarios. O como funciona la técnica?, pues yo asumía que si quiero autenticar usuarios pues yo crearía una tabla en mi DB y con los datos del usuario desde html/jsp los consultaría en mi tabla de usuarios y ya. Esos usuarios que se crean en weblogic para ser autenticados son los que se logean para qué?, para hacer actividades administrativas o son usuarios externos que uno conoce previamente y por eso se deben crear previamente en weblogic. En mi caso de la vida real, las aplicaciones web de la entidad en la que trabajo requieren autenticación de usuarios, y la entidad en la que trabajo es de estadísticas a nivel nacional, de manera que realmente no me suena (“no me parece funcional”) tener que crear cientos de usuarios en weblogic, o será que quizás no se autentiquen con “j_security_check”?
    Saludos, gracias y buena noche.

    1. Hola Luis, tu pregunta es amplia y tratare de responderla de la forma más simple y concreta. Tú puedes decidir entre autenticar a tus usuarios directamente con el weblogic o crear una base de datos con tus usuarios. En realidad el resultado puede ser el mismo, sin embargo existen algunas ventajas/desventajas que ofrece cada uno. Si lo que quieres es una autenticación muy personalizada donde los privilegios se asignan a nivel recursos de la aplicación o tienes reglas muy complejas para determinar si un usuario tiene privilegios o no, entonces te recomiendo una autenticación por Base de datos, ya que desde aquí podrás implementar la lógica que gustes. Pero si este no es tu caso y los privilegios son por roles entonces te recomiendo utilizar un SQL Authentication Provider de weblogic, este te permitirá autenticarte mediante el weblogic pero a través de una base de datos custom. Lo que haces es configurar los query para que weblogic sepa cómo debe de logearce cada usuario, saber a qué rol pertenece, etc. Podrás encontrar más información en la siguiente liga: http://docs.oracle.com/cd/E14571_01/web.1111/e13707/atn.htm#SECMG190

      1. muchas gracias Oscar, voy a revisar el link recomendado que parece estar bien completo. Estoy ahora pensando en reinstalar el jdeveloper pues no se que pasó y no puedo cargar la consola de weblogic, no he hecho absolutamente ningún cambio, ni siquiera de windows, …pero bueno, …tendré que tener weblogic disponible y ver el tema….saludos, y gracias.

  11. Saludos Oscar. Le cuento que ya estoy involucrado con un proyecto web en mi trabajo, tenemos ADF, EJB, JSPX, poco a poco espero aprender bastante. Buena semana santa.

  12. Buen dia Carlos tengo creado un datasource (jdbc/as400DB)y su respectivo pool de conexiones (eis/DB/as400DB)en la consola del weblogic (10.3.6) apuntando a estos cree un dbadapter en jdeveloper y un respectivo proyecto en eclipse que desplegué en el servidor local. El hecho es que lo probe y funciono sin errores, pero actualmente trato de probarlo y me devuelve esta excepcion: La llamada ha dado como resultado un error: Fallo de llamada de servicio saliente de JCA con error de aplicación, excepción: com.bea.wli.sb.transports.jca.JCATransportException: oracle.tip.adapter.sa.api.JCABindingException: oracle.tip.adapter.sa.impl.fw.ext.org.collaxa.thirdparty.apache.wsif.WSIFException: servicebus:/WSDL/MiTigoApp/GetCorporateProfile/V1.0.0/UTILITY/JCA/GetCorporateProfile [ GetCorporateProfile_ptt::GetCorporateProfile(GetCorporateProfileInput_msg,GetCorporateProfileOutputCollection) ] – WSIF JCA Execute of operation ‘GetCorporateProfile’ failed due to: No se ha podido crear/acceder a la sesión de TopLink.

    Uso Oracle Fusion Midleware 11g weblogic 10.3.6 y jdevelopr 11.1.7

    1. Hola Naldy, por lo que comentas, el data sources ya te funcionaba y de la nada dejo de funcionar, es correcto?

      si eso es así, entonces no se me ocurre más que dos cosas, o le movieron algo al Datasource/interface o hay algún problema con la conexión a la base de datos, yo probaría intentar conectarme a la base de datos mediante un cliente externo, utilizando los datos que están registrados en el DataSource, si la conexión se lleva a cabo, realizaría un ping desde el servidor donde esta el weblogic a la base de datos, para ver si las estas alcanzando por la red. Si el problema no nada de esto, entonces te sugiero entrar al /em y /sbconsole para revisar el historial de cambios de las interfaces/proxys, a lo mejor se fue un cambio indebido.

      Esos son los primeras cosas que haría, si nada de esto es, entonces tendría que echarme un clavado a los logs para ver algo más de detalle del error. En el log puedes ver muchas más cosas que no verás en la consola de SOA Suite.

      saludos y suerte.

      1. Buenas tardes, Carlos efectivamente asi es de la nada dejo de funcionar. De acuerdo a lo que me aconsejaste verifique la conexión de manera externa y no se puede establecer aparentemente hay un problema con el ambiente de base de datos. De modo que hasta que se restablezca debo pensar que esa es la razón de la excepción.
        Saludos y gracias por la atencion

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *