Talend Identity Management Service, basé sur Apache Syncope, est un système qui permet de gérer les identités numériques dans des environnements d'entreprise.
Le serveur d'applications recommandé pour l'application Web Syncope est Apache Tomcat 8, cependant Apache Tomcat 7 est également supporté et nécessite de suivre les mêmes procédures. Dans les sections suivantes, <TomcatPath> désigne le chemin d'accès au répertoire d'installation de Tomcat.
Configurer l'environnement
Créez le fichier suivant : <TomcatPath>/bin/setenv.sh, modifiez-le et ajoutez ce qui suit, dans une seule ligne :
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server \ -Xms1536m -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m \ -XX:MaxMetaspaceSize=256m -XX:+DisableExplicitGC"
Mettre à jour le fichier context.xml
Ouvrez le fichier suivant : <TomcatPath>/conf/context.xml pour le modifier.
Dé-commentez la ligne :
<Manager pathname="" />
En environment de production, il est fortement recommandé de définir une source de données comme stockage interne, à utiliser avec Talend Identity Management Service.
<Resource name="jdbc/syncopeDataSource" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" testWhileIdle="true" testOnBorrow="true" testOnReturn="true" validationQuery="SELECT 1" validationInterval="30000" maxActive="100" minIdle="2" maxWait="10000" initialSize="2" removeAbandonedTimeout="20000" removeAbandoned="true" logAbandoned="true" suspectTimeout="20000" timeBetweenEvictionRunsMillis="5000" minEvictableIdleTimeMillis="5000" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState; org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" username="syncope" password="syncope" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/syncope?characterEncoding=UTF-8"/>
L'exemple ci-dessus s'applique pour MySQL. Veillez à adapter les paramètres de connexion en fonction de vos besoins.
Copiez les fichiers suivants depuis add-ons/tidm:
syncope.war
syncope-console.war
vers <TomcatPath>/webapps
Démarrez le serveur Tomcat.
Après avoir démarré le serveur, si Talend Administration Center n'est pas sur le port 8080 par défaut, arrêtez-le et modifiez le port dans le fichier <TomcatPath>/webapps/syncope-console/WEB- INF/classes/configuration.properties.
Si vous avez défini une source de données à utiliser avec Talend Identity Management Service en environnement de production, modifiez le fichier
<TomcatPath>/webapps/syncope-console/WEB-INF/web.xml
, et dé-commentez la sectionresource-ref
.Redémarrez le serveur Tomcat.
Après avoir déployé Talend Identity Management Service dans Tomcat, pour pouvoir le configurer en cluster, arrêtez Tomcat.
Modifiez le fichier
<TomcatPath>/webapps/syncope/WEB-INF/classes/persistence.properties
, et remplacez la configuratin existante par :jpa.driverClassName=com.mysql.jdbc.Driver jpa.url=jdbc:mysql://localhost:3306/syncope?characterEncoding=UTF-8 jpa.username=syncope_user jpa.password=syncope_pass jpa.dialect=org.apache.openjpa.jdbc.sql.MySQLDictionary quartz.jobstore=org.quartz.impl.jdbcjobstore.StdJDBCDelegate quartz.sql=tables_mysql.sql logback.sql=mysql.sql
Lorsque vous déployez plusieurs instances de Talend Identity Management Service, reposant sur une base de données unique ou sur un cluster de bases de données, il est d'une importance capitale que les instances d'OpenJPA contenues soient correctement configurées pour la notification d'évènements distants. Cette configuration permet, en effet, de maintenir synchronisé les données cache d'OpenJPA, quand celui-ci est déployé dans plusieurs JVMs, et ainsi, cela renforce l'uniformité des données parmi toutes les instances.
La configuration par défaut, adaptée pour l'installation d'une JVM unique, est définie dans le fichier
<TomcatPath>/webapps/syncope/WEB-INF/classes/persistenceContextEMFactory.xml
:<entrykey="openjpa.RemoteCommitProvider"value="sjvm"/>
Pour l'utilisation de multiples instances, plus d'options sont disponibles, notamment TCP ou JMS. Pour plus d'informations, consultez http://openjpa.apache.org/builds/2.3.0/apache-openjpa/docs/ref_guide_event.html (en anglais).
Pour utliser Talend Identity Management Service en cluster, dans le fichier
<TomcatPath>/webapps/syncope/WEB-INF/classes/persistenceContextEMFactory.xml
, changez la valeursjvm
par défaut, par toutes les adresses IP de toutes les instances de Talend Identity Management Service, afin qu'elles puissent communiquer entre elles :<entrykey="openjpa.RemoteCommitProvider"value="tcp(Addresses=10.0.1.10;10.0.1.11)"/>
Redémarrez le serveur Tomcat.
Préparer Postgres
Utilisez pgAdmin III pour naviguer parmi les objets, et sélectionnez le noeud PostgresSQL 9.2 (localhost:5432)/Login-Roles.
Créez un nouveau role, appelez-le
syncope
, avec pour mot de passesyncope
. Si vous utilisez d'autes role et mot de passe, adaptez la configuration ci-dessous.Sélectionnez PostgresSQL 9.2 (localhost:5432)/Databases, et créez une nouvelle base de données et appelez-la
syncope
aussi.Assignez-lui le syncope.
Déployer Talend Identity Management Service
Si vous n'avez pas déjà déployé les fichiers suivants :
syncope.war
etsyncope-console.war
dans le dossier <TomcatPath>/webapps, faites-le maintenant.Déployez aussi le Driver JDBC de Postgres dans Tomcat. Le driver peut être téléchargé à l'adresse suivantes : http://jdbc.postgresql.org/download.html.
Copiez le fichier JAR du driver que vous venez de télécharger dans <TomcatPath>/lib.
Configurer Tomcat
Pour configurer Syncope utilisant Mysql en backend dans Tomcat, consultez le tutoriel suivant : http://coheigea.blogspot.de/2013/07/apache-syncope-tutorial-part-i_26.html (en anglais), adapté pour l'usage de Talend Identity Management Service avec Postgres.
Changez le contenu du fichier <TomcatPath>/webapps/syncope/WEB-INF/classes/persistence.properties comme suit :
jpa.driverClassName=org.postgresql.Driver jpa.url=jdbc:postgresql://localhost:5432/syncope jpa.username=syncope jpa.password=syncope jpa.dialect=org.apache.openjpa.jdbc.sql.PostgresDictionary quartz.jobstore=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate quartz.sql=tables_postgres.sql logback.sql=postgresql.sql
Ajoutez une source de données pour le stockage interne dans le fichier conf/context.xml de Tomcat. Comme Syncope ne trouvera pas la source de données appelée jdbc/syncopeDataSource, il va tenter de se connecter au stockage interne en initiant une nouvelle connexion à chaque requête, ce qui va entrainer des pertes de performance. Pour éviter ces pertes, ajoutez le code suivant au fichier <TomcatPath>/conf/context.xml:
<Resource name="jdbc/syncopeDataSource" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" testWhileIdle="true" testOnBorrow="true" testOnReturn="true" validationQuery="SELECT 1" validationInterval="30000" maxActive="50" minIdle="2" maxWait="10000" initialSize="2" removeAbandonedTimeout="20000" removeAbandoned="true" logAbandoned="true" suspectTimeout="20000" timeBetweenEvictionRunsMillis="5000" minEvictableIdleTimeMillis="5000" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState; org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" username="syncope" password="syncope" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/syncope"/>
Déployer Talend Identity Management Service
Si vous n'avez pas déjà déployé les fichiers suivants :
syncope.war
etsyncope-console.war
dans le dossier <TomcatPath>/webapps, faites-le maintenant.Copiez le fichier ojdbcX.jar de votre installation Oracle dans <TomcatPath>/lib.
Configurer Tomcat
Changez le contenu du fichier <TomcatPath>/webapps/syncope/WEB-INF/classes/persistence.properties comme suit :
jpa.driverClassName=oracle.jdbc.OracleDriver jpa.url=jdbc:oracle:thin:@<host>:<port>:xe jpa.username=<user> jpa.password=<password> jpa.dialect=org.apache.openjpa.jdbc.sql.OracleDictionary jpa.pool.validationQuery=SELECT 1 FROM DUAL #note: other connection pool settings can also be configured here, see persistenceContext.xml quartz.jobstore=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate quartz.sql=tables_oracle.sql audit.sql=audit_oracle.sql database.schema=<schema_name>
Remplacez les valeurs entre chevrons afin qu'elles correspondent à la configuration de votre système.
Changez le contenu du fichier <TomcatPath>/webapps/syncope/WEB-INF/classes/persistenceContextEMFactory.xml comme suit :
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceXmlLocation" value="classpath*:META-INF/spring-persistence.xml"/> <property name="persistenceUnitName" value="syncopePersistenceUnit"/> <property name="dataSource" ref="dataSource"/> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter"> <property name="showSql" value="false"/> <property name="generateDdl" value="true"/> <property name="databasePlatform" value="${jpa.dialect}"/> </bean> </property> <property name="jpaPropertyMap"> <map> <!--<entry key="openjpa.Log" value="SQL=TRACE"/> <entry key="openjpa.ConnectionFactoryProperties" value="PrintParameters=true, PrettyPrint=true, PrettyPrintLineLength=80"/>--> <entry key="openjpa.jdbc.Schema" value="<schema_name>"/> <entry key="openjpa.NontransactionalWrite" value="false"/> <entry key="openjpa.AutoDetach" value="close, commit, nontx-read, rollback"/> <entry key="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/> <entry key="openjpa.jdbc.MappingDefaults" value="ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict"/> <entry key="openjpa.DataCache" value="true"/> <entry key="openjpa.QueryCache" value="true"/> <entry key="openjpa.RemoteCommitProvider" value="sjvm"/> </map> </property> </bean> </beans>
Dans la ligne
<entry key="openjpa.jdbc.Schema" value="<schema_name>"/>
, remplacez <schema_name> par le nom de votre schéma.