This repository was archived by the owner on May 28, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
JERSEY-2291: Enable HK2 Immediate scope to support HK2 @Immediate services. #173
Merged
Merged
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
c492d6c
JERSEY-2291: Enable HK2 Immediate scope to support HK2 @Immediate ser…
jordmoz e60d327
JERSEY-2291: Add test case to verify Immediate services are started i…
jordmoz 82bd694
JERSEY-2291: Address review comments.
jordmoz d56d37a
JERSEY-2291: Update ShutdownHookLeakTest to fix newly failing test.
jordmoz 3e9fccb
JERSEY-2291: Another attempt at fixing the ShutdownHookLeakTest.
jordmoz File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
108 changes: 108 additions & 0 deletions
108
core-common/src/test/java/org/glassfish/jersey/internal/inject/InjectionsTest.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,108 @@ | ||
| /* | ||
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | ||
| * | ||
| * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. | ||
| * | ||
| * The contents of this file are subject to the terms of either the GNU | ||
| * General Public License Version 2 only ("GPL") or the Common Development | ||
| * and Distribution License("CDDL") (collectively, the "License"). You | ||
| * may not use this file except in compliance with the License. You can | ||
| * obtain a copy of the License at | ||
| * http://glassfish.java.net/public/CDDL+GPL_1_1.html | ||
| * or packager/legal/LICENSE.txt. See the License for the specific | ||
| * language governing permissions and limitations under the License. | ||
| * | ||
| * When distributing the software, include this License Header Notice in each | ||
| * file and include the License file at packager/legal/LICENSE.txt. | ||
| * | ||
| * GPL Classpath Exception: | ||
| * Oracle designates this particular file as subject to the "Classpath" | ||
| * exception as provided by Oracle in the GPL Version 2 section of the License | ||
| * file that accompanied this code. | ||
| * | ||
| * Modifications: | ||
| * If applicable, add the following below the License Header, with the fields | ||
| * enclosed by brackets [] replaced by your own identifying information: | ||
| * "Portions Copyright [year] [name of copyright owner]" | ||
| * | ||
| * Contributor(s): | ||
| * If you wish your version of this file to be governed by only the CDDL or | ||
| * only the GPL Version 2, indicate your decision by adding "[Contributor] | ||
| * elects to include this software in this distribution under the [CDDL or GPL | ||
| * Version 2] license." If you don't indicate a single choice of license, a | ||
| * recipient has the option to distribute your version of this file under | ||
| * either the CDDL, the GPL Version 2 or to extend the choice of license to | ||
| * its licensees as provided above. However, if you add GPL Version 2 code | ||
| * and therefore, elected the GPL Version 2 license, then the option applies | ||
| * only if the new code is made subject to such option by the copyright | ||
| * holder. | ||
| */ | ||
|
|
||
| package org.glassfish.jersey.internal.inject; | ||
|
|
||
| import static org.junit.Assert.assertTrue; | ||
|
|
||
| import java.util.concurrent.CountDownLatch; | ||
| import java.util.concurrent.TimeUnit; | ||
|
|
||
| import javax.inject.Inject; | ||
|
|
||
| import org.glassfish.hk2.api.Immediate; | ||
| import org.glassfish.hk2.api.ServiceLocator; | ||
| import org.glassfish.hk2.utilities.binding.AbstractBinder; | ||
| import org.junit.Test; | ||
|
|
||
| /** | ||
| * Test for the {@link Injections} class. | ||
| * | ||
| * @author Jord Sonneveld (jord@moz.com) | ||
| * | ||
| */ | ||
| public class InjectionsTest { | ||
|
|
||
| /** | ||
| * Verify that services marked with the HK2 Immediate annotation are indeed | ||
| * created "immediately" (or at least "soon"). | ||
| * | ||
| * Because Immediate services are instantiated in a separate thread, we use | ||
| * a {@link CountDownLatch} to wait for the service to be created. | ||
| * | ||
| * After the {@link ServiceLocator} is created, we specifically do not call | ||
| * any more methods on it: the locator must instantiate the Immediate | ||
| * service without any further prompting to the locator. | ||
| * | ||
| * @throws InterruptedException if awaiting on the latch is interrupted. | ||
| */ | ||
| @Test | ||
| public void testHK2ImmediateAnnotation() throws InterruptedException { | ||
| final CountDownLatch latch = new CountDownLatch(1); | ||
|
|
||
| @SuppressWarnings("unused") // It is unused by design | ||
| ServiceLocator sl = Injections.createLocator(new AbstractBinder() { | ||
| @Override | ||
| protected void configure() { | ||
| bind(latch).to(CountDownLatch.class); | ||
| bind(ImmediateMe.class).to(ImmediateMe.class).in( | ||
| Immediate.class); | ||
| } | ||
| }); | ||
|
|
||
| // 10 seconds is a LONG time. It should be faster than that. However, 10 | ||
| // seconds gives us a reasonable upper limit to wait in case the test | ||
| // fails. | ||
| assertTrue("Latch should be unlocked within 10 seconds.", | ||
| latch.await(10, TimeUnit.SECONDS)); | ||
| } | ||
|
|
||
| /** | ||
| * Helper class for testing Immediate services. | ||
| * | ||
| */ | ||
| public static final class ImmediateMe { | ||
| @Inject | ||
| public ImmediateMe(CountDownLatch latch) { | ||
| latch.countDown(); | ||
| } | ||
| } | ||
|
|
||
| } | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing copyright header. Please use a header e.g. from here: https://github.com/jersey/jersey/blob/master/core-common/src/test/java/org/glassfish/jersey/process/internal/ExecutorProvidersTest.java
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.