Søger du en specifik kategori?

 



Oprettet man. d. 15. februar 2010 kl. 04:21

arne_v
arne_v (1.016.094 point)
Guidens karaktér
1
2
3
4
5
Mangler vurderinger

Introduktion til XDoclet

Denne artikel beskriver hvordan man kan bruge XDoclet til at generere deployment descriptorer og interfaces til EJB's. Den forudsætter kendskab til Java, EJB og deployment descriptorer.
Historie:
V1.0 - 13/01/2004 - original
V1.1 - 31/01/2004 - forbedret formatering
V1.2 - 14/02/2010 - smårettelser

Vigtig note

Indholdet i denne artikel er forældet i forhold til EJB 3.0 og 3.1.

(iøvrigt fordi de har bygget features meget lig med XDoclet ind i
selve EJB via Java 1.5+ annotations)

Den er kun relevant hvis man arbejder med EJB 1.1, 2.0 og 2.1.

Baggrund

Man har ikke arbejdet længe med EJB's førend man sidder og bruger
rigtigt meget tid på trivielt arbejde:
  - vedligeholde standard deployment descriptorer
  - vedligeholde home/remote/localhome/local interfaces

Heldigvis er der lavet et lille tool xdoclet som kan
hjælpe med det.

Brug
xdoclet kan hentes her:
  http://xdoclet.sourceforge.net/

Installation er bare unzip.

Man skal have ant installeret.

Mit eksempel er med JBoss applikations server, men XDoclet
understøtter dem alle fra IBM WebSphere og BEA WebLogic og nedad.

Ideen i xdoclet er meget simpel: man skriver nogle specielle
kommentarer i selve bean implementationen (ligesom java doc
kommentarer) og så genererer xdoclet alt det trivielle.

Jeg vil lave en meget simpel session bean (stateless, CMT) og
en simpel entity bean (CMP 2.0).

TestSessionBean.java


package test;

import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

/**
* TestSessionBean.
*
* @ejb.bean
*    name="TestSession"
*    type="Stateless"
*    jndi-name="ejb/TestSession"
*    local-jndi-name="ejb/LocalTestSession"
*/
public class TestSessionBean implements SessionBean {
    private SessionContext sessionContext;
    public void ejbCreate() {
        return;
    }
    public void ejbRemove() {
        return;
    }
    public void ejbActivate() {
        return;
    }
    public void ejbPassivate() {
        return;
    }
    public void setSessionContext(SessionContext sessionContext) {
        this.sessionContext = sessionContext;
    }
    /**
    * String dup.
    *
    * @ejb.interface-method
    *    view-type="both"
    */
    public String dup(String s) {
        return (s + s);
    }
}


TestEntityBean.java


package test;

import javax.ejb.*;

/**
* TestEntityBean.
*
* @ejb.bean
*    name="TestEntity"
*    type="CMP"
*    cmp-version="2.x"
*    jndi-name="ejb/TestEntity"
*    local-jndi-name="ejb/LocalTestEntity"
*    primkey-field="f1"
*
* @ejb.finder
*    signature="java.util.Collection findAll()"
*
* @ejb.persistence
*    table-name="T1"
*
* @jboss.persistence
*    datasource="java:/TestMSAccess"
*    datasource-mapping="SOLID"
*/
abstract public class TestEntityBean implements EntityBean {
    private EntityContext entityContext;
    public Integer ejbCreate(Integer f1, String f2) throws CreateException {
        setF1(f1);
        setF2(f2);
        return null;
    }
    public void ejbPostCreate(Integer f1, String f2) throws CreateException {
    }
    public void ejbRemove() throws RemoveException {
    }
    public void ejbLoad() {
    }
    public void ejbStore() {
    }
    public void ejbActivate() {
    }
    public void ejbPassivate() {
    }
    public void unsetEntityContext() {
        this.entityContext = null;
    }
    public void setEntityContext(EntityContext entityContext) {
        this.entityContext = entityContext;
    }
    /**
    * @ejb.persistence
    *    column-name = "F1"
    *
    * @ejb.pk-field
    *
    * @ejb.interface-method
    *    view-type="both"
    */
    public abstract Integer getF1();
    /**
    * @ejb.interface-method
    *    view-type="both"
    */
    public abstract void setF1(Integer f1);
    /**
    * @ejb.persistence
    *    column-name = "F2"
    *
    * @ejb.interface-method
    *    view-type="both"
    */
    public abstract String getF2();
    /**
    * @ejb.interface-method
    *    view-type="both"
    */
    public abstract void setF2(String f2);
}


Og med det følgende i build.xml så kan ant generere det hele:


    <path id="xdoclet.libs">
        <fileset dir="/xdoclet-1.2/lib">
            <include name="*.jar"/>
        </fileset>
    </path>
    <target name="gen">
        <taskdef name="ejbdoclet" classname="xdoclet.modules.ejb.EjbDocletTask" classpathref="xdoclet.libs"/>
        <ejbdoclet destDir="${dd}" ejbspec="2.0">
            <fileset dir="${ejbsrc}">
                <include name="**/*Bean.java"/>
            </fileset>
            <homeinterface destDir="${gensrc}"/>
            <localhomeinterface destDir="${gensrc}"/>
            <remoteinterface destDir="${gensrc}"/>
            <localinterface destDir="${gensrc}"/>
            <deploymentdescriptor destdir="${dd}"/>
            <jboss version="3.2" destdir="${dd}"/>
        </ejbdoclet>
    </target>
    <target name="build" depends="gen">
        <javac srcdir="${ejbsrc};${gensrc}" destdir="${bin}"/>
        <jar jarfile="${ejbjarname}">
            <fileset dir="${bin}"/>
            <metainf dir="${dd}"/>
        </jar>
    </target>


Den genererer følgende deployment descriptorer:

ejb-jar.xml
jboss.xml
jbosscmp-jdbc.xml

Den genererer følgende interfaces:

TestEntity.java
TestEntityHome.java
TestEntityLocal.java
TestEntityLocalHome.java
TestSession.java
TestSessionHome.java
TestSessionLocal.java
TestSessionLocalHome.java

(ingen grund til at kopiere dem ind i artiklen)

Man kan sagtens lade den generere deployment descriptorer til flere
forskellige applikation servere.

Skrevet ons. d. 28. januar 2004 kl. 17:57| #1

billen (20.718 point)
Virkelig en god gennemgang af XDoclet. Jeg forstod ideen med XDoclet allerede første gang jeg læste artiklen.

Skriv en kommentar



Mest populære guides

Guidens karakter
!!!Karaktér: 3
14 stemmer
31/01 - 2011
Af: heinzdmx

Dropbox - gratis online lagerplads

Jeg vil i denne guide forklare lidt om hvad Dropbox er og også hvordan du får mest mulig plads på Dropbox. Dropbox er kort sagt en service hvor du har dine data lagt til backup på både nettet og din egen computer.
Guidens karakter
!!!Karaktér: 4
33 stemmer
02/02 - 2009
Af: jkrons

Dato- og tidsberegninger i Excel

En introduktion til simple beregninger med dato og tid i Excel. Opdateret med afsnit om beregning af tillæg.
Excel  |  Læs »
Guidens karakter
!!!Karaktér: 4
21 stemmer
06/11 - 2011
Af: fromsej

Sådan fjerner du virus og malware

Udviklingen går stærkt på "skidt"fronten, så vi har sammensat en ny og effektiv programpakke til fjernelse af det.
Virus  |  Læs »

Log ind

   

   



   




Tips & Tricks fra PC World

Teaser billede

Top 5: Virale YouTube-videoer fra Danmark

Lægger du mærke til de mere eller mindre skjulte reklamebudskaber, når du ser videoer på nettet? Vi har taget et kig på fem utrolige danske videoer, som er blevet virale hit.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan fupper smarte svindlere dig på Facebook

Se hvordan du undgår Facebook-fup i fremtiden.


Nyheder fra Computerworld

Teaser billede

App-udvikling 2.0: Sådan er den perfekte app

ComputerViews: Den værste app-hype er ved at have lagt sig, og nu ser vi konturerne af fremtidens app-design. Men hvordan udnytter man de mobile muligheder optimalt?


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger