本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
檢測啟動程式碼
適用於 Java 的 X-Ray 開發套件會自動為傳入的請求建立區段。只要請求是在範圍內,您即可使用經檢測的用戶端並記錄子區段,而不會出現問題。如果您嘗試在啟動程式碼中使用經檢測的用戶端,則會收到 SegmentNotFoundException。
啟動程式碼會在 Web 應用程式的標準請求/回應流程之外執行,因此您需要手動建立區段以檢測起始程式碼。Scorekeep 會在其 WebConfig
檔案中顯示啟動程式碼的檢測。起始程式碼會在啟動期間呼叫 SQL 資料庫和 Amazon SNS。
![](images/scorekeep-servicemap-init.png)
預設的WebConfig
類別會建立通知的 Amazon SNS 訂。為了在使用 Amazon SNS 用户端時提供 X-Ray 開發套件寫入的區段,Scorement 會在使用 Amazon SNS 用户端時呼叫beginSegment
和endSegment
在全局記錄器上。
範例 src/main/java/scorekeep/WebConfig.java
— 檢測AWS起始程式碼中經開發套件用
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();
InRdsWebConfig
在連線 Amazon RDS 資料庫時 Scoreep 所使用的中,組態也會為 SQL 用户端建立區段,以讓 Hibernate 在啟動期間套用資料庫結構描述時使用。
範例 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 必須覆寫預設的實作,並提供呼叫用戶端時軟體開發套件使用的區段。