En esta oportunidad quiero compartir un error típico que aparece cuando estamos lo más bien trabajando con Apex en una instalación en Glassfish y cada cierto tiempo no podemos conectarnos y nos aparece el error 404.

Si buscamos en el log del Servidor veremos que nos sale los error como lo que te muestro abajo:


The pool named: apex is not correctly configured, error: IO Error: The Network Adapter could not establish the connection

The pool named: apex_pu is not correctly configured, error: IO Error: The Network Adapter could not establish the connection

The pool named: apex_al is not correctly configured, error: IO Error: The Network Adapter could not establish the connection

The pool named: apex_rt is not correctly configured, error: IO Error: The Network Adapter could not establish the connection

En este caso en particular, si no has cambiado nada en la configuración y de repente no te puedes conectar, y tienes una base de datos Oracle 11g para arriba, lo más probable que te suceda es que se ha expirado el tiempo de la password en la base de datos Oracle 11g.

Según la documentación de Oracle, nos dice:

«In the default profile in Oracle Database 11g, the parameter PASSWORD_LIFE_TIME is set to 180. If you are using Oracle Database 11g with Oracle Application Express, this causes the password for APEX_PUBLIC_USER to expire in 180 days. As a result, your Oracle Application Express instance will become unusable until you change the password.”

Básicamente tenemos el parámetro PASSWORD_LIFE_TIME que en el profile por default está configurado en 180 días, y es eso lo que causa que se expire la password del usuario APEX_PUBLIC_USER y no podamos ingresar a APEX.

Para ello lo que necesitaríamos hacer es cambiar el parámetro PASSWORD_LIFE_TIME a ilimitada y hacer un alter al usuario APEX_PUBLIC_USER y asignarlo a un nuevo profile.

En primer lugar vamos a ver cuáles son los límites del perfil por defecto (o el perfil de su APEX_PUBLIC_USER) son:

select resource_name, limit
from dba_profiles
where profile = ‘DEFAULT’;

El resultado dela consulta se vería algo similar a esto:

RESOURCE_NAME                    LIMIT
——————————– ——————————–
COMPOSITE_LIMIT                  UNLIMITED
SESSIONS_PER_USER                UNLIMITED
CPU_PER_SESSION                  UNLIMITED
CPU_PER_CALL                     UNLIMITED
LOGICAL_READS_PER_SESSION        UNLIMITED
LOGICAL_READS_PER_CALL           UNLIMITED
IDLE_TIME                        UNLIMITED
CONNECT_TIME                     UNLIMITED
PRIVATE_SGA                      UNLIMITED
FAILED_LOGIN_ATTEMPTS            10
PASSWORD_LIFE_TIME               180
PASSWORD_REUSE_TIME              UNLIMITED
PASSWORD_REUSE_MAX               UNLIMITED
PASSWORD_VERIFY_FUNCTION         NULL
PASSWORD_LOCK_TIME               1
PASSWORD_GRACE_TIME              7
16 rows selected.

No es buena práctica cambiar el profile por default por temas de seguridad, es por ello que lo que podemos hacer es crear un nuevo profile y luego asignarlo al usuario APEX_PUBLIC_USER.

create profile apex_public limit password_life_time unlimited;
alter user apex_public_user profile apex_public;

También tenemos que asignar el profile a las cuentas apex_listener, apex_rest_public_user y ords_public_user:

alter user apex_listener profile apex_public;
alter user apex_rest_public_user profile apex_public;
alter user ords_public_user profile apex_public;

De esta forma no vamos a tener el problema de que se expira el password cada 180 días y tendremos acceso a nuestro APEX sin problemas.
Si ejecutamos la consulta:
select resource_name, limit
from dba_profiles
where profile = ‘APEX_PUBLIC’;
Vemos que el parámetro está configurado como ilimitado:
RESOURCE_NAME                               LIMIT
————————   ————————————
COMPOSITE_LIMIT                  DEFAULT
SESSIONS_PER_USER                DEFAULT
CPU_PER_SESSION                 DEFAULT
CPU_PER_CALL                     DEFAULT
LOGICAL_READS_PER_SESSION        DEFAULT
LOGICAL_READS_PER_CALL           DEFAULT
IDLE_TIME                        DEFAULT
CONNECT_TIME                     DEFAULT
PRIVATE_SGA                      DEFAULT
FAILED_LOGIN_ATTEMPTS            DEFAULT
PASSWORD_LIFE_TIME               UNLIMITED
PASSWORD_REUSE_TIME              DEFAULT
PASSWORD_REUSE_MAX               DEFAULT
PASSWORD_VERIFY_FUNCTION         DEFAULT
PASSWORD_LOCK_TIME               DEFAULT
PASSWORD_GRACE_TIME              DEFAULT
16 rows selected.