{"action":"created","comment":{"url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/comments/73160265","id":73160265,"diff_hunk":"@@ -0,0 +1,161 @@\n+/*\n+ * Copyright 2016 Red Hat, Inc. and/or its affiliates.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ *\n+ *      http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+*/\n+\n+package org.kie.server.client.jms;\n+\n+import java.util.Arrays;\n+import java.util.concurrent.ExecutionException;\n+import java.util.concurrent.ExecutorService;\n+import java.util.concurrent.Executors;\n+import java.util.concurrent.Future;\n+import java.util.concurrent.TimeUnit;\n+import java.util.concurrent.TimeoutException;\n+import javax.jms.Connection;\n+import javax.jms.JMSException;\n+import javax.jms.Message;\n+import javax.jms.MessageConsumer;\n+import javax.jms.MessageListener;\n+import javax.jms.Queue;\n+import javax.jms.Session;\n+import javax.jms.TextMessage;\n+\n+import org.kie.server.api.jms.JMSConstants;\n+import org.kie.server.api.marshalling.Marshaller;\n+import org.kie.server.api.model.ServiceResponse;\n+import org.kie.server.api.model.ServiceResponsesList;\n+import org.kie.server.client.KieServicesClient;\n+import org.kie.server.client.KieServicesConfiguration;\n+import org.kie.server.client.KieServicesException;\n+import org.kie.server.client.impl.KieServicesClientImpl;\n+import org.slf4j.Logger;\n+import org.slf4j.LoggerFactory;\n+\n+/**\n+ * Async response handler that receives message from response queue using message listener.\n+ * It requires callback to be invoked upon message delivery otherwise will throw IllegalStateException on runtime.\n+ * <br/>\n+ * Due to nature of message listener (cannot clean up its connection and session) another thread is used to perform the cleanup\n+ * in finally block of message listener.\n+ * <br/>\n+ * Response is only delivered via callback thus return value of handleResponse is always single ServiceResponse of type NO_RESPONSE\n+ */\n+public class AsyncResponseHandler implements ResponseHandler {\n+\n+    private static final Logger logger = LoggerFactory.getLogger(AsyncResponseHandler.class);\n+\n+    private ResponseCallback callback;\n+    private ExecutorService executorService = Executors.newSingleThreadExecutor();\n+\n+    public AsyncResponseHandler(ResponseCallback callback) {\n+        this.callback = callback;\n+    }\n+\n+    @Override\n+    public int getInteractionPattern() {\n+        return JMSConstants.ASYNC_REPLY_PATTERN;\n+    }\n+\n+    @Override\n+    public ServiceResponsesList handleResponse(String selector, Connection connection, Session session, Queue responseQueue, KieServicesConfiguration config, Marshaller marshaller, KieServicesClient owner) {\n+\n+        if (callback == null) {\n+            throw new IllegalStateException(\"There is no callback defined, can't continue...\");\n+        }\n+\n+        MessageConsumer consumer = null;\n+        try {\n+            consumer = session.createConsumer(responseQueue, selector);\n+            consumer.setMessageListener(new AsyncMessageListener(connection, session, selector, consumer, marshaller, owner));\n+            logger.debug(\"Message listener for async message retrieval successfully registered on consumer {}\", consumer);\n+\n+        } catch( JMSException jmse ) {\n+            throw new KieServicesException(\"Unable to retrieve JMS response from queue \" + responseQueue + \" with selector \" + selector, jmse);\n+        }\n+\n+        ServiceResponse messageSentResponse = new ServiceResponse(ServiceResponse.ResponseType.NO_RESPONSE, \"Message sent\");\n+        return new ServiceResponsesList(Arrays.asList(messageSentResponse));\n+    }\n+\n+    @Override\n+    public void dispose(Connection connection, Session session) {\n+        // no op as the resources are closed from within message listener (via separate thread)\n+    }\n+\n+    private class AsyncMessageListener implements MessageListener  {\n+        private String selector;\n+        private MessageConsumer consumer;\n+        private Marshaller marshaller;\n+        private KieServicesClient owner;\n+\n+        private Connection connection;\n+        private Session session;\n+\n+        public AsyncMessageListener(Connection connection, Session session, String selector, MessageConsumer consumer, Marshaller marshaller, KieServicesClient owner) {\n+            this.selector = selector;\n+            this.consumer = consumer;\n+            this.marshaller = marshaller;\n+            this.owner = owner;\n+            this.connection = connection;\n+            this.session = session;\n+        }\n+\n+        @Override\n+        public void onMessage(Message message) {\n+            try {\n+                ((KieServicesClientImpl) owner).setConversationId(message.getStringProperty(JMSConstants.CONVERSATION_ID_PROPERTY_NAME));\n+\n+                String responseStr = ((TextMessage) message).getText();\n+                logger.debug(\"Received response from server '{}'\", responseStr);\n+\n+                ServiceResponsesList cmdResponse = marshaller.unmarshall(responseStr, ServiceResponsesList.class);\n+                logger.debug(\"Unmarshalled response from async delivery {} calling callback {}\", cmdResponse, callback);\n+\n+                callback.onResponse(selector, cmdResponse);\n+                logger.debug(\"Callback {} successfully invoked with response {}\", callback, cmdResponse);\n+            } catch (Exception e) {\n+                logger.error(\"Error while receiving message due to {}, this means response from the server won't be delivered to client\", e.getMessage(), e);\n+            } finally {\n+                if (consumer != null) {\n+                    try {\n+                        consumer.close();\n+                    } catch (JMSException e) {\n+                        logger.warn(\"Error when closing JMS consumer due to {}\", e.getMessage());\n+                    }\n+                }\n+                // submit work to executor service to close resources\n+                // as they cannot be closed from message listener\n+                executorService.submit(new Runnable() {","path":"kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/jms/AsyncResponseHandler.java","position":139,"original_position":139,"commit_id":"20a6a06c0c16ea543124973e872f0faaff3341f0","original_commit_id":"20a6a06c0c16ea543124973e872f0faaff3341f0","user":{"login":"mswiderski","id":904474,"avatar_url":"https://avatars.githubusercontent.com/u/904474?v=3","gravatar_id":"","url":"https://api.github.com/users/mswiderski","html_url":"https://github.com/mswiderski","followers_url":"https://api.github.com/users/mswiderski/followers","following_url":"https://api.github.com/users/mswiderski/following{/other_user}","gists_url":"https://api.github.com/users/mswiderski/gists{/gist_id}","starred_url":"https://api.github.com/users/mswiderski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mswiderski/subscriptions","organizations_url":"https://api.github.com/users/mswiderski/orgs","repos_url":"https://api.github.com/users/mswiderski/repos","events_url":"https://api.github.com/users/mswiderski/events{/privacy}","received_events_url":"https://api.github.com/users/mswiderski/received_events","type":"User","site_admin":false},"body":"dispose is invoked before the message arrives as it's async. Imagine situation where you call client.startProcess that uses async handler, this means the message is sent and startProcess method completes - it does not wait for response so if we would close connection and session in dispose that would essentially kill the message listener and it would never receive the response.\r\n\r\ndoes it make sense?","created_at":"2016-08-02T14:03:01Z","updated_at":"2016-08-02T14:03:01Z","html_url":"https://github.com/droolsjbpm/droolsjbpm-integration/pull/554#discussion_r73160265","pull_request_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/554","_links":{"self":{"href":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/comments/73160265"},"html":{"href":"https://github.com/droolsjbpm/droolsjbpm-integration/pull/554#discussion_r73160265"},"pull_request":{"href":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/554"}}},"pull_request":{"url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/554","id":79722533,"html_url":"https://github.com/droolsjbpm/droolsjbpm-integration/pull/554","diff_url":"https://github.com/droolsjbpm/droolsjbpm-integration/pull/554.diff","patch_url":"https://github.com/droolsjbpm/droolsjbpm-integration/pull/554.patch","issue_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/issues/554","number":554,"state":"open","locked":false,"title":"JBPM-5228 - Allow 'fire and forget' feature in runtime Kie Server Rem…","user":{"login":"mswiderski","id":904474,"avatar_url":"https://avatars.githubusercontent.com/u/904474?v=3","gravatar_id":"","url":"https://api.github.com/users/mswiderski","html_url":"https://github.com/mswiderski","followers_url":"https://api.github.com/users/mswiderski/followers","following_url":"https://api.github.com/users/mswiderski/following{/other_user}","gists_url":"https://api.github.com/users/mswiderski/gists{/gist_id}","starred_url":"https://api.github.com/users/mswiderski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mswiderski/subscriptions","organizations_url":"https://api.github.com/users/mswiderski/orgs","repos_url":"https://api.github.com/users/mswiderski/repos","events_url":"https://api.github.com/users/mswiderski/events{/privacy}","received_events_url":"https://api.github.com/users/mswiderski/received_events","type":"User","site_admin":false},"body":"…ote APIs\r\n\r\n@sutaakar @livthomas here comes the fire and forget support for JMS kie server client. In addition there is an async response and transactional support for jms client as well as they all come in the same party so to say.","created_at":"2016-08-02T11:59:26Z","updated_at":"2016-08-02T14:03:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d62c73f651c3c0aaab131ba33731b1e164f60b9f","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/554/commits","review_comments_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/554/comments","review_comment_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/comments{/number}","comments_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/issues/554/comments","statuses_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/statuses/20a6a06c0c16ea543124973e872f0faaff3341f0","head":{"label":"mswiderski:JBPM-5228","ref":"JBPM-5228","sha":"20a6a06c0c16ea543124973e872f0faaff3341f0","user":{"login":"mswiderski","id":904474,"avatar_url":"https://avatars.githubusercontent.com/u/904474?v=3","gravatar_id":"","url":"https://api.github.com/users/mswiderski","html_url":"https://github.com/mswiderski","followers_url":"https://api.github.com/users/mswiderski/followers","following_url":"https://api.github.com/users/mswiderski/following{/other_user}","gists_url":"https://api.github.com/users/mswiderski/gists{/gist_id}","starred_url":"https://api.github.com/users/mswiderski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mswiderski/subscriptions","organizations_url":"https://api.github.com/users/mswiderski/orgs","repos_url":"https://api.github.com/users/mswiderski/repos","events_url":"https://api.github.com/users/mswiderski/events{/privacy}","received_events_url":"https://api.github.com/users/mswiderski/received_events","type":"User","site_admin":false},"repo":{"id":5584723,"name":"droolsjbpm-integration","full_name":"mswiderski/droolsjbpm-integration","owner":{"login":"mswiderski","id":904474,"avatar_url":"https://avatars.githubusercontent.com/u/904474?v=3","gravatar_id":"","url":"https://api.github.com/users/mswiderski","html_url":"https://github.com/mswiderski","followers_url":"https://api.github.com/users/mswiderski/followers","following_url":"https://api.github.com/users/mswiderski/following{/other_user}","gists_url":"https://api.github.com/users/mswiderski/gists{/gist_id}","starred_url":"https://api.github.com/users/mswiderski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mswiderski/subscriptions","organizations_url":"https://api.github.com/users/mswiderski/orgs","repos_url":"https://api.github.com/users/mswiderski/repos","events_url":"https://api.github.com/users/mswiderski/events{/privacy}","received_events_url":"https://api.github.com/users/mswiderski/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mswiderski/droolsjbpm-integration","description":"Drools and jBPM integration with seam, spring, camel, ...","fork":true,"url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration","forks_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/forks","keys_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/teams","hooks_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/hooks","issue_events_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/issues/events{/number}","events_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/events","assignees_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/assignees{/user}","branches_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/branches{/branch}","tags_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/tags","blobs_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/git/refs{/sha}","trees_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/statuses/{sha}","languages_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/languages","stargazers_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/stargazers","contributors_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/contributors","subscribers_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/subscribers","subscription_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/subscription","commits_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/commits{/sha}","git_commits_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/git/commits{/sha}","comments_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/comments{/number}","issue_comment_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/issues/comments{/number}","contents_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/contents/{+path}","compare_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/merges","archive_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/downloads","issues_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/issues{/number}","pulls_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/pulls{/number}","milestones_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/milestones{/number}","notifications_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/labels{/name}","releases_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/releases{/id}","deployments_url":"https://api.github.com/repos/mswiderski/droolsjbpm-integration/deployments","created_at":"2012-08-28T11:11:08Z","updated_at":"2014-05-26T11:20:48Z","pushed_at":"2016-08-02T11:42:13Z","git_url":"git://github.com/mswiderski/droolsjbpm-integration.git","ssh_url":"git@github.com:mswiderski/droolsjbpm-integration.git","clone_url":"https://github.com/mswiderski/droolsjbpm-integration.git","svn_url":"https://github.com/mswiderski/droolsjbpm-integration","homepage":"","size":39216,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"droolsjbpm:master","ref":"master","sha":"20ad89f28ef4f1e72ae7920adf5a50c9edb2dac7","user":{"login":"droolsjbpm","id":517980,"avatar_url":"https://avatars.githubusercontent.com/u/517980?v=3","gravatar_id":"","url":"https://api.github.com/users/droolsjbpm","html_url":"https://github.com/droolsjbpm","followers_url":"https://api.github.com/users/droolsjbpm/followers","following_url":"https://api.github.com/users/droolsjbpm/following{/other_user}","gists_url":"https://api.github.com/users/droolsjbpm/gists{/gist_id}","starred_url":"https://api.github.com/users/droolsjbpm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/droolsjbpm/subscriptions","organizations_url":"https://api.github.com/users/droolsjbpm/orgs","repos_url":"https://api.github.com/users/droolsjbpm/repos","events_url":"https://api.github.com/users/droolsjbpm/events{/privacy}","received_events_url":"https://api.github.com/users/droolsjbpm/received_events","type":"Organization","site_admin":false},"repo":{"id":1365306,"name":"droolsjbpm-integration","full_name":"droolsjbpm/droolsjbpm-integration","owner":{"login":"droolsjbpm","id":517980,"avatar_url":"https://avatars.githubusercontent.com/u/517980?v=3","gravatar_id":"","url":"https://api.github.com/users/droolsjbpm","html_url":"https://github.com/droolsjbpm","followers_url":"https://api.github.com/users/droolsjbpm/followers","following_url":"https://api.github.com/users/droolsjbpm/following{/other_user}","gists_url":"https://api.github.com/users/droolsjbpm/gists{/gist_id}","starred_url":"https://api.github.com/users/droolsjbpm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/droolsjbpm/subscriptions","organizations_url":"https://api.github.com/users/droolsjbpm/orgs","repos_url":"https://api.github.com/users/droolsjbpm/repos","events_url":"https://api.github.com/users/droolsjbpm/events{/privacy}","received_events_url":"https://api.github.com/users/droolsjbpm/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/droolsjbpm/droolsjbpm-integration","description":"Drools and jBPM integration with seam, spring, camel, ...","fork":false,"url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration","forks_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/forks","keys_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/keys{/key_id}","collaborators_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/teams","hooks_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/hooks","issue_events_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/issues/events{/number}","events_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/events","assignees_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/assignees{/user}","branches_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/branches{/branch}","tags_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/tags","blobs_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/git/refs{/sha}","trees_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/git/trees{/sha}","statuses_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/statuses/{sha}","languages_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/languages","stargazers_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/stargazers","contributors_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/contributors","subscribers_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/subscribers","subscription_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/subscription","commits_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/commits{/sha}","git_commits_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/git/commits{/sha}","comments_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/comments{/number}","issue_comment_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/issues/comments{/number}","contents_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/contents/{+path}","compare_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/compare/{base}...{head}","merges_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/merges","archive_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/downloads","issues_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/issues{/number}","pulls_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls{/number}","milestones_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/milestones{/number}","notifications_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/labels{/name}","releases_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/releases{/id}","deployments_url":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/deployments","created_at":"2011-02-14T14:02:11Z","updated_at":"2016-07-30T11:49:43Z","pushed_at":"2016-08-02T11:59:26Z","git_url":"git://github.com/droolsjbpm/droolsjbpm-integration.git","ssh_url":"git@github.com:droolsjbpm/droolsjbpm-integration.git","clone_url":"https://github.com/droolsjbpm/droolsjbpm-integration.git","svn_url":"https://github.com/droolsjbpm/droolsjbpm-integration","homepage":"","size":51165,"stargazers_count":99,"watchers_count":99,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":256,"mirror_url":null,"open_issues_count":10,"forks":256,"open_issues":10,"watchers":99,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/554"},"html":{"href":"https://github.com/droolsjbpm/droolsjbpm-integration/pull/554"},"issue":{"href":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/issues/554"},"comments":{"href":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/issues/554/comments"},"review_comments":{"href":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/554/comments"},"review_comment":{"href":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/pulls/554/commits"},"statuses":{"href":"https://api.github.com/repos/droolsjbpm/droolsjbpm-integration/statuses/20a6a06c0c16ea543124973e872f0faaff3341f0"}}}}
{"actor":{"display_login":"mswiderski"}}