[Dica rápida de CDI] – Observando o início

As vezes precisamos executar alguns comandos quando nossa aplicação é iniciada, portanto quem usa algum framework moderno consegue saber quando sua app subiu e com o CDI não é diferente.

CDI contém uma funcionalidade de ajuda na implementação do padrão de projeto Observer.

A Própria especificação usa esse padrão em suas rotinas internas, vamos usar umas dessas chamadas para observarmos quando o CDI for carregado ao levantar o servidor de aplicação, com o código abaixo fica fácil:

<span>@ApplicationScoped</span>
<span>public</span> <span>class</span> <span>StartSchedule</span> <span>{</span>
<span>public</span> <span>void</span> <span>init</span><span>(</span><span>@Observes</span> <span>@Initialized</span><span>(</span><span>ApplicationScoped</span><span>.</span><span>class</span><span>)</span> <span>Object</span> <span>init</span><span>)</span> <span>{</span>
<span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"CDI Iniciado"</span><span>);</span>
<span>}</span>
<span>public</span> <span>void</span> <span>destroy</span><span>(</span><span>@Observes</span> <span>@Destroyed</span><span>(</span><span>ApplicationScoped</span><span>.</span><span>class</span><span>)</span> <span>Object</span> <span>init</span><span>)</span> <span>{</span>
<span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"CDI Finalizado"</span><span>);</span>
<span>}</span>
<span>}</span>
<span>@ApplicationScoped</span>
<span>public</span> <span>class</span> <span>StartSchedule</span> <span>{</span>

    <span>public</span> <span>void</span> <span>init</span><span>(</span><span>@Observes</span> <span>@Initialized</span><span>(</span><span>ApplicationScoped</span><span>.</span><span>class</span><span>)</span> <span>Object</span> <span>init</span><span>)</span> <span>{</span>

        <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"CDI Iniciado"</span><span>);</span>
    <span>}</span>

    <span>public</span> <span>void</span> <span>destroy</span><span>(</span><span>@Observes</span> <span>@Destroyed</span><span>(</span><span>ApplicationScoped</span><span>.</span><span>class</span><span>)</span> <span>Object</span> <span>init</span><span>)</span> <span>{</span>

        <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"CDI Finalizado"</span><span>);</span>
    <span>}</span>
<span>}</span>
@ApplicationScoped public class StartSchedule { public void init(@Observes @Initialized(ApplicationScoped.class) Object init) { System.out.println("CDI Iniciado"); } public void destroy(@Observes @Destroyed(ApplicationScoped.class) Object init) { System.out.println("CDI Finalizado"); } }

Enter fullscreen mode Exit fullscreen mode

Pronto agora podemos fazer alguma ação pois o contexto do CDI foi levantado e podemos usar todo o seu poder.

Cuidados

Quando usamos o método acima para observar a inicialização do CDI outros passos da inicialização só iram continuar após a conclusão deste ou seja o uso errado pode atrapalhar a inicialização completa da sua APP.

Podemos diminuir um pouco esse efeito se colocarmos toda a implementação de negócio para ser executada em outra thread, como no exemplo abaixo:

<span>....</span>
<span>public</span> <span>void</span> <span>init</span><span>(</span><span>@Observes</span> <span>@Initialized</span><span>(</span><span>ApplicationScoped</span><span>.</span><span>class</span><span>)</span> <span>Object</span> <span>init</span><span>)</span> <span>{</span>
<span>new</span> <span>Thread</span><span>(</span><span>new</span> <span>Runnable</span><span>()</span> <span>{</span>
<span>@Override</span>
<span>public</span> <span>void</span> <span>run</span><span>(){</span>
<span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"CDI Iniciado"</span><span>);</span>
<span>}</span>
<span>}).</span><span>start</span><span>();</span>
<span>}</span>
<span>...</span>
<span>....</span>

<span>public</span> <span>void</span> <span>init</span><span>(</span><span>@Observes</span> <span>@Initialized</span><span>(</span><span>ApplicationScoped</span><span>.</span><span>class</span><span>)</span> <span>Object</span> <span>init</span><span>)</span> <span>{</span>

        <span>new</span> <span>Thread</span><span>(</span><span>new</span> <span>Runnable</span><span>()</span> <span>{</span>
            <span>@Override</span>
            <span>public</span> <span>void</span> <span>run</span><span>(){</span>
                <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"CDI Iniciado"</span><span>);</span>
            <span>}</span>
        <span>}).</span><span>start</span><span>();</span>

    <span>}</span>
<span>...</span>
.... public void init(@Observes @Initialized(ApplicationScoped.class) Object init) { new Thread(new Runnable() { @Override public void run(){ System.out.println("CDI Iniciado"); } }).start(); } ...

Enter fullscreen mode Exit fullscreen mode

Conclusão

CDI é uma poderosa ferramenta para ajudar na produtividade do desenvolvimento de soluções usando JavaEE/JarkataEE , essa é apenas uma das diversas funcionalidades que o CDI pode oferecer.

原文链接:[Dica rápida de CDI] – Observando o início

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
To the path of timber, iron and steel will never regret bright spray of molten steel was abandoned.
为了走上成材的道路,钢铁决不惋惜璀璨的钢花被遗弃
评论 抢沙发

请登录后发表评论

    暂无评论内容