Hola,
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:

** etc/cas/localconfig.properties

#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  

...
 <GlobalNamingResources>
...
<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"  />
...
 </GlobalNamingResources>
...


Paz y bien.







El jueves, 29 de diciembre de 2016, 9:40:55 (UTC+1), Adrian Chong escribió:
>
> Your data source bean loading is not really a JNDI lookup. The JNDI look 
> up should be like this (Here i assume you have done the JNDI DS setup in 
> app server):
>
> <jee:jndi-lookup id="dataSource"
>     jndi-name="jdbc/casDs"
>     cache="true"
>     resource-ref="true"
>     lookup-on-startup="false"
>     proxy-interface="javax.sql.DataSource"/>
>
> So we have defined a data source with name "dataSource". But, the jpa 
> ticket registry and service registry needs DS with names dataSourceTicket 
> and dataSourceService. So we define alias like this:
>
> <alias name="dataSource" alias="dataSourceTicket"/>
> <alias name="dataSource" alias="dataSourceService"/>
>
> So the default data source names of them can be overriden.
>
>
> On Monday, December 26, 2016 at 8:38:25 PM UTC+8, Gokhan Mansuroglu wrote:
>>
>> Hello,
>>
>> I am trying to configure jpa ticket registry. Firstly I added the 
>> following dependency :
>>
>>         <dependency>
>>             <groupId>org.apereo.cas</groupId>
>>             <artifactId>cas-server-support-jpa-ticket-registry
>> </artifactId>
>>             <version>${cas.version}</version>
>>         </dependency>
>>
>>
>>
>> Then I checked the documentation at 
>> https://apereo.github.io/cas/5.0.x/installation/JPA-Ticket-Registry.html. 
>> Since I don't want to use the pooled connection and prefer a predefined 
>> jndi datasource, the configuration parameters seem to be useless. I need to 
>> define the datasource. First I tried to declare an alias in 
>> deployerConfigContext.xml :
>>
>> <alias name="myDS" alias="dataSourceTicket" />
>>
>> But I get the following error at startup : 
>> org.springframework.beans.factory.BeanCreationException: Error creating 
>> bean with name 'ticketEntityManagerFactory' defined in class path 
>> resource [org/apereo/cas/config/JpaTicketRegistryConfiguration.class]: 
>> Bean instantiation via factory method failed; nested exception is org.
>> springframework.beans.BeanInstantiationException: Failed to instantiate [
>> org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: 
>> Factory method 'ticketEntityManagerFactory' threw exception; nested 
>> exception is java.lang.ClassCastException: org.springframework.jndi.
>> JndiObjectFactoryBean$$EnhancerBySpringCGLIB$$ceb3620f cannot be cast to 
>> javax.sql.DataSource
>>
>>
>>
>>
>> Then tried another solution :
>>
>> <bean id="dataSourceTicket" class="com.zaxxer.hikari.HikariDataSource" 
>> p:dataSource-ref="myDS"/>
>>
>> and get the following error :
>>
>> ***************************
>> APPLICATION FAILED TO START
>> ***************************
>>
>> Description:
>>
>> Parameter 0 of method init xxx.myDao required a single bean, but 2 were 
>> found:
>>     - dataSourceTicket: defined in class path resource [
>> deployerConfigContext.xml]
>>     - myDS: defined in class path resource [myApplicationContext.xml]
>>
>>
>> Action:
>>
>> Consider marking one of the beans as @Primary, updating the consumer to 
>> accept multiple beans, or using @Qualifier to identify the bean that 
>> should be consumed
>>
>>
>> What do you suggest me, how I can solve this issue ?
>>
>> Thanks.
>>
>

-- 
- CAS gitter chatroom: https://gitter.im/apereo/cas
- CAS mailing list guidelines: https://apereo.github.io/cas/Mailing-Lists.html
- CAS documentation website: https://apereo.github.io/cas
- CAS project website: https://github.com/apereo/cas
--- 
You received this message because you are subscribed to the Google Groups "CAS 
Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/a/apereo.org/d/msgid/cas-user/99fddc89-f683-49fa-9710-4c09a69518d4%40apereo.org.

Reply via email to