Skip to content
This repository was archived by the owner on May 28, 2018. It is now read-only.

Commit 36e5892

Browse files
committed
Hystrix based resilient connector
1 parent c85211c commit 36e5892

File tree

10 files changed

+1525
-0
lines changed

10 files changed

+1525
-0
lines changed

Diff for: connectors/pom.xml

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
<module>grizzly-connector</module>
6262
<module>jetty-connector</module>
6363
<module>netty-connector</module>
64+
<module>resilient-connector</module>
6465
</modules>
6566

6667
<dependencies>

Diff for: connectors/resilient-connector/pom.xml

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2+
<modelVersion>4.0.0</modelVersion>
3+
<parent>
4+
<groupId>org.glassfish.jersey.connectors</groupId>
5+
<artifactId>project</artifactId>
6+
<version>2.24-SNAPSHOT</version>
7+
</parent>
8+
<artifactId>jersey-resilient-connector</artifactId>
9+
10+
<description>Jersey Resilient Client Transport via Hystrix</description>
11+
12+
<properties>
13+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
14+
<hystrix.core.version>1.5.5</hystrix.core.version>
15+
</properties>
16+
17+
<dependencies>
18+
<dependency>
19+
<groupId>com.netflix.hystrix</groupId>
20+
<artifactId>hystrix-core</artifactId>
21+
<version>${hystrix.core.version}</version>
22+
</dependency>
23+
<dependency>
24+
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
25+
<artifactId>jersey-test-framework-provider-bundle</artifactId>
26+
<version>${project.version}</version>
27+
<type>pom</type>
28+
<scope>test</scope>
29+
</dependency>
30+
<dependency>
31+
<groupId>org.glassfish.jersey.connectors</groupId>
32+
<artifactId>jersey-grizzly-connector</artifactId>
33+
<version>${project.version}</version>
34+
<scope>test</scope>
35+
</dependency>
36+
</dependencies>
37+
38+
<build>
39+
<plugins>
40+
<plugin>
41+
<groupId>com.sun.istack</groupId>
42+
<artifactId>maven-istack-commons-plugin</artifactId>
43+
<inherited>true</inherited>
44+
</plugin>
45+
<plugin>
46+
<groupId>org.codehaus.mojo</groupId>
47+
<artifactId>build-helper-maven-plugin</artifactId>
48+
<inherited>true</inherited>
49+
</plugin>
50+
<plugin>
51+
<groupId>org.apache.maven.plugins</groupId>
52+
<artifactId>maven-compiler-plugin</artifactId>
53+
</plugin>
54+
</plugins>
55+
</build>
56+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*
2+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3+
*
4+
* Copyright (c) 2010-2016 Oracle and/or its affiliates. All rights reserved.
5+
*
6+
* The contents of this file are subject to the terms of either the GNU
7+
* General Public License Version 2 only ("GPL") or the Common Development
8+
* and Distribution License("CDDL") (collectively, the "License"). You
9+
* may not use this file except in compliance with the License. You can
10+
* obtain a copy of the License at
11+
* http://glassfish.java.net/public/CDDL+GPL_1_1.html
12+
* or packager/legal/LICENSE.txt. See the License for the specific
13+
* language governing permissions and limitations under the License.
14+
*
15+
* When distributing the software, include this License Header Notice in each
16+
* file and include the License file at packager/legal/LICENSE.txt.
17+
*
18+
* GPL Classpath Exception:
19+
* Oracle designates this particular file as subject to the "Classpath"
20+
* exception as provided by Oracle in the GPL Version 2 section of the License
21+
* file that accompanied this code.
22+
*
23+
* Modifications:
24+
* If applicable, add the following below the License Header, with the fields
25+
* enclosed by brackets [] replaced by your own identifying information:
26+
* "Portions Copyright [year] [name of copyright owner]"
27+
*
28+
* Contributor(s):
29+
* If you wish your version of this file to be governed by only the CDDL or
30+
* only the GPL Version 2, indicate your decision by adding "[Contributor]
31+
* elects to include this software in this distribution under the [CDDL or GPL
32+
* Version 2] license." If you don't indicate a single choice of license, a
33+
* recipient has the option to distribute your version of this file under
34+
* either the CDDL, the GPL Version 2 or to extend the choice of license to
35+
* its licensees as provided above. However, if you add GPL Version 2 code
36+
* and therefore, elected the GPL Version 2 license, then the option applies
37+
* only if the new code is made subject to such option by the copyright
38+
* holder.
39+
*/
40+
package org.glassfish.jersey.resilient.connector;
41+
42+
import org.glassfish.jersey.client.ClientRequest;
43+
44+
import com.netflix.hystrix.HystrixCommandGroupKey;
45+
import com.netflix.hystrix.HystrixCommandKey;
46+
import com.netflix.hystrix.HystrixCommandProperties;
47+
import com.netflix.hystrix.HystrixCommandProperties.ExecutionIsolationStrategy;
48+
import com.netflix.hystrix.HystrixCommandProperties.Setter;
49+
50+
/**
51+
* Basic implementation of {@link ResilientConnectorProvider.HystrixCommandConfigProvider} which provides
52+
* configurations for {@link HystrixCommand} and {@link HystrixObservableCommand} with the following default configurations.
53+
*
54+
* <ul>
55+
* <li>Command name - {@code request.getUri().getPath()}</li>
56+
* <li>SEMAPHORE execution isolation strategy.</li>
57+
* <li>Disabled execution timeout.</li>
58+
* </ul>
59+
*
60+
* @author Joel Chengottusseriyil
61+
*
62+
* @see com.netflix.hystrix.HystrixCommandProperties.ExecutionIsolationStrategy
63+
*/
64+
class DefaultHystrixCommandConfigProvider implements ResilientConnectorProvider.HystrixCommandConfigProvider {
65+
66+
private static final String HYSTRIX_OBSERVABLE_COMMAND_GROUP_KEY = "JerseyClientHystrixObservableCommand";
67+
private static final String HYSTRIX_COMMAND_GROUP_KEY = "JerseyClientHystrixCommand";
68+
69+
@Override
70+
public String commandName(ClientRequest requestContext) {
71+
return requestContext.getUri().getPath();
72+
}
73+
74+
@Override
75+
public com.netflix.hystrix.HystrixCommand.Setter commandConfig(ClientRequest requestContext) {
76+
return com.netflix.hystrix.HystrixCommand.Setter
77+
.withGroupKey(HystrixCommandGroupKey.Factory.asKey(HYSTRIX_COMMAND_GROUP_KEY))
78+
.andCommandKey(HystrixCommandKey.Factory.asKey(commandName(requestContext)))
79+
.andCommandPropertiesDefaults(defaultCommandProperties());
80+
}
81+
82+
@Override
83+
public com.netflix.hystrix.HystrixObservableCommand.Setter observableCommandConfig(ClientRequest requestContext) {
84+
return com.netflix.hystrix.HystrixObservableCommand.Setter
85+
.withGroupKey(HystrixCommandGroupKey.Factory.asKey(HYSTRIX_OBSERVABLE_COMMAND_GROUP_KEY))
86+
.andCommandKey(HystrixCommandKey.Factory.asKey(commandName(requestContext)))
87+
.andCommandPropertiesDefaults(defaultCommandProperties());
88+
}
89+
90+
/**
91+
* Gets an instance of {@link HystrixCommandProperties.Setter} with the following default configurations,
92+
* <ul>
93+
* <li>SEMAPHORE execution isolation strategy.</li>
94+
* <li>Disabled execution timeout.</li>
95+
* </ul>
96+
*
97+
* @return An instance of Hystrix command properties.
98+
*/
99+
private static Setter defaultCommandProperties() {
100+
return HystrixCommandProperties.Setter()
101+
.withExecutionIsolationStrategy(ExecutionIsolationStrategy.SEMAPHORE)
102+
.withExecutionTimeoutEnabled(false);
103+
}
104+
}

0 commit comments

Comments
 (0)