Une approche personnalisée de l'utilisation de plusieurs sources de données Corticon
Grâce à l'extensibilité du connecteur de données avancé Corticon, vous pouvez vous connecter dynamiquement à plusieurs bases de données, même dans des situations inhabituelles. Lisez la suite pour apprendre comment.
Aujourd'hui, les décisions commerciales nécessitent des données stockées dans plusieurs bases de données. Avec Connecteur de données avancées de Progress Corticon (ADC), Decision Services peut récupérer de manière dynamique des données à partir de bases de données distinctes. Dans cet article, nous étudierons un cas particulier où les données d'une décision métier sont stockées dans deux bases de données avec une relation implicite (jointure implicite) couvrant les deux sources de données distinctes, récupèrent des ensembles de données distincts et les intègrent dans un flux de règles. ] Ceci est un excellent exemple de la façon de personnaliser une légende de service Corticon pour implémenter des fonctionnalités autres que celles d'une configuration à bases de données multiples ADC. Cette jointure de base de données croisée peut être accomplie en ajoutant du code personnalisé.
Remarque: Cet exemple suppose une connaissance pratique de Java, API Corticon Corticon Studio ADC, bases de données relationnelles et Java Database Connectivity (JDBC).
Pour ce scénario, la décision métier évaluera une proposition de compte d'investissement pour acheter des actifs spécifiques. Le service de décision recevra en entrée le compte de placement et plusieurs actifs possibles à acheter.
Il accédera aux bases de données internes et externes pour obtenir des informations supplémentaires sur le compte et les actifs. Ensuite, il déterminera quels actifs le compte doit acheter. Les données requises pour la décision sont extraites de deux bases de données: une base de données interne contient des informations de compte sécurisées privées et une base de données externe contient des informations sur les actifs publics.
Étape 1: Configuration du vocabulaire
, AssetType et les entités de compte. Les attributs d'entité Compte correspondent aux colonnes de la table Compte dans la base de données interne. Un compte peut être associé à de nombreux AssetTypes qui contiendront les types d'actifs que le compte est autorisé à acheter. Les attributs Asset et AssetType correspondent aux colonnes des tables Asset et AssetType dans la base de données externe. Un AssetType peut être associé à de nombreuses entités.
Figure 1: L'arbre de vocabulaire dans Corticon Studio
Étape 2: définition des sources de données
Commencez avec la base de données interne. Ajoutez une source de données ADC au vocabulaire et entrez un nom, tel que "internalDB". Entrez les informations de connexion à la base de données. Importez les métadonnées de la base de données ou entrez-les manuellement si nécessaire.
Figure 2: Configurer la source de données ADC pour la base de données interne
Faites la même chose pour la base de données externe: ajoutez une autre source de données ADC au vocabulaire et entrez un nom différent, par exemple "externalDB". la base de données ou entrez les mappages manuellement si nécessaire.
] Figure 3: Configurer une autre source de données ADC pour la base de données externe
En savoir plus sur la configuration des ADC dans le Corticon Server: Guide d'intégration de données . un appel de service
Le service callout (SCO) doit effectuer 10 opérations:
- la base de données interne
- À l'aide des données d'entrée, interrogez le compte et créez une entité et des attributs avec les données récupérées
- Collectez les clés AssetType associées au compte
- Récupérez les entités de DataManager
- 19659021] Query Asset table et enrichit les entités Asset
- Collecte des clés AssetType associées aux entités Asset
- Query AssetType table et crée des entités AssetType
- Associer des actifs à AssetType
- Associer des comptes à des entités AssetType
]1. Se connecter à la base de données interne
IDatasource lDatasource = aDataMgr.getDatasourceManager (). GetDatasource (
"internalDB"
);
String lstrDatabaseId = lDatasource. getDatasourceDriverId ();
Chaîne lstrDatabaseUrl = lDatasource.getDatasourceConnectionURL ();
Chaîne lstrUsername = lDatasource.getDatasourceUserName ();
Chaîne lstrPassword = lDatasource.getDatasourcePassword ();
Connection lConnection = aDataMgr.getDatabaseDriverManager ()
.getConnection (
"internalDB"
lstrDatabaseId, lstrDatabaseUrl, lstrUsername, lstrPassword);
2. A l'aide des données d'entrée, interrogez Account et créez une entité et des attributs avec les données extraites.
Set
"Proposal"
)
ICcDataObject proposal = (ICcDataObject) proposalSet.iterator (). Next ();
/ / create Entité de compte
Compte ICcDataObject = aDataMgr.createEntity (
"Compte"
);
ArrayList
nouveau
ArrayList
lStatement = lConnection.createStatement ();
Chaîne lstrQuery =
"select id, name, cash from Account où id ="
+
proposal.getAttributeValue (
"accountId"
);
ResultSet lResultSet = lStatement.executeQuery (lstrQuery);
lResultSet.next ();
// définir des attributs de compte avec les résultats de la requête
Long accountId = lResultSet.getLong (
"id"
);
account.setAttributeValue (
"id"
accountId);
[19659003] account.setAttributeValue (
"name"
lResultSet.getString (
"name"
));
account.setAttributeValue (
"cash"
lResultSet.getBigDecimal (
"cash"
))
3. Collectez les clés AssetType associées à Compte
lStatement = lConnection.createStatement ();
lResultSet = lStatement.executeQuery (
]
"select assetTypeId from AccountAssetType où accountId ="
+ accountId);
// clés collectées dans accountAssetTypeIds
tandis que
(lResultSet.next ())
{
]
accountAssetTypeIds.add (lResultSet.getLong (
"assetTypeId"
));
}
[19659031] 4. Obtention des entités de DataManager
Set
"Asset"
);
// map asset à l'entité Asset pour la recherche facile
Carte
nouveau
HashMap
pour
(Actif ICcDataObject: tradeAssets)
{
assetIdMap.put ((long) asset.getAttributeValue (
"id"
), actif);
}
5 . Se connecter à la base de données externe
IDatasource lDatasource = aDataMgr.getDatasourceManager (). GetDatasource (
"externalDB"
);
String lstrDatabaseId = lDatasource. getDatasourceDriverId ();
Chaîne lstrDatabaseUrl = lDatasource.getDatasourceConnectionURL ();
Chaîne lstrUsername = lDatasource.getDatasourceUserName ( );
Chaîne lstrPassword = lDatasource.getDatasourcePassword ();
Connexion lConnection = aDataMgr.getDatabaseDriverManager (). getConnection (
"externalDB"
lstrDatabaseId, lstrDatabaseUrl, lstrUsername, lstrPassword);
6. Query Asset table et enrichit les entités de ressources (enrichissement de données)
Map
new
HashMap
String lstrQuery =
"select id, name, price, assetTypeId depuis Asset où id dans"
+ assetIdMap.keySet ();
lstrQuery = lstrQuery. replace (
'['
'('
);
lstrQuery = lstrQuery.replace (
']'
')'
)
Déclaration lStatement = lConnection.createStatement ();
ResultSet lResultSet = lStatement.executeQuery (lstrQuery);
tandis que
(lResultSet.next ())
{
Long ssetId = lResultSet.getLong (
"id"
);
// actif de recherche par id
Actif ICcDataObject = assetIdMap.get (assetId);
// définit les attributs
asset.setAttributeValue (
"name"
lResultSet.getString (
"name"
)) ;
asset.setAttributeValue (
"price"
lResultSet.getBigDecimal (
"price"
) )
Long assetTypeId = lResultSet.getLong (
"assetTypeId"
);
7. Recueillir des clés AssetType associées à des entités d'actif
assetToAssetTypeId.put (actif, assetTypeId);
}
8. Interrogez la table AssetType et créez des entités AssetType
lStatement = lConnection.createStatement ();
lstrQuery =
"select id, type from AssetType où id in" [19659059] + assetToAssetTypeId.values ();
lstrQuery = lstrQuery.replace (
'['
'('
) ;
lstrQuery = lstrQuery.replace (
']'
')'
)
[19659003] lResultSet = lStatement.executeQuery (lstrQuery);
tandis que
(lResultSet.next ())
[19659003] {19459029]
// création de l'entité AssetType
ICcDataObject assetType = aDataMgr.createEntity (
" setType "
);
// attribuer des attributs
long assetTypeId = lResultSet.getLong (
"id"
);
assetType.setAttributeValue (
" id "
assetTypeId);
assetType.setAttributeValue (
" type "
lResultSet.getString ([19659033] "type"
))
9. Actif associé à AssetType
pour
(Actif ICcDataObject: tradeAssets)
[
]
if
(assetToAssetTypeId.get (asset) .equals (assetTypeId))
{
asset.addAssociation (
"assetType"
assetType);
}
}
10. Associer un compte à des entités AssetType
if
(accountAssetTypeIds.contains (assetTypeId))
{
]
account.addAssociation (
"allowedAssetTypes"
assetType);
]
}
}
Étape 4: Test de l'appel de service
Pour tester la récupération de données, créez un Corticon Ruleflow et ajoutez un nœud Service Call-Out (SCO). Pointez ce SCO sur la méthode créée ci-dessus. Pour apprendre à configurer des SCO, voir Corticon Server: Guide d'intégration de données: utilisez la connexion ADC dans un appel de service .
Créez un test de règles avec le nouveau Ruleflow comme sujet de test. Et fournir les données d'entrée comme indiqué ci-dessous.
La base de données interne a un compte avec id = 1. Par conséquent, les données de test d'entrée incluent une proposition avec l'attribut accountId défini sur 1.
La base de données externe a six actifs définis avec ids = 1,2,3,4,5 and 6. Par conséquent, les données de test d'entrée comprennent six entités d'actif associées à la proposition. Leurs attributs id correspondent à ceux de la base de données.
Exécutez le test. Si la connexion de données aboutit, la sortie inclut l'enrichissement des données des entités Asset et de la nouvelle entité Account avec les types d'actifs autorisés, comme indiqué dans le panneau de sortie ci-dessous.
Figure 4: Entrée et sortie pour un test réussi des appels du service ADC.
Les données nécessaires sont disponibles pour déterminer les ressources que le compte doit acheter et vous pouvez modéliser la logique de décision dans les feuilles de règles.Les associations entre les entités Compte et AssetType définies dans le vocabulaire intègrent les données d'entrée aux données extraites de deux sources distinctes. La méthode d'appel de service prend également en charge cette association (par exemple, Account.allowedAssetTypes.asset).
Gardez à l'esprit, dans cet exemple, que les mappages de sources de données sont des noms exacts. ch le nom de la base de données, vous devez donc mapper les propriétés de la base de données avec les propriétés du vocabulaire. ICcDataManager permet d'accéder aux métadonnées de vocabulaire pour rechercher des noms d'entité, d'attribut et de rôle. Vous pouvez également accéder aux métadonnées de la source de données pour les noms de colonne et les types de retour. Pour en savoir plus sur les données de mappage, reportez-vous à Guide d'intégration de Corticon Data: créez et mappez le schéma ADC et les requêtes .
Vous disposez maintenant des outils pour accéder à deux bases de données vos applications. Pour en savoir plus, demandez une démonstration de Corticon 5.7, et n'oubliez pas de consulter toutes les mises à jour de la dernière version .
Source link