{"action":"created","comment":{"url":"https://api.github.com/repos/wildfly/wildfly/pulls/comments/177082141","pull_request_review_id":106892424,"id":177082141,"diff_hunk":"@@ -0,0 +1,211 @@\n+package org.jboss.as.test.clustering.cluster.ejb.remote;\n+\n+\n+import org.apache.commons.lang.math.RandomUtils;\n+import org.jboss.arquillian.container.test.api.Deployment;\n+import org.jboss.arquillian.container.test.api.OperateOnDeployment;\n+import org.jboss.arquillian.container.test.api.RunAsClient;\n+import org.jboss.arquillian.container.test.api.TargetsContainer;\n+import org.jboss.arquillian.junit.Arquillian;\n+import org.jboss.arquillian.test.api.ArquillianResource;\n+import org.jboss.as.test.clustering.cluster.AbstractClusteringTestCase;\n+import org.jboss.as.test.clustering.cluster.ejb.remote.bean.Heartbeat;\n+import org.jboss.as.test.clustering.cluster.ejb.remote.bean.HeartbeatBean;\n+import org.jboss.as.test.clustering.cluster.ejb.remote.bean.Result;\n+import org.jboss.as.test.clustering.ejb.EJBDirectory;\n+import org.jboss.as.test.shared.TimeoutUtil;\n+import org.jboss.as.test.shared.integration.ejb.security.PermissionUtils;\n+import org.jboss.byteman.contrib.bmunit.BMScript;\n+import org.jboss.byteman.contrib.bmunit.BMUnitConfig;\n+import org.jboss.byteman.contrib.bmunit.BMRunnerUtil;\n+import org.jboss.byteman.contrib.bmunit.BMUnitConfigState;\n+import org.jboss.byteman.contrib.bmunit.BMUnit;\n+import org.jboss.ejb.client.ClusterNodeSelector;\n+import org.jboss.ejb.client.EJBClientConnection;\n+import org.jboss.ejb.client.EJBClientContext;\n+import org.jboss.ejb.protocol.remote.RemoteTransportProvider;\n+import org.jboss.shrinkwrap.api.Archive;\n+import org.jboss.shrinkwrap.api.ShrinkWrap;\n+import org.jboss.shrinkwrap.api.spec.JavaArchive;\n+import org.junit.AfterClass;\n+import org.junit.Assert;\n+import org.junit.BeforeClass;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.wildfly.naming.client.WildFlyInitialContextFactory;\n+\n+import javax.naming.Context;\n+import javax.naming.InitialContext;\n+import java.net.URI;\n+import java.net.URL;\n+import java.util.Date;\n+import java.util.Properties;\n+import java.util.PropertyPermission;\n+\n+/**\n+ * <p>Validates that the provided implementation of {@link ClusterNodeSelector} is being used by the ejb client to\n+ * select the node of the cluster to route the request to;</p>\n+ * <p>This relies on the cluster provisioning the client with a cluster view containing the correct affinity for the\n+ * EJB being invoked;</p>\n+ * <p>This test basically replicates test org.jboss.ejb.client.test.ClusterNodeSelectorTestCase in project\n+ * jboss-ejb-client (credits to <a href=\"mailto:rachmato@redhat.com\">Richard Achmatowicz</a>);</p>\n+ * <p>This test was added after the functionality was broken because of the affinity not being correctly sent to the\n+ * client (refer to issue <a href=\"https://issues.jboss.org/browse/WFLY-10030\">WFLY-10030</a>); that is why a Byteman rule\n+ * has been added to track the affinity and print it out in case the test fails;</p>\n+ * <p>NOTE: this test can be run using the following command issued from the root directory of the whole WildFly project:\n+ * {@code ./integration-tests.sh test -Dts.noSmoke -Dts.clustering -Dtest=org.jboss.as.test.clustering.cluster.ejb.remote.ClientClusterNodeSelectorTestCase}</p>\n+ *\n+ * @author <a href=\"mailto:tborgato@redhat.com\">Tommaso Borgato</a>\n+ */\n+@RunWith(Arquillian.class)\n+@BMUnitConfig(loadDirectory=\"target/test-classes\")\n+@BMScript(value= \"clientclusternodeselector.btm\")\n+public class ClientClusterNodeSelectorTestCase extends AbstractClusteringTestCase {\n+\n+    private static final String MODULE_NAME = \"remote-stateless-ejb-cns-test\";\n+    private static final long CLIENT_TOPOLOGY_UPDATE_WAIT = TimeoutUtil.adjust(2000);\n+\n+    public static String AFFINITY;\n+    public static String CLUSTER_NAME;\n+\n+    /**\n+     * Implementation of {@link ClusterNodeSelector} to be used for custom cluster node selection\n+     */\n+    public static class CustomClusterNodeSelector implements ClusterNodeSelector {\n+        private static volatile String PICK_NODE = null;\n+\n+        @Override\n+        public String selectNode(\n+                String clusterName, String[] connectedNodes, String[] totalAvailableNodes) {\n+            if (PICK_NODE != null) {\n+                return PICK_NODE;\n+            }\n+            return connectedNodes[0];\n+        }\n+    }\n+\n+    public ClientClusterNodeSelectorTestCase() throws Exception {\n+        super(FOUR_NODES);\n+    }\n+\n+    @BeforeClass\n+    public static void beforeClass() throws Exception {\n+        // calls into the byteman engine to do the setup from annotations on this class\n+        BMUnitConfigState.pushConfigurationState(\n+                ClientClusterNodeSelectorTestCase.class.getAnnotation(BMUnitConfig.class)\n+                , ClientClusterNodeSelectorTestCase.class);\n+        BMUnit.loadScriptFile(\n+                ClientClusterNodeSelectorTestCase.class\n+                , BMRunnerUtil.computeBMScriptName(ClientClusterNodeSelectorTestCase.class.getAnnotation(BMScript.class).value())\n+                , BMRunnerUtil.normaliseLoadDirectory(ClientClusterNodeSelectorTestCase.class.getAnnotation(BMScript.class)));\n+    }\n+\n+    @AfterClass\n+    public static void afterClass() throws Exception {\n+        BMUnitConfigState.popConfigurationState(ClientClusterNodeSelectorTestCase.class);\n+    }\n+\n+    @Deployment(name = DEPLOYMENT_1, managed = false, testable = false)\n+    @TargetsContainer(NODE_1)\n+    public static Archive<?> createDeploymentForContainer1() {\n+        return createDeployment(MODULE_NAME);\n+    }\n+\n+    @Deployment(name = DEPLOYMENT_2, managed = false, testable = false)\n+    @TargetsContainer(NODE_2)\n+    public static Archive<?> createDeploymentForContainer2() {\n+        return createDeployment(MODULE_NAME);\n+    }\n+\n+    @Deployment(name = DEPLOYMENT_3, managed = false, testable = false)\n+    @TargetsContainer(NODE_3)\n+    public static Archive<?> createDeploymentForContainer3() {\n+        return createDeployment(MODULE_NAME);\n+    }\n+\n+    @Deployment(name = DEPLOYMENT_4, managed = false, testable = false)\n+    @TargetsContainer(NODE_4)\n+    public static Archive<?> createDeploymentForContainer4() {\n+        return createDeployment(MODULE_NAME);\n+    }\n+\n+    /**\n+     * Instructs the ClusterNodeSelector on which node to call before each request and that checks that the response\n+     * comes from that very node;\n+     * @param baseURL1\n+     * @throws Exception\n+     */\n+    @Test\n+    @RunAsClient\n+    public void test(\n+            @ArquillianResource() @OperateOnDeployment(DEPLOYMENT_1) URL baseURL1\n+    ) throws Exception {\n+\n+        final EJBClientContext.Builder ejbClientBuilder = new EJBClientContext.Builder();\n+        ejbClientBuilder.addTransportProvider(new RemoteTransportProvider());\n+        final EJBClientConnection.Builder connBuilder = new EJBClientConnection.Builder();\n+        connBuilder.setDestination(URI.create(String.format(\"remote+%s\", baseURL1)));\n+        ejbClientBuilder.addClientConnection(connBuilder.build());\n+        // ====================================================================================\n+        // set the custom ClusterNodeSelector\n+        // ====================================================================================\n+        ejbClientBuilder.setClusterNodeSelector(new CustomClusterNodeSelector());\n+        final EJBClientContext ejbCtx = ejbClientBuilder.build();\n+        EJBClientContext.getContextManager().setThreadDefault(ejbCtx);\n+\n+        Properties props = new Properties();\n+        props.put(Context.INITIAL_CONTEXT_FACTORY, WildFlyInitialContextFactory.class.getName());\n+        InitialContext ctx = new InitialContext(props);\n+        String lookupName = \"ejb:/\" + MODULE_NAME + \"/\" + HeartbeatBean.class.getSimpleName() + \"!\" + Heartbeat.class.getName();\n+        Heartbeat bean = (Heartbeat) ctx.lookup(lookupName);\n+\n+        // ====================================================================================\n+        // first call goes to connected node regardless of CustomClusterNodeSelector\n+        // ====================================================================================\n+        Result<Date> res = bean.pulse();\n+        Thread.sleep(CLIENT_TOPOLOGY_UPDATE_WAIT);\n+\n+        // ====================================================================================\n+        // subsequent calls must be routed to the node selected by the CustomClusterNodeSelector\n+        // ====================================================================================\n+        callBeanOnNode(bean, NODE_4);\n+        callBeanOnNode(bean, NODE_2);\n+        callBeanOnNode(bean, NODE_4);\n+        callBeanOnNode(bean, NODE_4);\n+        callBeanOnNode(bean, NODE_1);\n+        callBeanOnNode(bean, NODE_3);\n+\n+        ctx.close();","path":"testsuite/integration/clustering/src/test/java/org/jboss/as/test/clustering/cluster/ejb/remote/ClientClusterNodeSelectorTestCase.java","position":178,"original_position":178,"commit_id":"f3068e05ee305edf05b02f5e16fb34fab2719162","original_commit_id":"f3068e05ee305edf05b02f5e16fb34fab2719162","user":{"login":"pferraro","id":352192,"avatar_url":"https://avatars2.githubusercontent.com/u/352192?v=4","gravatar_id":"","url":"https://api.github.com/users/pferraro","html_url":"https://github.com/pferraro","followers_url":"https://api.github.com/users/pferraro/followers","following_url":"https://api.github.com/users/pferraro/following{/other_user}","gists_url":"https://api.github.com/users/pferraro/gists{/gist_id}","starred_url":"https://api.github.com/users/pferraro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pferraro/subscriptions","organizations_url":"https://api.github.com/users/pferraro/orgs","repos_url":"https://api.github.com/users/pferraro/repos","events_url":"https://api.github.com/users/pferraro/events{/privacy}","received_events_url":"https://api.github.com/users/pferraro/received_events","type":"User","site_admin":false},"body":"Alternatively, define your InitialContext within a try-with-resource block.","created_at":"2018-03-26T13:06:35Z","updated_at":"2018-03-26T13:06:35Z","html_url":"https://github.com/wildfly/wildfly/pull/11037#discussion_r177082141","pull_request_url":"https://api.github.com/repos/wildfly/wildfly/pulls/11037","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/wildfly/wildfly/pulls/comments/177082141"},"html":{"href":"https://github.com/wildfly/wildfly/pull/11037#discussion_r177082141"},"pull_request":{"href":"https://api.github.com/repos/wildfly/wildfly/pulls/11037"}}},"pull_request":{"url":"https://api.github.com/repos/wildfly/wildfly/pulls/11037","id":176459051,"html_url":"https://github.com/wildfly/wildfly/pull/11037","diff_url":"https://github.com/wildfly/wildfly/pull/11037.diff","patch_url":"https://github.com/wildfly/wildfly/pull/11037.patch","issue_url":"https://api.github.com/repos/wildfly/wildfly/issues/11037","number":11037,"state":"open","locked":false,"title":"[WFLY-10030] Added server side test for EJB custom ClusterNodeSelector","user":{"login":"tommaso-borgato","id":35226256,"avatar_url":"https://avatars0.githubusercontent.com/u/35226256?v=4","gravatar_id":"","url":"https://api.github.com/users/tommaso-borgato","html_url":"https://github.com/tommaso-borgato","followers_url":"https://api.github.com/users/tommaso-borgato/followers","following_url":"https://api.github.com/users/tommaso-borgato/following{/other_user}","gists_url":"https://api.github.com/users/tommaso-borgato/gists{/gist_id}","starred_url":"https://api.github.com/users/tommaso-borgato/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tommaso-borgato/subscriptions","organizations_url":"https://api.github.com/users/tommaso-borgato/orgs","repos_url":"https://api.github.com/users/tommaso-borgato/repos","events_url":"https://api.github.com/users/tommaso-borgato/events{/privacy}","received_events_url":"https://api.github.com/users/tommaso-borgato/received_events","type":"User","site_admin":false},"body":"Thanks for submitting your Pull Request!\r\n\r\nPlease make sure your PR meets the following requirements:\r\n- [ ] Pull Request title is properly formatted: `[WFLY-XYZ] Subject` or `WFLY-XYZ Subject`\r\n- [ ] Pull Request contains link to the JIRA issue(s)\r\n- [ ] Pull Request contains description of the issue(s)\r\n- [ ] Pull Request does not include fixes for issues other than the main ticket\r\n- [ ] Attached commits represent units of work and are properly formatted\r\n\r\nFor bigger changes, major and minor component upgrades make sure your PR also meets following requirements:\r\n- [ ] Pull Request requires a change to the documentation\r\n- [ ] Documentation have been updated accordingly\r\n- [ ] Tests were added to cover changes\r\n\r\nFor new features ensure as well:\r\n- [ ] Analysis was done\r\n- [ ] Test Plan has been done\r\n- [ ] Tests were verified in advance\r\n\r\nIf you are not an active contributor of the WildFly project you can request sponsorship by one of the members to help guide you through the process.","created_at":"2018-03-21T12:23:03Z","updated_at":"2018-03-26T13:06:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b56a8aea6ecc7cc3c429a3ba1d5d067a5c5d3978","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/wildfly/wildfly/pulls/11037/commits","review_comments_url":"https://api.github.com/repos/wildfly/wildfly/pulls/11037/comments","review_comment_url":"https://api.github.com/repos/wildfly/wildfly/pulls/comments{/number}","comments_url":"https://api.github.com/repos/wildfly/wildfly/issues/11037/comments","statuses_url":"https://api.github.com/repos/wildfly/wildfly/statuses/f3068e05ee305edf05b02f5e16fb34fab2719162","head":{"label":"tommaso-borgato:WFLY-10030","ref":"WFLY-10030","sha":"f3068e05ee305edf05b02f5e16fb34fab2719162","user":{"login":"tommaso-borgato","id":35226256,"avatar_url":"https://avatars0.githubusercontent.com/u/35226256?v=4","gravatar_id":"","url":"https://api.github.com/users/tommaso-borgato","html_url":"https://github.com/tommaso-borgato","followers_url":"https://api.github.com/users/tommaso-borgato/followers","following_url":"https://api.github.com/users/tommaso-borgato/following{/other_user}","gists_url":"https://api.github.com/users/tommaso-borgato/gists{/gist_id}","starred_url":"https://api.github.com/users/tommaso-borgato/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tommaso-borgato/subscriptions","organizations_url":"https://api.github.com/users/tommaso-borgato/orgs","repos_url":"https://api.github.com/users/tommaso-borgato/repos","events_url":"https://api.github.com/users/tommaso-borgato/events{/privacy}","received_events_url":"https://api.github.com/users/tommaso-borgato/received_events","type":"User","site_admin":false},"repo":{"id":125345980,"name":"wildfly","full_name":"tommaso-borgato/wildfly","owner":{"login":"tommaso-borgato","id":35226256,"avatar_url":"https://avatars0.githubusercontent.com/u/35226256?v=4","gravatar_id":"","url":"https://api.github.com/users/tommaso-borgato","html_url":"https://github.com/tommaso-borgato","followers_url":"https://api.github.com/users/tommaso-borgato/followers","following_url":"https://api.github.com/users/tommaso-borgato/following{/other_user}","gists_url":"https://api.github.com/users/tommaso-borgato/gists{/gist_id}","starred_url":"https://api.github.com/users/tommaso-borgato/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tommaso-borgato/subscriptions","organizations_url":"https://api.github.com/users/tommaso-borgato/orgs","repos_url":"https://api.github.com/users/tommaso-borgato/repos","events_url":"https://api.github.com/users/tommaso-borgato/events{/privacy}","received_events_url":"https://api.github.com/users/tommaso-borgato/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/tommaso-borgato/wildfly","description":"WildFly Application Server","fork":true,"url":"https://api.github.com/repos/tommaso-borgato/wildfly","forks_url":"https://api.github.com/repos/tommaso-borgato/wildfly/forks","keys_url":"https://api.github.com/repos/tommaso-borgato/wildfly/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tommaso-borgato/wildfly/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tommaso-borgato/wildfly/teams","hooks_url":"https://api.github.com/repos/tommaso-borgato/wildfly/hooks","issue_events_url":"https://api.github.com/repos/tommaso-borgato/wildfly/issues/events{/number}","events_url":"https://api.github.com/repos/tommaso-borgato/wildfly/events","assignees_url":"https://api.github.com/repos/tommaso-borgato/wildfly/assignees{/user}","branches_url":"https://api.github.com/repos/tommaso-borgato/wildfly/branches{/branch}","tags_url":"https://api.github.com/repos/tommaso-borgato/wildfly/tags","blobs_url":"https://api.github.com/repos/tommaso-borgato/wildfly/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tommaso-borgato/wildfly/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tommaso-borgato/wildfly/git/refs{/sha}","trees_url":"https://api.github.com/repos/tommaso-borgato/wildfly/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tommaso-borgato/wildfly/statuses/{sha}","languages_url":"https://api.github.com/repos/tommaso-borgato/wildfly/languages","stargazers_url":"https://api.github.com/repos/tommaso-borgato/wildfly/stargazers","contributors_url":"https://api.github.com/repos/tommaso-borgato/wildfly/contributors","subscribers_url":"https://api.github.com/repos/tommaso-borgato/wildfly/subscribers","subscription_url":"https://api.github.com/repos/tommaso-borgato/wildfly/subscription","commits_url":"https://api.github.com/repos/tommaso-borgato/wildfly/commits{/sha}","git_commits_url":"https://api.github.com/repos/tommaso-borgato/wildfly/git/commits{/sha}","comments_url":"https://api.github.com/repos/tommaso-borgato/wildfly/comments{/number}","issue_comment_url":"https://api.github.com/repos/tommaso-borgato/wildfly/issues/comments{/number}","contents_url":"https://api.github.com/repos/tommaso-borgato/wildfly/contents/{+path}","compare_url":"https://api.github.com/repos/tommaso-borgato/wildfly/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tommaso-borgato/wildfly/merges","archive_url":"https://api.github.com/repos/tommaso-borgato/wildfly/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tommaso-borgato/wildfly/downloads","issues_url":"https://api.github.com/repos/tommaso-borgato/wildfly/issues{/number}","pulls_url":"https://api.github.com/repos/tommaso-borgato/wildfly/pulls{/number}","milestones_url":"https://api.github.com/repos/tommaso-borgato/wildfly/milestones{/number}","notifications_url":"https://api.github.com/repos/tommaso-borgato/wildfly/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tommaso-borgato/wildfly/labels{/name}","releases_url":"https://api.github.com/repos/tommaso-borgato/wildfly/releases{/id}","deployments_url":"https://api.github.com/repos/tommaso-borgato/wildfly/deployments","created_at":"2018-03-15T09:49:53Z","updated_at":"2018-03-15T09:50:25Z","pushed_at":"2018-03-22T09:10:44Z","git_url":"git://github.com/tommaso-borgato/wildfly.git","ssh_url":"git@github.com:tommaso-borgato/wildfly.git","clone_url":"https://github.com/tommaso-borgato/wildfly.git","svn_url":"https://github.com/tommaso-borgato/wildfly","homepage":"http://wildfly.org","size":181912,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"lgpl-2.1","name":"GNU Lesser General Public License v2.1","spdx_id":"LGPL-2.1","url":"https://api.github.com/licenses/lgpl-2.1"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"wildfly:master","ref":"master","sha":"e6031a66f0f73b284ebd2eebb3e9c77637701a99","user":{"login":"wildfly","id":3066274,"avatar_url":"https://avatars2.githubusercontent.com/u/3066274?v=4","gravatar_id":"","url":"https://api.github.com/users/wildfly","html_url":"https://github.com/wildfly","followers_url":"https://api.github.com/users/wildfly/followers","following_url":"https://api.github.com/users/wildfly/following{/other_user}","gists_url":"https://api.github.com/users/wildfly/gists{/gist_id}","starred_url":"https://api.github.com/users/wildfly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wildfly/subscriptions","organizations_url":"https://api.github.com/users/wildfly/orgs","repos_url":"https://api.github.com/users/wildfly/repos","events_url":"https://api.github.com/users/wildfly/events{/privacy}","received_events_url":"https://api.github.com/users/wildfly/received_events","type":"Organization","site_admin":false},"repo":{"id":764708,"name":"wildfly","full_name":"wildfly/wildfly","owner":{"login":"wildfly","id":3066274,"avatar_url":"https://avatars2.githubusercontent.com/u/3066274?v=4","gravatar_id":"","url":"https://api.github.com/users/wildfly","html_url":"https://github.com/wildfly","followers_url":"https://api.github.com/users/wildfly/followers","following_url":"https://api.github.com/users/wildfly/following{/other_user}","gists_url":"https://api.github.com/users/wildfly/gists{/gist_id}","starred_url":"https://api.github.com/users/wildfly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wildfly/subscriptions","organizations_url":"https://api.github.com/users/wildfly/orgs","repos_url":"https://api.github.com/users/wildfly/repos","events_url":"https://api.github.com/users/wildfly/events{/privacy}","received_events_url":"https://api.github.com/users/wildfly/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/wildfly/wildfly","description":"WildFly Application Server","fork":false,"url":"https://api.github.com/repos/wildfly/wildfly","forks_url":"https://api.github.com/repos/wildfly/wildfly/forks","keys_url":"https://api.github.com/repos/wildfly/wildfly/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wildfly/wildfly/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wildfly/wildfly/teams","hooks_url":"https://api.github.com/repos/wildfly/wildfly/hooks","issue_events_url":"https://api.github.com/repos/wildfly/wildfly/issues/events{/number}","events_url":"https://api.github.com/repos/wildfly/wildfly/events","assignees_url":"https://api.github.com/repos/wildfly/wildfly/assignees{/user}","branches_url":"https://api.github.com/repos/wildfly/wildfly/branches{/branch}","tags_url":"https://api.github.com/repos/wildfly/wildfly/tags","blobs_url":"https://api.github.com/repos/wildfly/wildfly/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wildfly/wildfly/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wildfly/wildfly/git/refs{/sha}","trees_url":"https://api.github.com/repos/wildfly/wildfly/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wildfly/wildfly/statuses/{sha}","languages_url":"https://api.github.com/repos/wildfly/wildfly/languages","stargazers_url":"https://api.github.com/repos/wildfly/wildfly/stargazers","contributors_url":"https://api.github.com/repos/wildfly/wildfly/contributors","subscribers_url":"https://api.github.com/repos/wildfly/wildfly/subscribers","subscription_url":"https://api.github.com/repos/wildfly/wildfly/subscription","commits_url":"https://api.github.com/repos/wildfly/wildfly/commits{/sha}","git_commits_url":"https://api.github.com/repos/wildfly/wildfly/git/commits{/sha}","comments_url":"https://api.github.com/repos/wildfly/wildfly/comments{/number}","issue_comment_url":"https://api.github.com/repos/wildfly/wildfly/issues/comments{/number}","contents_url":"https://api.github.com/repos/wildfly/wildfly/contents/{+path}","compare_url":"https://api.github.com/repos/wildfly/wildfly/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wildfly/wildfly/merges","archive_url":"https://api.github.com/repos/wildfly/wildfly/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wildfly/wildfly/downloads","issues_url":"https://api.github.com/repos/wildfly/wildfly/issues{/number}","pulls_url":"https://api.github.com/repos/wildfly/wildfly/pulls{/number}","milestones_url":"https://api.github.com/repos/wildfly/wildfly/milestones{/number}","notifications_url":"https://api.github.com/repos/wildfly/wildfly/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wildfly/wildfly/labels{/name}","releases_url":"https://api.github.com/repos/wildfly/wildfly/releases{/id}","deployments_url":"https://api.github.com/repos/wildfly/wildfly/deployments","created_at":"2010-07-08T20:46:07Z","updated_at":"2018-03-26T04:35:29Z","pushed_at":"2018-03-26T12:29:53Z","git_url":"git://github.com/wildfly/wildfly.git","ssh_url":"git@github.com:wildfly/wildfly.git","clone_url":"https://github.com/wildfly/wildfly.git","svn_url":"https://github.com/wildfly/wildfly","homepage":"http://wildfly.org","size":182154,"stargazers_count":1968,"watchers_count":1968,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1781,"mirror_url":null,"archived":false,"open_issues_count":33,"license":{"key":"lgpl-2.1","name":"GNU Lesser General Public License v2.1","spdx_id":"LGPL-2.1","url":"https://api.github.com/licenses/lgpl-2.1"},"forks":1781,"open_issues":33,"watchers":1968,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/wildfly/wildfly/pulls/11037"},"html":{"href":"https://github.com/wildfly/wildfly/pull/11037"},"issue":{"href":"https://api.github.com/repos/wildfly/wildfly/issues/11037"},"comments":{"href":"https://api.github.com/repos/wildfly/wildfly/issues/11037/comments"},"review_comments":{"href":"https://api.github.com/repos/wildfly/wildfly/pulls/11037/comments"},"review_comment":{"href":"https://api.github.com/repos/wildfly/wildfly/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/wildfly/wildfly/pulls/11037/commits"},"statuses":{"href":"https://api.github.com/repos/wildfly/wildfly/statuses/f3068e05ee305edf05b02f5e16fb34fab2719162"}},"author_association":"NONE"}}
{"actor":{"display_login":"pferraro"}}