{"action":"opened","issue":{"url":"https://api.github.com/repos/cojen/Tupl/issues/46","labels_url":"https://api.github.com/repos/cojen/Tupl/issues/46/labels{/name}","comments_url":"https://api.github.com/repos/cojen/Tupl/issues/46/comments","events_url":"https://api.github.com/repos/cojen/Tupl/issues/46/events","html_url":"https://github.com/cojen/Tupl/issues/46","id":118421267,"number":46,"title":"Make Transaction class be an interface","user":{"login":"broneill","id":2822640,"avatar_url":"https://avatars.githubusercontent.com/u/2822640?v=3","gravatar_id":"","url":"https://api.github.com/users/broneill","html_url":"https://github.com/broneill","followers_url":"https://api.github.com/users/broneill/followers","following_url":"https://api.github.com/users/broneill/following{/other_user}","gists_url":"https://api.github.com/users/broneill/gists{/gist_id}","starred_url":"https://api.github.com/users/broneill/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/broneill/subscriptions","organizations_url":"https://api.github.com/users/broneill/orgs","repos_url":"https://api.github.com/users/broneill/repos","events_url":"https://api.github.com/users/broneill/events{/privacy}","received_events_url":"https://api.github.com/users/broneill/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-11-23T16:42:33Z","updated_at":"2015-11-23T16:42:33Z","closed_at":null,"body":"Custom transaction implementations aren't possible because the class cannot be subclassed. It contains too many internal references to the database. Earlier concerns against defining an interface were with respect to performance. Considering that a check is made whenever a transaction instance is supplied to a method anyhow, an instanceof and cast operation won't add much (if any) overhead."}}