Instrumentation du code de démarrage - AWS X-Ray

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Instrumentation du code de démarrage

Le kit SDK X-Ray pour Java crée automatiquement des segments pour les demandes entrantes. En ce qui concerne les demandes, vous pouvez utiliser des clients instrumentés et enregistrer les sous-segments sans problème. En revanche, si vous tentez d'utiliser un client instrumenté dans le code de démarrage, vous obtenez une exception SegmentNotFoundException.

Le code de démarrage s'exécute en dehors du flux de demande/réponse standard d'une application web. Vous devez donc créer des segments manuellement pour l'instrumenter. Scorekeep présente l'instrumentation du code de démarrage dans ses fichier WebConfig. Scorekeep appelle une base de données SQL et Amazon SNS lors du démarrage.

La valeur par défautWebConfigclasse crée un abonnement Amazon SNS pour les notifications. Pour fournir un segment dans lequel le kit SDK X-Ray puisse écrire lorsque le client Amazon SNS est utilisé, Scorekeep appellebeginSegmentetendSegmentsur l'enregistreur mondial.

Exemple src/main/java/scorekeep/WebConfig.java— InstrumentéAWSClient SDK dans le code de démarrage
AWSXRay.beginSegment("Scorekeep-init"); if ( System.getenv("NOTIFICATION_EMAIL") != null ){ try { Sns.createSubscription(); } catch (Exception e ) { logger.warn("Failed to create subscription for email "+ System.getenv("NOTIFICATION_EMAIL")); } } AWSXRay.endSegment();

DansRdsWebConfig, que Scorekeep utilise lorsqu'une base de données Amazon RDS est connectée, la configuration crée aussi un segment pour le client SQL utilisé par Hibernate lorsqu'il applique le schéma de base de données lors du démarrage.

Exemple src/main/java/scorekeep/RdsWebConfig.java— Client de base de données SQL instrumenté dans le code de démarrage
@PostConstruct public void schemaExport() { EntityManagerFactoryImpl entityManagerFactoryImpl = (EntityManagerFactoryImpl) localContainerEntityManagerFactoryBean.getNativeEntityManagerFactory(); SessionFactoryImplementor sessionFactoryImplementor = entityManagerFactoryImpl.getSessionFactory(); StandardServiceRegistry standardServiceRegistry = sessionFactoryImplementor.getSessionFactoryOptions().getServiceRegistry(); MetadataSources metadataSources = new MetadataSources(new BootstrapServiceRegistryBuilder().build()); metadataSources.addAnnotatedClass(GameHistory.class); MetadataImplementor metadataImplementor = (MetadataImplementor) metadataSources.buildMetadata(standardServiceRegistry); SchemaExport schemaExport = new SchemaExport(standardServiceRegistry, metadataImplementor); AWSXRay.beginSegment("Scorekeep-init"); schemaExport.create(true, true); AWSXRay.endSegment(); }

SchemaExport s'exécute automatiquement et utilise un client SQL. Dans la mesure où le client est instrumenté, Scorekeep doit remplacer la mise en œuvre par défaut et fournir un segment qui est utilisé par le kit de développement logiciel lorsque le client est appelé.