スタートアップコードの作成 - AWS X-Ray

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

スタートアップコードの作成

X-Ray SDK for Java は、着信リクエストのセグメントを自動的に作成します。リクエストが範囲内にある限り、計測クライアントを使用して問題なしでサブセグメントを記録できます。しかし、計測クライアントをスタートアップコードで使用しようとすると、SegmentNotFoundException が発生します。

スタートアップコードは、ウェブアプリケーションの標準的なリクエスト/レスポンスフローの外側で実行されるため、手動でセグメントを作成して計測する必要があります。Scorekeep はスタートアップコードのインストルメンテーションをWebConfig ファイルに表示します。Scorekeep はスタートアップ時に SQL データベースと Amazon SNS を呼び出します。

デフォルトの WebConfig クラスは、通知のための Amazon SNS サブスクリプションを作成します。Amazon SNS クライアントの使用時に X-Ray SDK が書き込むセグメントを提供するために、Scorekeep はグローバルレコーダー上で beginSegment および endSegment を呼び出します。

src/main/java/scorekeep/WebConfig.java – スタートアップコードの計測 AWS SDK クライアント

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();

Amazon RDS データベースが接続されているときに Scorekeep が使用する RdsWebConfig では、スタートアップ時にデータベーススキーマを適用するときに Hibernate が使用する SQL クライアントのセグメントも作成されます。

src/main/java/scorekeep/RdsWebConfig.java – スタートアップコードの実装 SQL データベースクライアント

@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 は自動的に実行され、SQL クライアントを使用します。クライアントが計測されているため、Scorekeep はデフォルトの実装をオーバーライドし、SDK がクライアントの呼び出し時に使用するセグメントを提供する必要があります。