So far there has been some good discussion on this thread. I can certainly appreciate the frustration that has been expressed, specifically around under defined APIs, and confusion regarding the various components of proton. I believe there are steps we can take to improve both of those situations. I've created additional components in JIRA for tracking changes across bindings, and I'm currently working on some content describing proton's overall architecture and how messenger and engine fit within it and relate to each other.
That said, no amount of documentation or JIRA usage will help with the issues I raised in my original post. In particular making even small code changes requires touching too many different parts: (C code, Java impl, Java API, JNI binding, C shim, Java shim, and python tests). As a first step towards improving this I'd like to reiterate my proposal of removing the JNI binding for the following reasons: - It is experiencing significant bit rot. - It is not currently used outside of testing. - It only provides a minimal amount of additional coverage (some 19 or so tests as compared to the 266 tests already in the shared python test suite). - It is a significant maintenance burden as it covers the entire engine API rather than just messenger. - It is unlikely to ever be of production value, because a JNI layer designed for testing an existing C library has fundamentally different requirements than a JNI layer designed to improve the performance of an existing Java library. --Rafael
