Fermer

août 13, 2018

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.

 Vocabulaire de configuration - Corticon "title =" Vocabulaire de configuration - Corticon "data-openoriginalimageonclick =" true "/> </a data-recalc-dims=

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.

 Définir les sources de données - Corticon "title =" Définir les sources de données - Corticon "data-openoriginalimageonclick =" true "/> </a data-recalc-dims=

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.

 Définir les sources de données 2 - Corticon "title =" Définir les sources de données 2 - Corticon "data-openoriginalimageonclick =" true "/> </a data-recalc-dims= ] 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:

  1. la base de données interne
  2. À 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
  3. Collectez les clés AssetType associées au compte
  4. Récupérez les entités de DataManager
  5. 19659021] Query Asset table et enrichit les entités Asset
  6. Collecte des clés AssetType associées aux entités Asset
  7. Query AssetType table et crée des entités AssetType
  8. Associer des actifs à AssetType
  9. 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 proposalSet = aDataMgr.getEntitiesByName ( "Proposal" )

ICcDataObject proposal = (ICcDataObject) proposalSet.iterator (). Next ();

/ / create Entité de compte

Compte ICcDataObject = aDataMgr.createEntity ( "Compte" );

ArrayList accountAssetTypeIds = 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 tradeAssets = aDataMgr.getEntitiesByName ( "Asset" );

// map asset à l'entité Asset pour la recherche facile

Carte assetIdMap = 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 assetToAssetTypeId = 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.

 "title =" Appel du service de test - Corticon "data-openoriginalimageonclick =" true "/> </a data-recalc-dims=

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