Hi Jon,

I'm not sure what would be the right way to load that code.

But now that you mention it, a CDI extension sounds the proper way to do it. The code now loads properly. Thanks!

Will create a PR soon.

Bruno Baptista
http://twitter.com/brunobat_


On 19/11/18 10:41, Jonathan Gallimore wrote:
I haven't seen the code, so its difficult to suggest anything - where would you expect it to be loaded - in a CDI extension?

On Mon, Nov 19, 2018 at 10:31 AM Bruno Baptista <bruno...@gmail.com <mailto:bruno...@gmail.com>> wrote:

    Hi all,

    I've created a jira for this task to properly track the commits:
    https://issues.apache.org/jira/browse/TOMEE-2278

    Right now I have a problem activating the code... The code is in
    the lib folder but it's not being loaded into the classpath.

    Do I need to create some kind of a service like this?

    Or am I missing to declare it in some xml file?

    Cheers

    Bruno Baptista
    http://twitter.com/brunobat_


    On 18/11/18 12:55, Bruno Baptista wrote:

    Hi All,

    I came up with a test that successfully overrides the original
    /FailsafeExecutionManagerProvider/ Safeguard class.

    It was a bit of a surprise but, in this case, beans.xml is
    useless because "The alternatives that you specify in the
    |beans.xml| file apply only to classes in the same archive." see:
    https://docs.oracle.com/javaee/7/tutorial/cdi-adv002.htm

    Because the beans are in different jar files, priority has to be
    used instead:

    @Priority(Interceptor.Priority.APPLICATION+10)

    The precise priority might need to be fine tuned because of the
    fault tolerance interceptor... Will have to test the final behavior.

    Also, we probably need to reorganize the
    tomee-microprofile-webapp project...
    This is needed because the code overriding the bean needs to be
    in a library and this project only creates a war file, which is
    in fact a container for the bundled libraries. The classes we
    place in there will not be in the final server.

    I'm thinking on something like:

    tomee
    |
    --- tomee-microprofile
                               |
                                --- tomee-microprofile-common (The
    JAR to be included in .../lib)
                               |
                                --- tomee-microprofile-webapp (The
    same as now with an additional dependency)

    Cheers.

    Bruno Baptista
    http://twitter.com/brunobat_


    On 16/11/18 16:26, Bruno Baptista wrote:

    Hi Romain,

    Yeah... @Resource would be the right thing to use in order to
    inject the managed resource. Something like this:

    @Resource(name = "DefaultManagedScheduledExecutorService")
    private ManagedScheduledExecutorService executor;

    Creating the test now.
    Thanks for the help Romain.

    Bruno Baptista
    http://twitter.com/brunobat_


    On 16/11/18 16:07, Romain Manni-Bucau wrote:
    FYI this works:


    @ApplicationScoped
    public class CustomProvider extends FailsafeExecutionManagerProvider {
         @Override
         @Produces
         @Specializes
         @ApplicationScoped
         public ExecutionManager createExecutionManager() {
             return new FailsafeExecutionManager() {
                 @Override // hardcoded impl for testing purposes
                 public Object execute(final InvocationContext 
invocationContext) {
                     return "replaced";
                 }
             };
         }
    }


    Side note: did you want to use @Resource for the executor injection?

    Romain Manni-Bucau
    @rmannibucau<https://twitter.com/rmannibucau>  
<https://twitter.com/rmannibucau>  |  Blog
    <https://rmannibucau.metawerx.net/>  <https://rmannibucau.metawerx.net/>  | 
Old Blog
    <http://rmannibucau.wordpress.com>  <http://rmannibucau.wordpress.com>  | 
Github<https://github.com/rmannibucau>  <https://github.com/rmannibucau>  |
    LinkedIn<https://www.linkedin.com/in/rmannibucau>  
<https://www.linkedin.com/in/rmannibucau>  | Book
    <https://www.packtpub.com/application-development/java-ee-8-high-performance>  
<https://www.packtpub.com/application-development/java-ee-8-high-performance>


    Le ven. 16 nov. 2018 à 14:54, Romain Manni-Bucau<rmannibu...@gmail.com>  
<mailto:rmannibu...@gmail.com>  a
    écrit :

    Hi Bruno,

    I assume the alternative is activated in the beans.xml? (if not try adding
    a @Priority maybe or just drop the annotation which should be useless)

    If it is i'd start by writing a small test (with application composer) to
    check if it is a bug in tomee cause this is how it must work

    Romain Manni-Bucau
    @rmannibucau<https://twitter.com/rmannibucau>  
<https://twitter.com/rmannibucau>  |  Blog
    <https://rmannibucau.metawerx.net/>  <https://rmannibucau.metawerx.net/>  | 
Old Blog
    <http://rmannibucau.wordpress.com>  <http://rmannibucau.wordpress.com>  | 
Github
    <https://github.com/rmannibucau>  <https://github.com/rmannibucau>  | 
LinkedIn
    <https://www.linkedin.com/in/rmannibucau>  
<https://www.linkedin.com/in/rmannibucau>  | Book
    <https://www.packtpub.com/application-development/java-ee-8-high-performance>  
<https://www.packtpub.com/application-development/java-ee-8-high-performance>


    Le ven. 16 nov. 2018 à 12:44, Bruno Baptista<bruno...@gmail.com>  
<mailto:bruno...@gmail.com>  a
    écrit :

    Hi Roman,

    This is what I did and it doesn't work. The original bean is always
    picked up:

    @Specializes@Alternative@ApplicationScopedpublic class 
FailsafeContainerExecutionManagerProvider extends 
FailsafeExecutionManagerProvider {

         @Inject    private ManagedScheduledExecutorService executor;

         @Produces    @ApplicationScoped    @Override    public 
ExecutionManager createExecutionManager() throws Exception {


             final MicroprofileAnnotationMapper mapper = 
MicroprofileAnnotationMapper.getInstance();
             final DefaultExecutorServiceProvider executorServiceProvider = new 
DefaultExecutorServiceProvider(executor);
             final BulkheadManagerImpl bulkheadManager = new 
BulkheadManagerImpl();
             final FailsafeCircuitBreakerManager circuitBreakerManager = new 
FailsafeCircuitBreakerManager();
             final FailsafeRetryManager retryManager = new 
FailsafeRetryManager();

             return new FailsafeExecutionManager(
                     mapper,
                     bulkheadManager,
                     circuitBreakerManager,
                     retryManager,
                     new ExecutionPlanFactory(circuitBreakerManager, 
retryManager, bulkheadManager, mapper,
                             executorServiceProvider),
                     executorServiceProvider);
         }
    }


    I feel that this needs to be done in a different way... Would you be able
    to point me to a similar override currently being done?

    Cheers
    Bruno Baptista
    https://twitter.com/brunobat_
    http://tomitribe.com
    https://tribestream.io
    Bruno Baptista
    http://twitter.com/brunobat_


    On 16/11/18 10:28, Romain Manni-Bucau wrote:

    Hi Bruno,

    it is a palin bean so @Specializes works, did you put it on the method?

    Romain Manni-Bucau
    @rmannibucau<https://twitter.com/rmannibucau>  <https://twitter.com/rmannibucau>  <https://twitter.com/rmannibucau>  
<https://twitter.com/rmannibucau>  |  Blog<https://rmannibucau.metawerx.net/>  <https://rmannibucau.metawerx.net/>  <https://rmannibucau.metawerx.net/> 
 <https://rmannibucau.metawerx.net/>  | Old Blog<http://rmannibucau.wordpress.com>  <http://rmannibucau.wordpress.com>  
<http://rmannibucau.wordpress.com>  <http://rmannibucau.wordpress.com>  | Github<https://github.com/rmannibucau>  <https://github.com/rmannibucau>  
<https://github.com/rmannibucau>  <https://github.com/rmannibucau>  |
    LinkedIn<https://www.linkedin.com/in/rmannibucau>  <https://www.linkedin.com/in/rmannibucau>  
<https://www.linkedin.com/in/rmannibucau>  <https://www.linkedin.com/in/rmannibucau>  | 
Book<https://www.packtpub.com/application-development/java-ee-8-high-performance>  
<https://www.packtpub.com/application-development/java-ee-8-high-performance>  
<https://www.packtpub.com/application-development/java-ee-8-high-performance>  
<https://www.packtpub.com/application-development/java-ee-8-high-performance>


    Le ven. 16 nov. 2018 à 11:00, Bruno Baptista<bruno...@gmail.com>  
<mailto:bruno...@gmail.com>  <bruno...@gmail.com>  <mailto:bruno...@gmail.com>  a 
écrit :


    Hi all,

    We have a problem with the integration of the Safeguard Fault Tolerance
    library on TomEE 8 and I need help to solve it. This is a follow up to
    the original email thread, from Oct 3, in the Geronimo mailing list,
    where we decided to do perform the override in the container side.

    I need to override the starting point for the library, originally here:

    
https://github.com/apache/geronimo-safeguard/blob/master/safeguard-impl/src/main/java/org/apache/safeguard/impl/cdi/FailsafeExecutionManagerProvider.java

    Because it's not using a managed executor service from TomEE... Like
    this one: "java:comp/DefaultManagedScheduledExecutorService"

    I Expect to do the wiring in here
    .../apache-tomee/tomee/tomee-microprofile-webapp/src

    Like using a @Specializes bean or something, but I think we cannot do
    that there. Could someone help me wire up this new bean?

    I had a PR to fix this the lib itself but it was decided not to move
    with it. For the curious, it's 
here:https://github.com/apache/geronimo-safeguard/pull/2

    Cheers
    --
    Bruno Baptistahttp://twitter.com/brunobat_  <http://twitter.com/brunobat_>



Reply via email to