Ana içeriğe geç

1.5. Genişletilebilir Uygulama Paket Mimarisi (Starter)#

Java altyapı ekibi tarafından geliştirilen uygulamaların starter kütüphane desteği bulunmaktadır. Starter kütüphane başka bir uygulama tarafından alınıp mevcut özellikleriyle kullanılabileceği gibi, özelleştirilerek de kullanılabilen kütüphanlerdir.

Buradaki asıl amaç ana ürünün projeler tarafından gereksinimlere göre esnetebilmektir.

Kullanımı#

Starter kütüphane kullanımı için hvl-javalt-samples altındaki hvl-bpmn-custom-server-sample projesi incelenebilir.

Örnekteki proje hvl-bpmn-engine-starter kütüphanesinin nasıl kullanılacağı ile ilgilidir.

Bu örnek bazında incelendiğinde ilk olarak kütüphane bağımlılığı eklenmelidir.

implementation(
        [group: 'tr.com.havelsan.framework.bpmn', name: 'hvl-bpmn-engine-starter'],
)

Bağımlılık eklendikten sonra starter kütüphanesinin aktif hale gelmesi için konfigürasyon sınıfına anotasyon eklenmesi gerekmektedir.

@Configuration
@ComponentScan(basePackages = HvlBpmnCustomServerApplicationConstant.BASE_PACKAGE)
@HvlEnableBpmnRuntimeService
@HvlEnableBpmnTaskService
public class HvlBpmnCustomServerApplicationConfiguration extends HvlBaseConfiguration {
}

Anotasyon eklendikten sonra hvl-bpmn-engine-starter kütüphanesindeki controllerlar devreye girecektir kullanılabilir duruma gelecektir.

Mevcut controller ezilmek istenirse extend edilerek ezilebilemektedir. Örnek aşağıdaki gibidir.

@Primary
@RestController
public class HvlBpmnCustomRepositoryController extends HvlBpmnRepositoryRestController implements HvlBpmnCustomRepositoryRestService {

    private final HvlBpmnCustomRepositoryService customBpmnRepositoryService;

    public HvlBpmnCustomRepositoryController(HvlBpmnCustomRepositoryService customBpmnRepositoryService) {
        super((HvlBpmnRepositoryService) customBpmnRepositoryService);
        this.customBpmnRepositoryService = customBpmnRepositoryService;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public HvlResponse<String> test() {
        return new HvlResponse<>(customBpmnRepositoryService.test());
    }

}

Yukarıdaki örnekte HvlBpmnRepositoryRestController sınıfı ezilerek, bu controller'a ek olarak test ucu eklenmiştir. Aynı şekilde servis sınıfları da özelleştirilebilir. Örnek aşağıdaki gibidir.

@Service
@Primary
public class HvlBpmnCustomRepositoryServiceImpl extends HvlBpmnRepositoryServiceImpl implements HvlBpmnCustomRepositoryService {

    public HvlBpmnCustomRepositoryServiceImpl(RepositoryService repositoryService,
                                              HvlProcessDefinitionConverter processDefinitionConverter,
                                              HvlBpmnRepositoryServiceProperties bpmnEngineServiceProperties) {
        super(repositoryService, processDefinitionConverter, bpmnEngineServiceProperties);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String test() {
        return String.valueOf(System.currentTimeMillis());
    }

}