쿼리 명령어 파서 등록

이 절에서는 SampleServiceImpl 코드를 통해 런타임에 쿼리 명령어 파서를 추가하거나 삭제하는 과정을 알아봅니다.

쿼리 파서 서비스

QueryParserService 서비스는 아래 2개의 메소드를 통해 파서를 추가하거나 삭제할 수 있도록 지원합니다.

  • addCommandParser(): 새 쿼리 명령어 파서를 추가합니다.
  • removeCommandParser(): 기존 쿼리 명령어 파서를 삭제합니다.

파서 추가 및 삭제

SampleServiceImpl 컴포넌트는 시작할 때 QueryParserService에 모든 쿼리 명령어 파서를 추가하고, 정지할 때 QueryParserService에서 모든 쿼리 명령어를 삭제하도록 구현되어 있습니다.

@Component(name = "sample-service")
@Instantiate
public class SampleServiceImpl {

	@Requires
	private QueryParserService queryParserService;

	@Requires
	private ConnectProfileService connectProfileService;

	private SampleQueryCommandParser subnetGroupsParser = new SampleSubnetGroupsCommandParser();
	private SampleQueryCommandParser createSubnetGroupParser = new SampleCreateSubnetGroupCommandParser();

	@Validate
	public void start() {
		for (SampleQueryCommandParser parser : getParsers()) {
			parser.setConnectProfileService(connectProfileService);
			queryParserService.addCommandParser(parser);
		}
	}

	@Invalidate
	public void stop() {
		if (queryParserService == null)
			return;

		for (SampleQueryCommandParser parser : getParsers()) {
			parser.setConnectProfileService(null);
			queryParserService.removeCommandParser(parser);
		}
	}

	private List<SampleQueryCommandParser> getParsers() {
		return Arrays.asList(subnetGroupsParser, createSubnetGroupParser);
	}
}

SampleQueryCommandParser 클래스는 ConnectProfileQueryCommandParser를 상속하기 때문에, 각 파서를 초기화하는 시점에 반드시 ConnectProfileService 객체를 설정해야 하는 점에 유의합니다.

로그프레소 셸에서 bundle.startbundle.stop을 반복하면서 sample-subnet-groups 쿼리가 어떻게 실행되는지 확인하시기 바랍니다. 예를 들어, com.logpresso.sonar.sample 번들이 133번이라면 아래와 같이 정지할 수 있습니다.

logpresso> bundle.stop 133
bundle 133 stopped.