시작 코드 구성 - AWS X-Ray

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

시작 코드 구성

Java용 X-Ray DSK가 수신 요청에 대한 세그먼트를 자동으로 생성합니다. 요청이 범위 내에 있을 때에는 문제 없이 구성된 클라이언트를 사용하고 하위 세그먼트를 레코딩할 수 있습니다. 계측된 클라이언트를 시작 코드에서 사용하려는 경우 SegmentNotFoundException이 발생합니다.

시작 코드는 웹 애플리케이션의 표준 요청/응답 흐름 외부에서 실행되므로 시작 코드를 구성하려면 세그먼트를 수동으로 생성해야 합니다. Scorekeep이 해당 WebConfig 파일에서 시작 코드의 구성을 표시합니다. Scorekeep이 시작 중에 SQL 데이터베이스와 Amazon SNS를 호출합니다.

기본 WebConfig 클래스가 알림을 위한 Amazon SNS 구독을 생성합니다. Amazon SNS 클라이언트가 사용될 때 X-Ray SDK가 기록할 세그먼트를 제공하기 위해 Scorekeep이 전역 레코더에서 beginSegmentendSegment를 호출합니다.

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에서 사용할 세그먼트를 제공해야 합니다.