[JAVA] Correction pour empêcher l'augmentation du numéro de connexion à la base de données avec le fournisseur d'authentification personnalisé de l'exemple Cognos SDK

Aperçu

Dans le SDK de Cognos Analytics, il existe un exemple appelé Fournisseur d'authentification personnalisé qui effectue l'authentification Cognos dans un programme Java. * Voir ci-dessous pour l'authentification personnalisée. ** Procédure de configuration de l'authentification personnalisée Cognos ** https://qiita.com/shinyama/items/1f9c7842a3966233a5d7

Dans cet exemple de programme, j'ai récemment rencontré des problèmes avec des connexions sans fin à la base de données source d'authentification, qui consomme beaucoup de mémoire Db2.

Étant donné que ce programme est fourni à titre d'exemple, il est fourni en supposant qu'il est à vos risques et périls de l'utiliser dans l'environnement de production, mais il existe de nombreux projets qui sont réellement utilisés et je suis préoccupé par le même problème. Je pense qu'il y a beaucoup de projets, donc je les posterai.

Faire face

Dans queryImpl () du programme QueryUtil.java, il est nécessaire d'ajouter la partie "<-add" suivante et de fermer l'instruction et le resultSet. En ce qui concerne la connexion, si vous la fermez explicitement dans le programme, une erreur d'authentification se produira, alors ne la fermez pas explicitement. Cependant, les connexions qui ne sont plus nécessaires seront libérées au moment de WebSphere Liberty GC intégré à Cognos.

		try (final PreparedStatement statement = connection.prepareStatement(sql))
		{
			for (int i = 0; i < parameters.length; ++i)
				statement.setObject(i + 1, parameters[i]);

			try (final ResultSet resultSet = statement.executeQuery())
			{
				if (includeMetadata)
					data.add(QueryUtil.getMetaDataRow(resultSet));

		while (resultSet.next()) 
            		data.add(QueryUtil.getDataRow(resultSet)); 
 
 		resultSet.close();   <-ajouter à
                }
 		statement.close();   <-ajouter à
        } 
        catch (final SQLException ex) 
        { 
            throw new UnrecoverableException("SQL Exception", "An exception was caught while querying the authentication database."); 
        } 


<PostScript du 29/06/2018> En plus de la modification du programme SDK ci-dessus, j'ai constaté que la modification de la politique GC de WebSphere Liberty intégrée à Cognos libère la session de base de données avant qu'elle ne s'accumule en grand nombre par un GC plus efficace, je l'ai donc ajoutée. Mettre.

Pour Linux, comment changer le GC se trouve dans le fichier suivant. /opt/ibm/cognos/analytics/bin64/bootstrap_wlp_linuxi38664.xml

Modifiez le gencon à ce stade et redémarrez Cognos. <param condName="${java_vendor}" condValue="IBM">-Xgcpolicy:gencon</param>

Dans ce cas, je l'ai changé en «équilibré». https://www.ibm.com/developerworks/jp/websphere/library/was/was8_gc/2.html

Si vous souhaitez utiliser les exemples JDBC restaurables et JDBC avec une authentification personnalisée, n'oubliez pas cet article.

Recommended Posts

Correction pour empêcher l'augmentation du numéro de connexion à la base de données avec le fournisseur d'authentification personnalisé de l'exemple Cognos SDK
Une description de l'exemple JDBC qui sera utile lors du développement d'un fournisseur d'authentification personnalisé avec le SDK Cognos
Augmenter dynamiquement le nombre d'éléments dans un tableau bidimensionnel Java (tableau multidimensionnel)
Exemple de code pour attribuer une valeur dans le fichier de propriétés à un champ du type attendu
Considérer l'adoption du langage Java à l'ère Reiwa ~ Comment choisir un SDK sûr
Un programme qui compte le nombre de mots dans une liste
Trouvez le nombre de jours dans un mois avec Kotlin
Authentification 802.1X au réseau du paramètre de liaison dans CentOS7
[Swift] Lorsque vous voulez savoir si le nombre de caractères dans String correspond à un certain nombre ...
Fixez le nom du fichier de guerre à celui défini dans Maven
J'ai essayé de créer un exemple de programme en utilisant le problème du spécialiste des bases de données dans la conception pilotée par domaine
Débogage à distance du SDK Cognos
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Comment modifier le nombre maximum et maximum de données POST dans Spark
Comment trouver le nombre total de pages lors de la pagination en Java
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
Comment changer la valeur d'une variable à un point d'arrêt dans intelliJ
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java