la solución anterior no me ha funcionado por la configuración de mi CAS 5, por lo tanto he implementado unos cambios que funcionan que paso a detallar:
#Para autenticar el usuario:
cas.authn.jdbc.query[0].jndiName=jdbc/misusuarios
#cas.authn.jdbc.query[0].user=ANULADO
#cas.authn.jdbc.query[0].password=ANULADO
#Para los tickets:
cas.ticket.registry.jpa.jndiName=jdbc/mistickets
#cas.ticket.registry.jpa.user=ANULADO
#cas.ticket.registry.jpa.password=ANULADO
** src\main\java\es\pruebas\util\JNDIConnectionManager.java (Crear nueva clase)
package es.xxxx.xxx;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Clase para gestionar para permitir la conexión con JNDI, de forma que indicando
* la conexión en el server.xml del TOMCAT puedan ser usadas por la aplicación de CAS.
*/
public class JNDIConnectionManager {
private static final Logger LOGGER = LoggerFactory.getLogger(JNDIConnectionManager.class);
public static DataSource getDatasource(String jndiName){
DataSource dataSource = null;
Context initContext;
try {
initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
dataSource = (DataSource)envContext.lookup(jndiName);
LOGGER.info("Obtenida conexión JNDI " + jndiName);
} catch (Exception ex) {
LOGGER.error("No se pudo obtener conexión JNDI " + jndiName, ex);
}
return dataSource;
}
}
** src\main\java\org\apereo\cas\configuration\model\support\jpa\AbstractJpaProperties.java (Traerse el código fuente de CAS 5)
Modificar clase para incluir la propiedad jndiName:
public abstract class AbstractJpaProperties {
....
private String jndiName = null;
..
/**
* @return the jndiName
*/
public String getJndiName() {
return jndiName;
}
/**
* @param jndiName the jndiName to set
*/
public void setJndiName(String jndiName) {
this.jndiName = jndiName;
}
}
** src\main\java\org\apereo\cas\configuration\support\Beans.java (Traerse el código fuente de CAS 5)
Volver a implementar el método newHickariDataSource:
public static HikariDataSource newHickariDataSource(final AbstractJpaProperties jpaProperties) {
try {
final HikariDataSource bean = new HikariDataSource();
// Si se ha definido en el fichero de propiedades una conexión JNDI se usará ésta,
// de lo contrario, se realizará el sistema antiguo de conexión.
String jndiName = jpaProperties.getJndiName();
if (jndiName != null){
//NUEVO SISTEMA CON JNDI
LOGGER.info("newHickariDataSource para recurso JNDI " + jndiName);
DataSource dataSource = JNDIConnectionManager.getDatasource(jndiName);
bean.setDataSource(dataSource);
}else{
//ANTIGUO SISTEMA CON USUARIO/CLAVE DESDE FICHERO DE PROPIEDADES:
LOGGER.info("newHickariDataSource para usuario " + jpaProperties.getUser());
bean.setDriverClassName(jpaProperties.getDriverClass());
bean.setJdbcUrl(jpaProperties.getUrl());
bean.setUsername(jpaProperties.getUser());
bean.setPassword(jpaProperties.getPassword());
bean.setMaximumPoolSize(jpaProperties.getPool().getMaxSize());
bean.setMinimumIdle(jpaProperties.getPool().getMaxIdleTime());
bean.setIdleTimeout(jpaProperties.getIdleTimeout());
bean.setLeakDetectionThreshold(jpaProperties.getLeakThreshold());
bean.setInitializationFailFast(jpaProperties.isFailFast());
bean.setIsolateInternalQueries(jpaProperties.isIsolateInternalQueries());
bean.setConnectionTestQuery(jpaProperties.getHealthQuery());
bean.setAllowPoolSuspension(jpaProperties.getPool().isSuspension());
bean.setAutoCommit(jpaProperties.isAutocommit());
bean.setLoginTimeout(jpaProperties.getPool().getMaxWait());
bean.setValidationTimeout(jpaProperties.getPool().getMaxWait());
}
return bean;
} catch (final Exception e) {
throw new IllegalArgumentException(e);
}
}
** src\main\webapp\META-INF\context.xml
<?xml version='1.0' encoding='utf-8'?>
<Context reloadable="true">
<ResourceLink name="jdbc/misusuarios" global="jdbc/misusuarios"
type="javax.sql.DataSource" />
<ResourceLink name="jdbc/mistickets" global="jdbc/mistickets"
type="javax.sql.DataSource" />
</Context>
** [TOMCAT] server.xml
...
...
<Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" maxTotal="20" maxIdle="1" maxWaitMillis="-1"
removeAbandonedOnBorrow="true" removeAbandonedOnMaintenance="true" removeAbandonedTimeout="60" type="javax.sql.DataSource"
name="jdbc/mistickets" username="tickets" password="bbb"
url="jdbc:oracle:thin:@bddevapli.carm.es:1521:devapli" />
<Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" maxTotal="20" maxIdle="1" maxWaitMillis="-1"
removeAbandonedOnBorrow="true" removeAbandonedOnMaintenance="true" removeAbandonedTimeout="60" type="javax.sql.DataSource"
name="jdbc/misusuarios" username="usuarios" password="ddd"
url="jdbc:oracle:thin:@bddevapli.carm.es:1521:devapli" />
...
...
Paz y bien.