68
1 April 05 Prof. Ismael H. F. Santos - [email protected] 1 Modulo IIa Extra: Ant, Logging, Object & JavaDoc Professores Eduardo Bezerra – [email protected] Ismael H F Santos – [email protected] Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 2 Linguagem de Programação JAVA Ismael H. F. Santos, Apostila UniverCidade, 2002 The Java Tutorial: A practical guide for programmers Tutorial on-line: http://java.sun.com/docs/books/tutorial Java in a Nutshell David Flanagan, O´Reilly & Associates Just Java 2 Mark C. Chan, Steven W. Griffith e Anthony F. Iasi, Makron Books. Java 1.2 Laura Lemay & Rogers Cadenhead, Editora Campos Bibliografia

Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

  • Upload
    lynhu

  • View
    245

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

1

April 05 Prof. Ismael H. F. Santos - [email protected] 1

Modulo IIaExtra: Ant, Logging, Object & JavaDoc

ProfessoresEduardo Bezerra – [email protected]

Ismael H F Santos – [email protected]

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 2

Linguagem de Programação JAVAIsmael H. F. Santos, Apostila UniverCidade, 2002

The Java Tutorial: A practical guide for programmersTutorial on-line: http://java.sun.com/docs/books/tutorial

Java in a NutshellDavid Flanagan, O´Reilly & Associates

Just Java 2Mark C. Chan, Steven W. Griffith e Anthony F. Iasi, Makron

Books.Java 1.2

Laura Lemay & Rogers Cadenhead, Editora Campos

Bibliografia

Page 2: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

2

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 3

Bibliografia

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 4

LivrosCore Java 2, Cay S. Horstmann, Gary Cornell

Volume 1 (Fundamentos)Volume 2 (Características Avançadas)

Java: Como Programar, Deitel & DeitelThinking in Patterns with JAVA, Bruce Eckel

Gratuito. http://www.mindview.net/Books/TIJ/

Page 3: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

3

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 5

Ementa

Princípios e Padrões de Projeto de SWFerramenta para construção de Aplicações - AntLoggingClasse ObjectDocumentação de código com JavaDOC

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 6

Apache Ant

POO-Java

Page 4: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

4

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 7

O que é o Ant?

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 8

Para que serve ?

Page 5: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

5

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 9

Como funciona

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 10

Como funciona

Page 6: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

6

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 11

Buildfile

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 12

Buildfile

Page 7: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

7

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 13

Exemplo

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 14

Dependências

Page 8: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

8

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 15

Tarefas Condicionadas

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 16

O que se pode fazer com Ant ?

Page 9: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

9

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 17

Tarefas úteis

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 18

Tarefas úteis

Page 10: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

10

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 19

Tipos de Dados

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 20

Mais tarefas úteis

Page 11: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

11

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 21

Propriedades

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 22

Propriedades especiais

Page 12: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

12

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 23

Mais tipos de dados

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 24

Ainda mais tipos de dados ....

Page 13: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

13

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 25

Tipos de dados: seletores

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 26

Tipos de dados: filtros

Page 14: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

14

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 27

Tarefas úteis para Execução

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 28

Tarefas úteis para J2EE

Page 15: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

15

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 29

Tarefas úteis para extensão XDoclet

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 30

Tarefas úteis para Rede

Page 16: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

16

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 31

Tarefas úteis para XSLT

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 32

Tarefas úteis para JDBC

Page 17: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

17

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 33

Tarefas úteis para chamadas externas

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 34

Efeitos Sonoros

Page 18: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

18

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 35

usando extensão XML

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 36

Gerenciando projetos com Ant

Page 19: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

19

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 37

Targets Básicos do build.xml

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 38

Exemplo de Projeto

Page 20: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

20

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 39

Construindo aplicações com Ant

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 40

Aplicação Gráfica Executável com Ant

Page 21: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

21

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 41

Buildfile para aplicação Web

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 42

Buildfile para RMI-IIOP

Page 22: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

22

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 43

Buildfile para aplicação EJB

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 44

Buildfile para transformação XSL

Page 23: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

23

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 45

Ant Programável

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 46

Ant Programável – Exemplo

Page 24: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

24

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 47

Ant Programável – Exemplo

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 48

Integração com outras aplicações

Page 25: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

25

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 49

Integração com outros IDEs

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 50

Integração com JEdit

Page 26: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

26

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 51

Conclusões

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 52

Exercício

Page 27: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

27

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 53

Exercício - Diagrama

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 54

JSELogging

POO-Java

Page 28: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

28

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 55

Logging

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 56

Logging

Logging: manutenção do registro do comportamento de uma aplicação.

Por que realizar logging? Mensagens de log podem ajudar na depuraçãoda aplicação.Mensagens de log fornecem o contexto da execução de uma aplicação

Page 29: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

29

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 57

Logging

Quando utilizar logging? Na fase de desenvolvimento: para depurar a aplicação.

O que houver de errado? Onde ocorreu? Por que ocorreu?

Na fase de produção: ajuda a resolver problemas de execução.

(Desvantagem) instruções de log têm o potencial de aumentar o tamanho do executável e de reduzir a velocidade da aplicação.

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 58

O componente Logger

O ponto de entrada para o logging é um objeto Logger.Criamos um objeto dessa classe e requisitamos a ele que faça o log de mensagens.Há diversos métodos de log (i.e., métodos que aceitam como argumento uma mensagem de log) existentes em Logger.Além disso, todo objeto da classe Logger possui duas propriedades importantes:

Seu nívelSeu nome

Page 30: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

30

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 59

The JavaTM Logging APIs - package java.util.logging,software servicing and maintenance at customer sites producing log reports suitable for analysis by end users, system administrators, field service engineers, andsoftware development teams

The Logging APIs capture information such assecurity failures,configuration errors,performance bottlenecks,and/or bugs in the application or platform

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 60

Logging – Control Flow

Page 31: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

31

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 61

Logging architecture

Applications make logging calls on Loggerobjects. Logger objects allocate LogRecordobjects which are passed to Handler objectsfor publicationHandlers may use logging Levels and(optionally) Filters to decide if they are interested in a particular LogRecordHandler can (optionally) use a Formatter to localize and format the message beforepublishing it to an I/O stream

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 62

LoggingLoggers are named entities, using dot-separated names, namespaceis hierarchical and is managed by the LogManagerThe namespace should typically be aligned with the Java packagingnamespaceLoggers keep track of their parent loggers in the logging namespace,Loggers may inherit various attributes from their parents in the loggernamespace

Logging level. If a Logger's level is set to be null then the Loggerwill use an effective Level that will be obtained by walking up theparent tree and using the first non-null Level.Handlers. By default a Logger will log any output messages to its parent's handlers, and so on recursively up the tree. But Loggersmay also be configured to ignore Handlers higher up the tree. (useParentHandlers=false)Resource bundle names. If a logger has a null resource bundlename, then it will inherit any resource bundle name defined for its parent, and so on recursively up the tree.

Page 32: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

32

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 63

Níveis de Severidade

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 64

JSE loggingConfiguração

POO-Java

Page 33: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

33

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 65

Configuracao

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 66

Configuracao Declarative

Page 34: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

34

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 67

Log4j POO-Java

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 68

Log4j

Log4j é um projeto de código aberto (open source) que permite ao desenvolvedor incluir logging em sua aplicação.

http://logging.apache.orgFornece serviços de logging para auditoria e depuração de aplicações.Com o Log4j, podemos ativar e desativar o logging sem a necessidade de modificar os binários da aplicação.

Isso pode ser controlado apenas editando um arquivo de configuração (detalhes mais adiante).

Page 35: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

35

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 69

Log4j

Permite o controle dinâmico de:Destino da saída de log (email, console, SGBD, arquivo do SO, servidores de log, etc.)Que informação deve ser registradaFormatação da saída (texto, HTML, XML, etc)

Foi implementado para outras linguagens além de Java:

C, C++, C#, Perl, Python, Ruby e Eiffel

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 70

Instalação do Log4j

A versão atual do Log4J pode ser encontrada emhttp://logging.apache.org/log4j/docs/download.htmldisponíveis o código fonte e as bibliotecas (.jar)

Faça a descompactação dos arquivos para alguma pasta.Adicione a biblioteca (.jar) do log4J no classpathda aplicação.

Nome do arquivo da biblioteca: log4j-xxx.jar (onde xxx é a versão).

Page 36: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

36

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 71

Componentes do Log4J

A API do Log4j tem os seguintes componentes principais:

Logger (classe)Appender (interface)Layout (classe)

Há também componentes acessórios (auxiliares):

LevelPropertyConfigurator, DOMConfigurator

Vamos agora detalhar esses componentes...

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 72

Logger

Page 37: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

37

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 73

Nível de um Logger

O nível de um objeto logger determina que mensagens de log são realmente consideradas por este objeto.

Mensagens com nível igual ou mais alto que o nível definido para o logger são enviadas para a saída.

Há 8 níveis, definidos como constantes (inteiras) na classe Level (também do log4j):

DEBUG < INFO < WARN < ERROR < FATALALL (nível mais baixo) e OFF (nível mais alto)

Um logger pode ser definido em um desses níveisO método setLevel permite definir o nível do logger.

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 74

Método setLevel - exemplo

O Log4j registra uma mensagem sse o método de log utilizado corresponde a um nível que éigual ou maior que o nível do logger.

Exemplo:Logger logger = Logger.getLogger(MinhaClasse.class.getName());...logger.setLevel(Level.ERROR);...

Page 38: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

38

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 75

Métodos de log

Método de log = método chamado quando desejamos registrar uma mensagem no log na aplicação.São os métodos de log existentes na classes Logger são: debug, info, warn, error e fatal.Cada um desses métodos está associado a um nível, correspondente ao seu nome.

e.g., logger.info(“Servidor Levantado") éuma requisição de log no nível INFO.

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 76

Métodos de logHabilitação versus desabilitação

Diz-se que uma mensagem de log está habilitada se o nível do método de log utilizado for maior ou igual ao nível do logger. Do contrário, diz-se que a mensagem está desabilitada.

public void warn(Object message [ , Throwable t ]);

public void info(Object message [ , Throwable t ]);

public void fatal(Object message [ , Throwable t ]);

public void error(Object message [ , Throwable t ]);

public void debug(Object message [ , Throwable t ]);

Page 39: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

39

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 77

Métodos de log - exemploLogger logger = Logger.getLogger(MinhaClasse.class.getName());logger.setLevel(Level.ERROR);...logger.info("Início..."); // Mensagem desabilitada...logger.error("Entrada inválida!"); // Mensagem habilitada...logger.fatal("Erro fatal. Abortando!"); // Mensagem habilitada

...catch (Exception ex) {

logger.error(“Exceção não esperada.", ex);return false;

} …

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 78

Exemplo Logging

Page 40: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

40

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 79

Uso dos métodos de log - Melhores PráticasUse debug para mensagens de depuração, que não devem ser gravadas quando a aplicação estiver em produção. Use info para mensagens similares ao modo "verbose". Use warn para avisos, que são gravados em algum lugar. Avisos não devem corresponder a situações em que a aplicação deve parar de executar. Use error para mensagens que são registradas por conta de algum erro recuperável da aplicação. Use fatal para mensagens críticas; após a gravação das mesmas, a aplicação deve ser abortada.

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 80

Nome de um Logger

O padrão de nomenclatura para objetos da classe Logger é semelhante ao encontrado para classes em Java.

(i.e. com.pdxinc é “pai” de com.pdxinc.nhinar)Prática normalmente utilizada: aproveitar o nome de uma classe como o nome do seu logger.

public class MinhaClasse {private static Logger log= Logger.getLogger(MinhaClasse.class.getName());

...}

Page 41: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

41

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 81

Appenders

No log4j, Appender é uma interface que representa o destinatário da saída do log.

Um logger pode ter vários appendersassociados a ele.

Ou seja, o Log4j permite que uma requisição de log seja enviada para mais de um objeto que implemente Appender.

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 82

Appenders

O método addAppender da classe Logger adiciona um objeto Appender a um certologger.

Há diversas classes que implementam a interface Appender...

Page 42: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

42

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 83

Classes que implementam Appender

ConsoleAppender: envia requisições de logpara a saída padrão (System.out ou System.err). FileAppender: envia requisições de log para um arquivo RollingFileAppender

subclasse de FileAppender, pode fazer um backup do arquivo sempre que ele atingir um determinado tamanho.

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 84

Classes que implementam Appender (cont)

DailyRollingFileAppendersubclasse de FileAppender, pode fazer um backup de tempos em tempos (e.g, a cada semana).

SMTPAppender - appender para enviar o logpara um destinatário de e-mail

SocketAppender - envia os eventos de logpara um servidor de logs remoto através do protocolo TCP.

Page 43: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

43

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 85

Classes que implementam Appender(cont)

NTEventLogAppender - envia para o sistema de log de uma máquina com plataforma Windows. SyslogAppender - envia os logs para um daemon (monitor de logs) remoto JMSAppender - envia os logs como uma mensagem JMS AsyncAppender - possibilita que os logs sejam coletados em um buffer e depois enviados para um ou mais appender anexados a ele.

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 86

ConsoleAppender - exemplopublic class ExemploConsoleAppender {

static Logger logger = Logger.getLogger(ExemploConsoleAppender.class.getName());

public static void main(String args[]) {SimpleLayout layout = new SimpleLayout();ConsoleAppender appender = new ConsoleAppender(layout);logger.addAppender(appender);logger.setLevel(Level.DEBUG); logger.debug(“Mensagem de depuração.");

}}

Page 44: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

44

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 87

FileAppender - exemplopublic class ExemploFileAppender {

static Logger logger = Logger.getLogger(simpandfile.class); public static void main(String args[]) {

SimpleLayout layout = new SimpleLayout(); FileAppender appender = null; try {

appender = new FileAppender(layout, "output1.txt", false);} catch(Exception e) {

…} logger.addAppender(appender); logger.setLevel((Level) Level.DEBUG); logger.debug(“Mensagem de DEBUG"); logger.info(" Mensagem de INFO"); logger.warn(" Mensagem de WARN"); logger.error(" Mensagem de ERROR"); logger.fatal(" Mensagem de FATAL");

} }

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 88

LayoutsAlém de registrar mensagens de log, o Log4j pode também registrar:

Instante (data e hora) em que o log foi requisitado,Prioridade da mensagem (DEBUG, WARN, FATAL etc.), Nome da classe, nome do método, número da linha no código fonte, onde o log foi requisitado,etc

O formato do que é registrado em log é especificado no layout ao qual o appender é associado.Um appender deve ter um Layout associado.Layout é a classe base do Log4j responsável pela formatação da saída para um certo objeto Appender.

Classes do Log4j que especificam a formação estendem Layout

Page 45: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

45

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 89

Subclasses de LayoutHá no log4j diversas subclasses de Layout predefinidas:

SimpleLayout: imprime o nível, o símbolo '-' e a mensagem de log. HTMLLayout formata a saída como HTML.XMLLayout formata a saída como XML.PatternLayout formata a saída usando um padrão de conversão. DateLayout

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 90

SimpleLayout - exemplo

public class ExemploConsoleAppender {static Logger logger =

Logger.getLogger(ExemploConsoleAppender.class.getName());public static void main(String args[]) {

SimpleLayout layout = new SimpleLayout();ConsoleAppender appender = new ConsoleAppender(layout);logger.addAppender(appender);logger.setLevel(Level.DEBUG); logger.debug(“Mensagem de depuração.");

}}

Page 46: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

46

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 91

PatternLayout - exemplopublic class ExemploPatternLayout {

static Logger logger = Logger.getLogger(ExemploPatternLayout.class.getName());

public static void main(String args[]) {String pattern = "Duração do programa em milisegundos: %r %n";pattern += "Nome da classe: %C %n";pattern += "Data no formato ISO8601: %d{ISO8601} %n";pattern += "Local do evento de log: %l %n";pattern += "Mensagem: %m %n %n";PatternLayout layout = new PatternLayout(pattern);ConsoleAppender appender = new ConsoleAppender(layout);logger.addAppender(appender);logger.setLevel(Level.DEBUG);logger.debug("Mensagem de depuração.");

}}

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 92

Log4j X

JSE logging

POO-Java

Page 47: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

47

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 93

Hello Log4jimport org.apache.log4j.*;public class HelloLog4j{

private static Logger logger = Logger.getLogger(HelloLog4j.class);

public static void main(String[] args){

BasicConfigurator.configure();logger.debug(“In the main method");logger.info("What a beautiful day.");logger.error(“This is an error message.”);

}}

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 94

Output from HelloLog4j

0 [main] DEBUG HelloLog4j - In the main method0 [main] INFO HelloLog4j - What a beautiful day.10 [main] ERROR HelloLog4j - This is an error message.

Page 48: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

48

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 95

Hello java.util.loggingimport java.util.logging.*;public class HelloJDKLogging{

private static Logger logger = Logger.getLogger("com. foo.HelloJDKLogging");

public static void main(String argv[]){

logger.setLevel(Level.ALL);logger.fine(“Program started");logger.info(“This app uses java.util.logging”);logger.warning(“Oops, I did it again");

}}

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 96

Output from HelloJDKLogging

Jul 23, 2002 12:12:43 PM HelloJDKLogging mainINFO: This app uses java.util.loggingJul 23, 2002 12:12:43 PM HelloJDKLogging mainWARNING: Oops, I did it again

Page 49: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

49

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 97

Comparison: log4j & java.util.logging

Hierarchical namespaces

Hierarchical namespaces

Named loggersNamed loggers

LogManager classLogManager class

Filter interfaceFilter class

java.util.loggingorg.apache.log4j

Handler’sAppender’s

Level classLevel classFormatter’sLayout’s

Logger classLogger class

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 98

Level

java.util.Logging.Level

Order: FINEST < FINER < FINE < CONFIG < INFO < WARNING < SEVERE

Other levels: Level.ALLLevel.OFF

org.apache.log4j.Level

Order: DEBUG < INFO < WARN < ERROR < FATAL

Other levels: Level.ALLLevel.OFF

Page 50: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

50

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 99

Log4j Appender’s

AsyncAppenderConsoleAppenderDailyRollingFileAppenderJMSAppenderNTEventLogAppender

NullAppenderRollingFileAppenderSMTPAppenderSocketAppenderSyslogAppender

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 100

java.util.logging Handlers & Formaters

HandlersStreamHandlerConsoleHandlerFileHandlerSocketHandlerMemoryHandler

FormatersSimpleFormatterXMLFormatter

Page 51: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

51

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 101

Logging: Best and Worst practicesBest Practices

use the appropriate message levelroll your log files daily / weeklyreview your error log on a daily basis

Worst PracticesSystem.out.println / System.err.printlnlogging passwords to a log filelogging informational messages to STDERR logging a message for every single HTTP requestmultiple applications sending log messages to a single log fileignoring error messages that appear in your application error logmisleading log message

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 102

JSE Logging x Log4j

The primary weakness of JDK Logging over Log4J is that the JDKs configuration file isn't as robust, but it does provide a mechanism to punt down in to classes to do arbitrary work rather than having a more richconfiguration file formatProperty "config". This property is intended to allowarbitrary configuration code to be run. The propertydefines a whitespace separated list of class names. A new instance will be created for each named class. Thedefault constructor of each class may execute arbitrarycode to update the logging configuration, such as settinglogger levels, adding handlers, adding filters, etc

Page 52: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

52

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 103

Log4j Configuração

POO-Java

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 104

Configuração do log4j por arquivo

As configurações do log4j não devem ser feitas no código fonte.

Isso porque é desejável mudar as opções de logging ser ter que recompilar a aplicação.

Modo adequado: através de um arquivo de configuração.Há dois modos de especificar o arquivo de configuração:

Arquivo de propriedades (PropertyConfigurator)Arquivo XML (DOMConfigurator)

Page 53: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

53

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 105

PropertyConfigurator - exemplo

#define o nível do logger raiz e o nome de seu appender (htmlAppender)log4j.rootLogger=DEBUG, htmlAppender

# define a classe do appenderlog4j.appender.htmlAppender=org.apache.log4j.RollingFileAppender

#nome do arquivo de loglog4j.appender.htmlAppender.File=logging/HTMLLayout.html

# define a classe para formação (layout)log4j.appender.htmlAppender.layout=org.apache.log4j.HTMLLayout

# define que deve ser registrada informação de contextolog4j.appender.htmlAppender.layout.LocationInfo=true

# título do arquivo de loglog4j.appender.htmlAppender.layout.Title=Log gerado pelo Log4j

Considere o seguinte arquivo de propriedades:

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 106

PropertyConfigurator – exemplo (cont.)

public class ExemploPropertyConfigurator {static Logger logger =

Logger.getLogger(ExemploPropertyConfigurator.class.getName());public static void main(String[] args) {

PropertyConfigurator.configure(args[0]);logger.info("Aplicação iniciada.");doSomething();logger.info("Aplicação terminada.");

}}

Considere que o arquivo de propriedades anterior foi passado como argumento para o programa a seguir:

Page 54: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

54

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 107

PropertyConfigurator – exemplo (cont.)

O arquivo de log criado a partir do programa anterior:Terá o nome HTMLLayout.html, Terá como conteúdo uma tabela HTML com as mensagens de log em cada linha da tabela.Para cada mensagem, terá:

o tempo (em milisegundos) decorrido desde quando o programa foi iniciado, a thread que disparou o log, o nível de prioridade, (se LocationInfo = true) a classe, o nome do arquivo *.javadesta classe e o número da linha, a mensagem de log propriamente dita.

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 108

Customizações com PatternLayout

r - número de milissegundos transcorridos desde o início do programa t - nome da thread que gerou o evento de logp - prioridade (o -5 indica que deve alinhar àdireita se o número de caracteres for menor que cinco)

Pattern: "%r [%t] %-5p %c{2} - %m%n" 176 [main] INFO examples.Sort - Populating an array of 2 elements in reverse order

Page 55: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

55

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 109

Customizações com PatternLayout

c - nome da classe (2 indica que se o nome completo da classe for "a.b.c" por exemplo, deverá ser mostrado apenas "b.c") m - é a mensagem (não pode faltar !) n - é o separador de linhas do SO ("\n" ou "\r\n“)

Pattern: "%r [%t] %-5p %c{2} - %m%n" 176 [main] INFO examples.Sort - Populating an array of 2 elements in reverse order

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 110

Log4j ResumoPOO-Java

Page 56: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

56

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 111

Log4j - ResumoPrincipais componentes:

Logger: permite realizar requisições de log.Appender: corresponde ao destinatário de uma mensagem de log.Layout: especifica o formato de uma mensagem de log

Propriedades de um objeto Loggernomenível

Hierarquia de loggers oferece um maior controle;Diversas saídas: Console, Arquivo, Banco de Dados, XML, HTML, e-mail, ...API de código aberto;

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 112

Log4j - Resumo

Elimina a necessidade de uso de “System.out”para depuração do código fonte;Permite controlar de maneira flexível as saídas de log;Configuração do log em tempo de execução sem alteração na codificação e sim em um arquivo de configuração;Com o uso de logging, há a possibilidade de diminuição do desempenho da aplicação.

Page 57: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

57

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 113

Exercício

log4j.rootLogger=DEBUG, htmlAppenderlog4j.appender.htmlAppender=org.apache.log4j.ConsoleAppenderlog4j.appender.htmlAppender.layout=org.apache.log4j.PattenLayoutlog4j.appender.htmlAppender.layout. ConversionPattern=%-4r [%t] %-5p %c - %m%n

log4j.rootLogger=DEBUG, htmlAppender# htmlAppender is set to be a ConsoleAppender which outputs to System.out. log4j.appender.htmlAppender=org.apache.log4j.ConsoleAppender# htmlAppender uses PatternLayout.log4j.appender.htmlAppender.layout=org.apache.log4j.PatternLayoutlog4j.appender.htmlAppender.layout.ConversionPattern=%-5p [%t]: %m%n#log4j.logger.package.MyApp =WARN

Experimente utilizar os arquivos de configuração a seguir:

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 114

A Classejava.lang.Object

POO-Java

Page 58: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

58

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 115

Classe java.lang.ObjectModelo de Classes de JavaConforme já dissemos anteriormente em Java a classe Object é a

raiz da hierarquia de classes à qual todas as classes existentes pertencem. Quando não declaramos que uma classe estende outra, ela implicitamente estende Object;

Uma das vantagens de termos uma superclasse comum, é termos uma funcionalidade comum a todos os objetos. Principais métodos de Object

public boolean equals(Object obj)public String toString()public int hashCode()protected Object clone() throws CloneNotSupportedExceptionpublic void wait() throws InterruptedExceptionpublic void notify()

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 116

Redefinindo métodos de ObjectHá vários métodos em Object que podem ser sobrepostos pelas subclasses

A subclasse que você está estendendo talvez já tenha sobreposto esses métodos mas, alguns deles, talvez precisem ser redefinidos para que sua classe possa ser usada de forma correta

Métodos que devem ser sobrepostosboolean equals(Object o): Defina o critério de igualdade para seu objetoint hashCode(): Para que seu objeto possa ser localizado em HashtablesString toString(): Sobreponha com informações específicas do seu objetoObject clone(): se você desejar permitir cópias do seu objeto

Page 59: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

59

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 117

Redefinindo métodos de ObjectDetermine quais os critérios ( que propriedades do objeto) que podem ser usados para dizer que um objeto é igual a outro

raio, em um objeto Círculonúmero de série, em um objeto genériconome, sobrenome, departamento, para um objeto EmpregadoA chave primária, para um objeto de negócio

Implemente o equals(), testando essas condições e retornando true apenas se forem verdadeiras (false, caso contrário)

Garanta que a assinatura seja igual à definida em Object

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 118

Redefinindo métodos de Objectinstanceof é um operador usado para comparar uma referência com uma classe

A expressão será true se areferência for do tipo de uma classe ou subclasse testada e false, caso contrário

Exemplo: sobreposição de equals()class Point {

private int x, y;public boolean equals(Object obj) {

if ( obj instanceof Point ) {Point ponto = (Point)obj;if ( ponto.x == this.x && ponto.y == this.y) {return true;

}}

return false;} Agora posso usar: if(p1.equals(p2))... !

}

Page 60: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

60

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 119

Sobrecarregando toString()toString() deve devolver um String que possa representar o objeto quando este for chamado em uma concatenação ou representado como texto

Decida o que o toString() deve retornarFaça chamadas super.toString() se achar convenientePrefira retornar informações que possam identificar o objeto (e não apenas a classe)toString() é chamado automaticamente em concatenções usando a referência do objeto

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 120

Sobrecarregando hashCode()

hashCode() deve devolver um número inteiro que represente o objeto

Use uma combinação de variáveis, uma chave primária ou os critérios usados no equals()Número não precisa ser único para cada objeto mas dois objetos iguais devem ter o mesmo número.

método hashCode() é chamado automaticamente quando referências do objeto forem usadas em coleções do tipo hash (Hashtable, HashMap)equals() é usado como critério de desempate, portanto, se

implementar hashCode(), implemente equals() também.

Page 61: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

61

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 121

Interface Cloneable

Interface CloneableUsada para permitir que um objeto seja clonado/copiado. Não possui declaração de métodos (Marker Interface). Indica para o método Object.clone() que o mesmo pode fazer uma cópia campo a campo quando tiver que clonar (criar via copia) uma nova instância da classe.Como fazer:

class MyClass implements Cloneableclass MyClass extends SuperClass implements Cloneable

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 122

Interface Cloneable

Interface Cloneable (cont.)Exemplo:

Point p1, p2, p3;p1 = new Point(0, 0);p2 = p1; // p2 e p1 se referenciam ao mesmo objp3 = (Point)p1.clone(); // p3 novo obj criado com os valores p1

Page 62: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

62

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 123

Sobrecarregando Clone()clone() é chamado para fazer cópias de um objeto

Circulo c = new Circulo(4, 5, 6);Circulo copia =(Circulo)c.clone();

Se o objeto apenas contiver tipos primitivos como seus campos de dados, é preciso

1. Declarar que a classe implementa Cloneable2. Sobrepor clone() e invocar o método Object.clone() que faz uma copia bit-wise dos atributos do objeto

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 124

Sobrecarregando Clone()

Se o objeto contiver campos de dados que são referências a objetos, é preciso fazer cópias desses objetos também

Page 63: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

63

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 125

Documentação Com JavaDoc

POO-Java

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 126

Documentação

Ferramenta javadocDocumentação a partir de comentários, colocados no código fonteFormato HTML: permite visualização via browserManual do usuário × Guia de referênciaA saída (conteúdo e formato) gerada pelo Javadoc pode ser customizada através do uso de doclets.

Page 64: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

64

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 127

Uso do javadoc

Comentário especiais /** ... */se referem ao próximo identificador definidopermitem o uso de tags HTML

Parágrafos especiaisdocumentam assinaturas de métodosfazem referências cruzadassinalizam código depreciadoidentificam autoria

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 128

Exemplopackage org.enterprise.myapp;/*** Classe exemplo. Documentada com javadoc.* <p> * Exemplo de uso tags HTML (see the {@link Exemplo2} class) * @since 1.0 * @see org.enterprise.myapp*/

public class Exemplo {/*** Divide um número por dois. Esse método retorna a* divisão inteira por 2 do número fornecido.* @param i número a ser dividido.* @return resultado da divisão inteira por 2.*/

public int div2(int i) { return i/2; }}

Page 65: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

65

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 129

Parágrafo @param

Documenta um parâmetro de um métodoRecebe o nome do parâmetro e suadescriçãoExemplo:

@param id Identificador a ser buscado

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 130

Parágrafo @return

Documenta o valor de retorno de um métodoRecebe a descrição do valorExemplo:

@return Nome do elemento encontrado

Page 66: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

66

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 131

Parágrafo @exception

Documenta uma exceção gerada por um métodoRecebe o tipo da exceção e sua descriçãoExemplo:

@exception IdNotFound Identificador não encontrado

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 132

Parágrafo @see

Cria de uma referência cruzadaRecebe o nome de um identificadorExemplo:

@see estruturas.Coleção#insere

Page 67: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

67

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 133

Parágrafo @deprecated

Marca um identificador como depreciadoQualquer código que utilize o identificadorreceberá um aviso em tempo de compilaçãoRecebe uma descriçãoExemplo:

@deprecated Esse método foi descontinuado. Use o métodoxxx.

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 134

Parágrafo @author

Identifica o autor do códigoRecebe um nomeExemplo:

@author João José

Page 68: Modulo IIa Extra: Ant, Logging, Object & JavaDocismael/Cursos/Cidade_FPSW/... · Ismael H. F. Santos, Apostila UniverCidade,

68

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 135

Parágrafo @version

Identifica a versão do códigoRecebe o identificador da versãoExemplo:

@version 1.0β

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 136

Parágrafo @since

Especifica a versão onde o identificador foiintroduzidoRecebe o identificador da versãoExemplo:

@since 1.0β