JPA: modelo de persistencia
Aug 16, 10 by Juan Lebrijo about JDeveloper, blog, Oracle, Java
En este artículo crearemos un modelo de persistencia para nuestra pequeña aplicación de gestión de empleados. Basado en un anterior post donde creamos una aplicación básica de JDeveloper. Sobre el proyecto en el menú contextual, New > EJB > Entities From Tables. Vamos a utilizar la tecnología EJB 3.0, anotando los beans de entidad como JPA 2.0:
create_persistence_model.png 114 KB
Seleccionamos las tablas Departaments y Employees. Como vimos en un artículo anterior, se puede obtener el diagrama de una base de datos ya hecha. Yo me lo he creado en el paquete lebrijo.diagrams:
er_diagram.png 157 KB
Podemos crear un New > EJB Diagram, y arrastrando las entidades anteriormente creada, tendremos el dibujo entero:
ejb_diagram.png 119 KB
En los dos beans refactorizaré el atributo employees por manager, ya que define más claramente la relación.
refactor_manager.png 79.9 KB
Esto se actualiza automáticamente en el diagrama de EJB (en teoria, en realidad hay que volver a arrastrar las entidades). Como último ejercicio, podemos crear la consulta de encontrar por nombre, ampliando la anotación de consultas de la entidad Employees:
@Entity
@NamedQueries({
@NamedQuery(name = "Employees.findAll", query = "select o from Employees o")
,
@NamedQuery(name = "Employees.findByName", query = "select o from Employees o where o.firstName like :p_name")
})
Weblogic securizado con el proveedor SQLAuthenticator
Aug 14, 10 by Juan Lebrijo about weblogic, Database, blog, Oracle, security
En un artículo anterior vimos como asegurar un Web Service con autenticación básica (esto podría servir para cualquier página en nuestra aplicación). Esto lo hacíamos creando usuarios en el DefaultAuthenticator de Weblogic (user). Hoy vamos a crear un SQLAuthenticator en Weblogic, de forma que tome esos usuarios y grupos de la base de datos. Lo primero que vamos a hacer es crear un Data Source, donde se alojará nuestra base de datos de usuarios, en la consola de Weblogic. Vamos a base_domain > Services > JDBC Data Soources > New, y configuramos con los siguientes datos:
  1. Nombre: school
  2. Nombre JNDI: school
  3. Nombre DB: xe
  4. Host: 192.168.0.7
  5. Port: 1521
  6. User/pass: school/school
  7. Seleccionar los Servers a los que aplicar este DataSource: AdminServer.
Probamos la conexión como vemos en la figura:
create_data_source.thumbnail.png 11.6 KB
Ahora hay que crear en la BBDD las tablas que van a alojar grupos/usuarios y los van a relacionar. Para ello se ha creado el script sql:
CREATE TABLE USERS (
    U_NAME VARCHAR(200) NOT NULL,
    U_PASSWORD VARCHAR(50) NOT NULL,
    U_DESCRIPTION VARCHAR(1000));

ALTER TABLE USERS
   ADD CONSTRAINT PK_USERS
   PRIMARY KEY (U_NAME);

CREATE TABLE GROUPS (
    G_NAME VARCHAR(200) NOT NULL,
    G_DESCRIPTION VARCHAR(1000) NULL);

ALTER TABLE GROUPS
   ADD CONSTRAINT PK_GROUPS
   PRIMARY KEY (G_NAME);

CREATE TABLE GROUPMEMBERS (
    G_NAME VARCHAR(200) NOT NULL,
    G_MEMBER VARCHAR(200) NOT NULL);

ALTER TABLE GROUPMEMBERS
   ADD CONSTRAINT PK_GROUPMEMS
   PRIMARY KEY (
      G_NAME,
      G_MEMBER
   );

ALTER TABLE GROUPMEMBERS
   ADD CONSTRAINT FK1_GROUPMEMBERS
   FOREIGN KEY ( G_NAME )
   REFERENCES GROUPS (G_NAME)
   ON DELETE CASCADE;
Podemos ejecutarlo con la perspectiva de base de datos de Eclipse, ejecutando la opción "Execute All" del menú contextual del editor SQL:
eclipse_execute_script.thumbnail.png 11.3 KB
Luego en la consola de Weblogic vamos a base_domain > Security Realms > myrealm > Providers > New. Donde configuraremos el proveedor de autenticación SQL:
  1. Nombre y tipo: SQLAuthenticator
Luego, en sus propiedades, en la pestaña Provider Specific, configuramos lo siguiente:
  1. Data Source Name: school
  2. Group MemberShip Searching: limitado a 10 para evitar situaciones en las que grupo A pertenece al B y viceversa.
  3. Plain Text Passwords Enabled: puede estar bien para hacer pruebas con contraseñas sin cifrar, pero no es recomendable en producción.
weblogic_sqlauthenticator.thumbnail.png 12 KB
OJO!!: hay que tener en cuenta que la secuencia de autenticación en el servidor sigue requiriendo la autenticación en el DefaultAuthenticator. En base_domain > Security Realms > myrealm > Providers > Providers > DefaultAuthenticator, poner:
  1. Control Flag: SUFFICIENT. Para que no requiera obligatoriamente la autenticación de este provider (si este paso lo damos mal, podemos suprimir el acceso a consola del servidor).
Habrá que reiniciar (mejor, stop y luego start, con el control de eclipse) el servidor para que los cambios tengan efecto. Ahora podéis ejecutar el ejemplo Web Service con autenticación básica, con un usuario que hayáis creado con el proveedor SQL.
Securing Weblogic with SQLAuthenticator provider
Aug 14, 10 by Juan Lebrijo about weblogic, Database, blog, Oracle, security
In a previous article we saw how to secure a Web Service with basic authentication (this could be used for every page in our application). We did it creating users with Weblogic Default Authenticator. Today we will create an SQLAuthenticator in Weblogic, then the server will take users and groups from the data base. First of all we will create a Data Source, where will be our users data base, in Weblogic console. Go to base_domain > Services > JDBC Data Soources > New, and configure the following data:
  1. Name: school
  2. JNDI name: school
  3. DB name: xe
  4. Host: 192.168.0.7
  5. Port: 1521
  6. User/pass: school/school
  7. Select the servers where we will apply this DataSource: AdminServer.
Test the connection as we see in the picture:
create_data_source.thumbnail.png 11.6 KB
Now we have to create in the data base the tables where we store users/groups and the relations. For this we have the following SQL script:
CREATE TABLE USERS (
    U_NAME VARCHAR(200) NOT NULL,
    U_PASSWORD VARCHAR(50) NOT NULL,
    U_DESCRIPTION VARCHAR(1000));

ALTER TABLE USERS
   ADD CONSTRAINT PK_USERS
   PRIMARY KEY (U_NAME);

CREATE TABLE GROUPS (
    G_NAME VARCHAR(200) NOT NULL,
    G_DESCRIPTION VARCHAR(1000) NULL);

ALTER TABLE GROUPS
   ADD CONSTRAINT PK_GROUPS
   PRIMARY KEY (G_NAME);

CREATE TABLE GROUPMEMBERS (
    G_NAME VARCHAR(200) NOT NULL,
    G_MEMBER VARCHAR(200) NOT NULL);

ALTER TABLE GROUPMEMBERS
   ADD CONSTRAINT PK_GROUPMEMS
   PRIMARY KEY (
      G_NAME,
      G_MEMBER
   );

ALTER TABLE GROUPMEMBERS
   ADD CONSTRAINT FK1_GROUPMEMBERS
   FOREIGN KEY ( G_NAME )
   REFERENCES GROUPS (G_NAME)
   ON DELETE CASCADE;
We can execute it in the Data Base Eclipse perspective, executing the contextual menu option "Execute All" in SQL Editor:
eclipse_execute_script.thumbnail.png 11.3 KB
After in Weblogio console go to base_domain > Security Realms > myrealm > Providers > New. Where we will configure the SQL Autentication provider:
  1. Name and type: SQLAuthenticator
Then, in its properties, in Provider Specific tab, we will configure as follows:
  1. Data Source Name: school
  2. Group MemberShip Searching: limited to 10 to avoid the recursive situations like A owns B, and B owns A.
  3. Plain Text Passwords Enabled: we can test this configuration with no encripted passwords, but not recomend it in production.
weblogic_sqlauthenticator.thumbnail.png 12 KB
WARN!!: we have to take care that the authentication sequence in the server requires the DefaultAuthenticator permission. In base_domain > Security Realms > myrealm > Providers > Providers > DefaultAuthenticator, change to:
  1. Control Flag: SUFFICIENT. Then will not be a must the Default authentication (if we mistake this step, we could loose the consola access).
Here we have to reboot (better stop/start in eclipse control) the server to the changes take effect. Now you can execute the example Web Service basic authentication, with a user created with SQL provider.