Commit 5c5a48bab3e622e4a04c02738293e5bfc0cd3d42
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
Showing
2 changed files
with
70 additions
and
11 deletions
Show diff stats
documentation/reference/pt-BR/gerenciamento.xml
| @@ -171,6 +171,50 @@ public class MonitorLogin{ | @@ -171,6 +171,50 @@ public class MonitorLogin{ | ||
| 171 | <para>Como é possível ver, classes anotadas com <emphasis>@ManagementController</emphasis> podem ser injetadas em qualquer ponto do código. Valores definidos | 171 | <para>Como é possível ver, classes anotadas com <emphasis>@ManagementController</emphasis> podem ser injetadas em qualquer ponto do código. Valores definidos |
| 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á | 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 | a quantidade de logins efetuados no momento da consulta.</para> | 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 | </section> | 218 | </section> |
| 175 | 219 | ||
| 176 | <section> | 220 | <section> |
| @@ -200,22 +244,22 @@ public class MonitorLogin{ | @@ -200,22 +244,22 @@ public class MonitorLogin{ | ||
| 200 | individualmente, as classes monitoradas serão então expostas para todas as extensões escolhidas.</para> | 244 | individualmente, as classes monitoradas serão então expostas para todas as extensões escolhidas.</para> |
| 201 | </tip> | 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 | }]]></programlisting> | 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 | <mediaobject> | 263 | <mediaobject> |
| 220 | <imageobject> | 264 | <imageobject> |
| 221 | <imagedata fileref="images/jmx-jconsole-example.png" width="90%" /> | 265 | <imagedata fileref="images/jmx-jconsole-example.png" width="90%" /> |
| @@ -223,6 +267,21 @@ public class BookmarkMonitor { | @@ -223,6 +267,21 @@ public class BookmarkMonitor { | ||
| 223 | <textobject><phrase>JConsole acessando a aplicação <emphasis>Bookmark</emphasis></phrase></textobject> | 267 | <textobject><phrase>JConsole acessando a aplicação <emphasis>Bookmark</emphasis></phrase></textobject> |
| 224 | </mediaobject> | 268 | </mediaobject> |
| 225 | </figure> | 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 | </section> | 285 | </section> |
| 227 | 286 | ||
| 228 | 287 |
documentation/reference/pt-BR/images/jmx-jconsole-example.png