Problem mit EJB und xdoclet (jboss mit xdoclet)

enrix

Mitglied
Hallo, ich möchte in einem Servlet eine EJB integrieren. Die EJB habe ich wie folgt geschrieben:

Code:
package de.bsd.adb.ejb;


import java.util.ArrayList;
import java.util.Iterator;
import javax.ejb.*;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import de.bsd.adb.beans.*;
import java.util.Collection;

/**
 *
 *
 * @ejb.bean name="Facade"
 * type="Stateless"
 * view-type="both"
 * jndi-name="adb/Facade"
 * local-jndi-name="adb/FacadeLocal"
 */


public abstract class FacadeSessionBean implements SessionBean {

    

    public void ejbCreate() throws CreateException{
       ...    
    }

    /**
     * @ejb.interface-method
     */
    public AddrBean add(AddrBean a){
        ...
    }

    /**
     * @ejb.interface-method
     */
    public AddrBean[] suche(String name, String vorname){
        ...
    }


}

Ich lege oben in den xdoclet-tags fest, dass ein Name für das Remote und Local -Inerface vergeben werden sollen.

Diese EJB verwende ich nun in einem Servlet
Code:
package de.bsd.adb.servlets;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import de.bsd.adb.beans.*;
import de.bsd.adb.ejb.*;
import java.util.ArrayList;
import javax.ejb.EJB;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpSession;

public class WorkServlet extends HttpServlet{
	
      
       private FacadeHome fh; 
       
        private Facade fa; 

        public void init() throws ServletException{
            try{
                InitialContext ic = new InitialContext();
                Object o = ic.lookup("adb/Facade");
                fh = (FacadeHome) o;
            }catch (NamingException e){
                fh = null;
                throw new ServletException(e);
            }
        }

	
	protected void doPost (HttpServletRequest req, HttpServletResponse resp) {
	  ...	
        }

        private AddrBean[] handleSearch(HttpServletRequest req){
           ...
        }

        private AddrBean[] handleAdd(HttpServletRequest req){
           ...
                Facade fa = fh.create();
                fa.add(a);
                fa.remove();
           ...
        }	
}

Wie schon erwähnt verwende ich für die Generierung der Hilfsklassen und Interfaces xdoclet-1.2.3. dazu habe ich in der build.xml folgendes target festgelegt

Code:
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." name="adb" default="Testserver">
<!-- Voreinstellungen lesen -->
<property file="build.properties"/>

<target name="Testserver" depends="war"/>

<target name="deploy-war" description="adb.war auf dem Server einspielen">
<copy overwrite="true" file="${build.dir}/adb.war" todir="${jboss.deploy.dir}"/>
</target>

<target name="compile-web" description="Servlet übersetzen">
<mkdir dir="${gen-class.dir}"/>
<javac classpath="${servlet.lib.path}"
classpathref="server.path.ref"
debug="on"
destdir="${gen-class.dir}"
srcdir="${src.dir}"
includes="de/bsd/adb/servlets/*.java, de/bsd/adb/beans/*.java,de/bsd/adb/ejb/*.java"/>
</target>

<target name="war" depends="compile-web" description="adb.war zusammenbauen">
<war destfile="${build.dir}/adb.war" webxml="web.xml">
<classes dir="${gen-class.dir}">
<include name="**/servlets/*.class"/>
<include name="**/beans/*.class"/>
<include name="**/ejb/Facade.class"/>
<include name="**/ejb/FacadeHome.class"/>
</classes>
<fileset dir="${src.dir}/de/bsd/adb/web">
<include name="*.jsp"/>
<include name="*.html"/>
<include name="prot/*.jsp"/>
</fileset>
</war>
</target>

 <path id="xdoclet.path.ref">
            <!--xdoclet libs-->
        <fileset dir="${xdoclet.lib.path}">
            <include name="*.jar"/>
        </fileset>
        <!--jboss/j2ee libs-->
        <fileset dir="${jboss.client.di}">
            <include name="jboss-j2ee.jar"/>
        </fileset>
 </path>
        
        <path id="server.path.ref">
            <pathelement location="${build.dir}/adb-ejb.jar"/>
            <pathelement location="${jboss.client.dir}/jboss-j2ee.jar"/>
        </path>  
        
 <target name="init">
     <taskdef name="ejbdoclet" classname="xdoclet.modules.ejb.EjbDocletTask"
     classpathref="xdoclet.path.ref"/>
     <mkdir dir="build"/>
     <mkdir dir="build/gen-classes"/>
     <mkdir dir="build/META-INF"/>
 </target>
 
 <target name="ejbdoclet" depends="init" description="Hilfsklassen für EJBs erzeugen">
     <ejbdoclet destdir="${gen-src.dir}" ejbspec="2.1">
         
         <fileset dir="${src.dir}">
             <include name="de/bsd/adb/ejb/*.java"/>            
         </fileset>
         <localinterface/>
         <localhomeinterface/>
         <remoteinterface/>
         <homeinterface/>
         <entitypk/>
         <entitycmp/>
         <session/>
         <deploymentdescriptor destdir="${build.dir}/META-INF" validatexml="true"/>
         <jboss destdir="${build.dir}/META-INF" version="4.0"/>
     </ejbdoclet>            
 </target>
 
 <target name="compile-ejb" description="EJBs übersetzen" depends="ejbdoclet">
     <mkdir dir="${gen-Class.dir}"/>
     <javac classpath="${j2ee.lib}" 
     debug="on"
     destdir="${gen-Class.dir}"
     includes="de/bsd/adb/ejb/*.java, de/bsd/adb/beans/*.java">         
     
     
     <src path="${src.dir}"/>
     <src path="{gen-src.dir}"/>
     </javac>    
 </target>
 
 <target name="jar" description="build adb-ejb.jar" depends="compile-ejb">
     <jar destfile="${build.dir}/adb-ejb.jar">
         <fileset dir="${gen-class.dir}">
             <include name="de/bsd/adb/ejb/*.class"/>
             <include name="de/bsd/adb/beans/*.class"/>
         </fileset>
         <metainf dir="${build.dir}/META-INF"/>         
     </jar>     
 </target>
 
 <target name="ear" description="Baut adb-app" depends="war,jar">
     <ear destfile="${build.dir}/adb-app" appxml="application.xml">
         <fileset dir="${build.dir}" includes="*.jar,*.war"/>
     </ear>
 </target>
 
 
</project>

Zum Schluss habe ich auch in der build.properties die bibliotheken für xdoclet angegeben:
Code:
#Ort der Quellen
src.dir=srcs
#Ort der erzeugten Quellen
gen-src.dir=gen-src
#Wo wird die Applilation zusammengebaut
build.dir=build
#Wo werden generierte Klassen abgelegt?
gen-Class.dir=${build.dir}/gen-classes
#Basisverzeichnis JBoss Server
jboss.dir = /Applications/jboss5.1
#Welcher Server soll gewählt werden
jboss.server=Testserver
#Der Pfad zum Server
jboss.server.dir=${jboss.dir}/server/${jboss.server}
#Wo ist javax.servlet.jar?
servlet.lib.path=${jboss.server.dir}/lib/javax.servlet.jar
#Wohin wird deployt?
jboss.deploy.dir=${jboss.server.dir}/deploy/

#Wo sind die xdoclet-bibliotheken?
xdoclet.lib.path=/Application/xdoclet-1.2.3/target/lib
#Wo sind die jboss-client-bibliotheken
jboss.client.dir=${jboss.dir}/client
#Wo ist der Ort für die javax.ejb.* Bibliotheken ?
j2ee.lib=${jboss.client.dir}/jboss-j2ee.jar
#sollen die Tabellen vom Server beim Deploy angelegt werden?
create.table=true
#Sollen die Tabellen vom Server beim Undeploy gelöscht werden?
remove.table=true

wenn ich nun im Projektordner den Befehl ant ausführe, erhalte ich die Fehlermeldung im Terminal:
Code:
compile-web:
     Compiling 1 source file to /Documents/workspace/adbTestprojekt/adb/${gen-class.dir}
     /Documents/workspace/adbTestprojekt/adb/srcs/de/bsd/adb/servlets/WorkerServlet.java:21: cannot find symbol
     symbol  : class FacadeHome
     location: class de.bsd.adb.servlets.WorkerServlet
             private FacadeHome fh;
                     ^
     /Documents/workspace/adbTestprojekt/adb/srcs/de/bsd/adb/servlets/WorkerServlet.java:22: cannot find symbol
     symbol  : class Facade
     location: class de.bsd.adb.servlets.WorkerServlet
             private Facade fa;
                     ^
     /Documents/workspace/adbTestprojekt/adb/srcs/de/bsd/adb/servlets/WorkerServlet.java:28: cannot find symbol
     symbol  : class FacadeHome
     location: class de.bsd.adb.servlets.WorkerServlet
                     fh = (FacadeHome) o;
                           ^
     /Documents/workspace/adbTestprojekt/adb/srcs/de/bsd/adb/servlets/WorkerServlet.java:71: cannot find symbol
     symbol  : class Facade
     location: class de.bsd.adb.servlets.WorkerServlet
                     Facade fa = fh.create();
                     ^
     /Documents/workspace/adbTestprojekt/adb/srcs/de/bsd/adb/servlets/WorkerServlet.java:100: cannot find symbol
     symbol  : class Facade
     location: class de.bsd.adb.servlets.WorkerServlet
                     Facade fa = fh.create();
                     ^
     Note: db/servlets/WorkerServlet.java uses unchecked or unsafe operations.
     Note: Recompile with -Xlint:unchecked for details.
     5 errors

BUILD FAILED

Meine Frage ist, was ist an meinen xdoclet-Konfigurationen falsch, dass anscheinend die Interface-Klassen der FacadeSessionBean EJB nicht erzeugt werden?
 
Zuletzt bearbeitet:
Zurück