Commit 5c5a48bab3e622e4a04c02738293e5bfc0cd3d42

Authored by Dancovich
1 parent 605c06cd
Exists in master

IN PROGRESS - issue FWK-123: Revisar e atualizar documentação do

Framework 2.4.0 
https://demoiselle.atlassian.net/browse/FWK-123
documentation/reference/pt-BR/gerenciamento.xml
... ... @@ -171,6 +171,50 @@ public class MonitorLogin{
171 171 <para>Como é possível ver, classes anotadas com <emphasis>@ManagementController</emphasis> podem ser injetadas em qualquer ponto do código. Valores definidos
172 172 para seus atributos retêm seu estado, então um cliente que acesse remotamente o sistema e monitore o valor do atributo <emphasis>contadorLogin</emphasis> verá
173 173 a quantidade de logins efetuados no momento da consulta.</para>
  174 +
  175 + <section>
  176 + <title>Enviando notificações da aplicação</title>
  177 +
  178 + <para>
  179 + É comum que aplicações monitoradas permaneçam em estado de espera - é função do cliente de monitoração acessar a aplicação e obter
  180 + as informações necessárias.
  181 + </para>
  182 +
  183 + <para>
  184 + No entanto existem casos onde é necessário que a aplicação comunique clientes de eventos ocorridos no sistema. Um exemplo é um monitor
  185 + de espaço em disco que envia um alerta quando esse espaço for menor que 20% do total.
  186 + </para>
  187 +
  188 + <para>
  189 + Para essa funcionalidade o <emphasis>Demoiselle Framework</emphasis> disponibiliza o utilitário <emphasis>NotificationManager</emphasis>, que
  190 + pode ser injetado em sua aplicação a qualquer momento para notificar clientes externos de eventos importantes.
  191 + </para>
  192 +
  193 + <para>Considere o exemplo abaixo:</para>
  194 +
  195 + <programlisting role="JAVA"><![CDATA[
  196 +public class DiskWritter{
  197 +
  198 + @Inject
  199 + private NotificationManager notificationManager;
  200 +
  201 + public void writeFile(byte[] data , File fileToWrite){
  202 + // ... implementação da escrita de arquivo
  203 +
  204 + if (fileToWrite.getUsableSpace() / (float)fileToWrite.getTotalSpace() <= 0.2f){
  205 + Notification notification = new GenericNotification("O espaço disponível no disco é inferior a 20% do total");
  206 + notificationManager.sendNotification( notification );
  207 + }
  208 + }
  209 +}]]></programlisting>
  210 +
  211 + <para>
  212 + Nesse exemplo podemos ver como enviar uma notificação em decorrência de um evento gerado pela aplicação. Dessa forma
  213 + a aplicação pode comunicar a um agente de monitoração sobre o espaço disponível no disco, ao invés de aguardar que o agente
  214 + conecte-se à aplicação para solicitar essa informação explicitamente.
  215 + </para>
  216 + </section>
  217 +
174 218 </section>
175 219  
176 220 <section>
... ... @@ -200,22 +244,22 @@ public class MonitorLogin{
200 244 individualmente, as classes monitoradas serão então expostas para todas as extensões escolhidas.</para>
201 245 </tip>
202 246  
203   - <para>A figura <xref linkend="exemplo_jconsole" /> mostra como uma classe monitorada na aplicação <emphasis>Bookmark</emphasis> é exibida no <emphasis>JConsole</emphasis>.</para>
  247 + <para>A figura <xref linkend="exemplo_jconsole" /> mostra como uma classe monitorada é exibida no <emphasis>JConsole</emphasis>.</para>
204 248  
205   - <programlisting role="JAVA"><![CDATA[
206   -@ManagementController
207   -public class BookmarkMonitor {
  249 + <programlisting role="JAVA"><![CDATA[@ManagementController
  250 +public class HelloWorldManager {
  251 +
  252 + @Inject
  253 + private HelloWorld helloWorld;
208 254  
209   - @Inject
210   - private BookmarkDAO bookmarkDAO;
  255 + @ManagedOperation(type=OperationType.ACTION)
  256 + public void saySomething(String whatToSay){
  257 + helloWorld.say(whatToSay);
  258 + }
211 259  
212   - @ManagedOperation(type=OperationType.INFO , description="Informa quantos bookmarks estao salvos no sistema")
213   - public int countSavedBookmarks(){
214   - return bookmarkDAO.findAll().size();
215   - }
216 260 }]]></programlisting>
217 261  
218   - <figure id="exemplo_jconsole"><title>JConsole acessando a aplicação <emphasis>Bookmark</emphasis></title>
  262 + <figure id="exemplo_jconsole"><title>JConsole acessando uma aplicação monitorada</title>
219 263 <mediaobject>
220 264 <imageobject>
221 265 <imagedata fileref="images/jmx-jconsole-example.png" width="90%" />
... ... @@ -223,6 +267,21 @@ public class BookmarkMonitor {
223 267 <textobject><phrase>JConsole acessando a aplicação <emphasis>Bookmark</emphasis></phrase></textobject>
224 268 </mediaobject>
225 269 </figure>
  270 +
  271 + <para>
  272 + É possível perceber os seguintes elementos nessa imagem:
  273 + <itemizedlist>
  274 + <listitem>Uma classe gerenciada <emphasis>HelloWorldManager</emphasis> com uma operação chamada <emphasis>saySomething</emphasis></listitem>
  275 + <listitem>Uma classe geradora de notificações <emphasis>NotificationBroadcaster</emphasis> responsável por converter as notificações para a API JMX</listitem>
  276 + </itemizedlist>
  277 + </para>
  278 +
  279 + <para>
  280 + Através do <emphasis>JConsole</emphasis> é possível invocar comandos e acessar atributos em todas as classes anotadas com <emphasis>@ManagementController</emphasis>
  281 + em aplicações que usam o <emphasis>demoiselle-jmx</emphasis>. Também é possível inscrever-se às notificações enviadas por <emphasis>NotificationBroadcaster</emphasis>
  282 + e receber todas as notificações enviadas pela aplicação.
  283 + </para>
  284 +
226 285 </section>
227 286  
228 287  
... ...
documentation/reference/pt-BR/images/jmx-jconsole-example.png

290 KB | W: | H:

50.9 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin