Stosowanie znaczników biblioteki Doclet w aplikacjach J2C

Możliwość umieszczania znaczników w kodzie źródłowym aplikacji J2C w języku Java pozwala korzystać z funkcjonalności, jaką oferuje biblioteka Doclet J2C.

Znaczniki biblioteki Doclet to znaczniki programistyczne służące do tworzenia adnotacji. Udostępniają one rozbudowany mechanizm generowania artefaktów aplikacji, gotowych do wdrożenia w środowisku J2EE. Po wprowadzeniu znaczników biblioteki Doclet do kodu źródłowego aplikacji J2C w języku Java artefakty te są generowane automatycznie (po naciśnięciu klawiszy CTRL+S w celu zapisania kodu).
Znaczniki biblioteki Doclet wstawia się do kodu źródłowego w języku Java w postaci komentarzy w stylu Javadoc. Znaczniki programistyczne oparte na adnotacjach mają atrybuty Scope (czyli "zasięg" - określa, w którym miejscu w kodzie występuje dany znacznik) i Multiplicity (czyli "krotność" - określa, ile razy znacznik może zostać użyty).

Obsługiwane znaczniki biblioteki Doclet:

Tworząc aplikacje J2C w języku Java, można umieszczać w kodzie źródłowym następujące rodzaje znaczników:
  • Znaczniki J2C
  • Znaczniki deskryptora typu:

Atrybuty znacznika biblioteki Doclet

  1. Scope: Atrybut Scope określa położenie znaczników wewnątrz pliku źródłowego w języku Java. Cztery dostępne opcje to: package (pakiet), class (klasa), method (metoda) i field (pole).
    • Package

      Dodany do komentarza pakietu. Ten zasięg oznacza informacje odnoszące się do całego pakietu, modułu lub aplikacji w języku Java.

    • Class

      Dodany do komentarza klasy. Ten zasięg oznacza informacje odnoszące się do całego typu lub interfejsu w języku Java.

    • Method

      Dodany do komentarza konkretnej metody wewnątrz klasy. Ten zasięg oznacza informacje odnoszące się do danej metody w ramach klasy.

    • Field

      Dodany do komentarza konkretnego pola wewnątrz klasy. Ten zasięg oznacza informacje odnoszące się do danego pola w ramach klasy.

  2. Multiplicity: Atrybut Multiplicity określa, ile razy dany znacznik może wystąpić w pojedynczym pliku źródłowym w języku Java. W notacji biblioteki Doclet wartość tego atrybutu podaje się w nawiasach, tuż za nazwą znacznika.
    • 0..1: Oznacza, że w pliku źródłowym w języku Java dany znacznik może zostać użyty co najwyżej jeden raz.
    • 0..n: Oznacza, że w pliku źródłowym w języku Java dany znacznik może zostać użyty dowolną liczbę razy.
Przykład: Poniższy przykład pochodzi z kursu IMS Multisegment Output (Wielosegmentowe wyjście w systemie IMS):
  1. W widoku Eksplorator projektów rozwiń gałąź projektu, a następnie gałęzie Zasoby Java i Źródło Java.
  2. Kliknij pakiet prawym przyciskiem myszy (w tym przypadku będzie to plik sample.ims) i wybierz opcje Nowy > Klasa, aby uruchomić kreator Nowa klasa.
  3. Jako nazwę klasy wpisz CCIBuffer. Zaakceptuj wszystkie ustawienia domyślne.
  4. Kliknij przycisk Zakończ, a klasa CCIBuffer zostanie otwarta w edytorze Java.
  5. W sekcji komentarza klasy CCIBuffer wprowadź znacznik @type-descriptor.message-buffer, w następujący sposób:

    Dodawanie znacznika biblioteki Doclet

  6. Naciśnij klawisze CTRL+S, aby zapisać zmiany. W pliku klasy CCIBuffer.java zostanie automatycznie wygenerowany następujący kod:
    /*
     * Created on Oct 13, 2004
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    package sample.ims;
    
    /**
     * @author ivyho
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     * @type-descriptor.message-buffer
     */
    public class CCIBuffer implements javax.resource.cci.Record,
    		javax.resource.cci.Streamable, com.ibm.etools.marshall.RecordBytes {
    
    	private byte[] buffer_ = null;
    
    	/**
    	 * @generated
    	 */
    	public CCIBuffer() {
    		return;
    	}
    
    	/**
    	 * @generated
    	 * @see javax.resource.cci.Record#getRecordShortDescription()
    	 */
    	public String getRecordShortDescription() {
    		return (this.getClass().getName());
    	}
    
    	/**
    	 * @generated
    	 * @see javax.resource.cci.Record#hashCode()
    	 */
    	public int hashCode() {
    		return (super.hashCode());
    	}
    
    	/**
    	 * @generated
    	 * @see javax.resource.cci.Streamable#write(OutputStream)
    	 */
    	public void write(java.io.OutputStream outputStream)
    			throws java.io.IOException {
    		outputStream.write(buffer_);
    	}
    
    	/**
    	 * @generated
    	 * @see javax.resource.cci.Record#setRecordShortDescription(String)
    	 */
    	public void setRecordShortDescription(String shortDescription) {
    		return;
    	}
    
    	/**
    	 * @generated
    	 */
    	public int getSize() {
    		if (buffer_ != null)
    			return (buffer_.length);
    		else
    			return (0);
    	}
    
    	/**
    	 * @generated
    	 * @see java.lang.Object#toString
    	 */
    	public String toString() {
    		StringBuffer sb = new StringBuffer(super.toString());
    		sb.append("\n");
    		com.ibm.etools.marshall.util.ConversionUtils.dumpBytes(sb, buffer_);
    		return (sb.toString());
    	}
    
    	/**
    	 * @generated
    	 * @see javax.resource.cci.Record#getRecordName()
    	 */
    	public String getRecordName() {
    		return (this.getClass().getName());
    	}
    
    	/**
    	 * @generated
    	 */
    	public byte[] getBytes() {
    		return (buffer_);
    	}
    
    	/**
    	 * @generated
    	 * @see javax.resource.cci.Record#clone()
    	 */
    	public Object clone() throws CloneNotSupportedException {
    		return (super.clone());
    	}
    
    	/**
    	 * @generated
    	 * @see javax.resource.cci.Record#setRecordName(String)
    	 */
    	public void setRecordName(String recordName) {
    		return;
    	}
    
    	/**
    	 * @generated
    	 * @see javax.resource.cci.Record#equals()
    	 */
    	public boolean equals(Object object) {
    		return (super.equals(object));
    	}
    
    	/**
    	 * @generated
    	 * @see javax.resource.cci.Streamable#read(InputStream)
    	 */
    	public void read(java.io.InputStream inputStream)
    			throws java.io.IOException {
    		byte[] input = new byte[inputStream.available()];
    		inputStream.read(input);
    		buffer_ = input;
    	}
    
    	/**
    	 * @generated
    	 */
    	public void setBytes(byte[] bytes) {
    		buffer_ = bytes;
    	}
    
    }

Opinie