Dependency safety for Java: implementing and testing failboxes

Dan Zhang, Dragan Bošnački, Mark van den Brand, Cornelis Huizing, Bart Jacobs, Ruurd Kuiper, Anton Wijs (Corresponding author)

Research output: Contribution to journalArticleAcademicpeer-review

Abstract

Exception mechanisms help to ensure that a program satisfies the important robustness criterion of dependency safety: if an operation fails in an execution sequence, any code depending on the successful completion of this operation should also fail in a controlled way. However, the exception handling mechanisms available in languages like Java do not provide a structured way to achieve dependency safety. The language extension failbox provides dependency safety in a compositional manner. Asynchronous exceptions occurring inside the failbox code are a serious challenge in achieving dependency safety. In this article we present a Java implementation which deals with this challenge by developing failboxes incrementally, through four increasingly robust iterations. For each incremental implementation step we analyze the vulnerabilities and argue the remedies in the next implementation. We also present a testing approach to investigate whether the vulnerabilities are realistic and the remedies proposed are effective. This testing approach enables us to generate asynchronous exceptions in a controlled manner for concurrent programs and the tests are repeatable in that they give the same results for runs that may differ in scheduling, even on different platforms.

Original languageEnglish
Article number102316
Number of pages22
JournalScience of Computer Programming
Volume184
DOIs
Publication statusPublished - 1 Oct 2019

    Fingerprint

Keywords

  • Concurrency
  • Exception handling
  • Failboxes
  • Java

Cite this