Probleme mit ejb-jar.xml und XDoclet

R

rogerssocke

Hallo Leute,

meiner erster Beitrag, hoffe das ich hier richtig bin.

Ich habe folgendes Problem, ich möchte mit Hilfe von XDoclets das Deploytool von Sun komplett ersetzen. Also habe ich angefangen eine Hello World EJB zu programmieren und zu testen wie XDoclet funktioniert. Das Ergebnis welches ich gerne hätte wäre ein fertiges EAR File was ich direkt in mein JBoss Server einbinden kann.

Zu meinen Fragen, kann man die application.xml Datei auch mit XDoclet erstellen, oder muss man die per Hand erstellen? Ist es möglich die ejb-jar.xml fertig zu erzeugen und die Interfaces noch per Hand zu programmieren, dies wäre notwendig ich für viele EJB's die selben Interfaces nutze.

Und nun zu meinem Hauptproblem. Bei meinen ersten Test hat alles bis auf die XDoclets funktioniert. Mir wird zwar eine ejb-jar.xml Datei erstellt allerdings ohne einen Sinnvollen Inhalt. Die Datei sieht so aus:

ejb-jar.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar >

   <description><![CDATA[No Description.]]></description>
   <display-name>Generated by XDoclet</display-name>

   <enterprise-beans>

      <!-- Session Beans -->
     <!--
       To add session beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called session-beans.xml that contains
       the <session></session> markup for those beans.
     -->

      <!-- Entity Beans -->
     <!--
       To add entity beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called entity-beans.xml that contains
       the <entity></entity> markup for those beans.
     -->

      <!-- Message Driven Beans -->
     <!--
       To add message driven beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called message-driven-beans.xml that contains
       the <message-driven></message-driven> markup for those beans.
     -->

   </enterprise-beans>

   <!-- Relationships -->

   <!-- Assembly Descriptor -->
     <!--
       To specify your own assembly descriptor info here, add a file to your
       XDoclet merge directory called assembly-descriptor.xml that contains
       the <assembly-descriptor></assembly-descriptor> markup.
     -->

   <assembly-descriptor >
     <!--
       To specify additional security-role elements, add a file in the merge
       directory called ejb-security-roles.xml that contains them.
     -->

   <!-- method permissions -->
     <!--
       To specify additional method-permission elements, add a file in the merge
       directory called ejb-method-permissions.ent that contains them.
     -->

   <!-- transactions -->
     <!--
       To specify additional container-transaction elements, add a file in the merge
       directory called ejb-container-transactions.ent that contains them.
     -->

   <!-- finder transactions -->

   <!-- message destinations -->
     <!--
       To specify additional message-destination elements, add a file in the merge
       directory called ejb-message-destinations.ent that contains them.
     -->

   <!-- exclude list -->
     <!--
       To specify an exclude-list element, add a file in the merge directory
       called ejb-exclude-list.xml that contains it.
     -->
   </assembly-descriptor>

</ejb-jar>

Meine EJB sieht so aus:

Code:
package Server;

import java.rmi.RemoteException;

import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

/**
 * @ejb.bean name="HelloBean" 
 *   description="Gibt nur ein Hello World aus"
 *   type="Stateless"
 *   view-type="remote"
 *   transaction-type="Bean"
 *   jndi-name="HelloBean"
 */
public class HelloBean implements SessionBean
{
	
	private static final long	serialVersionUID	= 1L;

	public HelloBean(){} //default Konstrucktor
	
	/**
	 * @ejb.interface-method
	 */
	public String sayHello()
	{
		return "Look, Mm, i'm an EJB!";
	}
	
	/**
	 * @ejb.create-method
	 */
	public void ejbCreate() throws CreateException
	{	}

	public void ejbActivate() throws EJBException, RemoteException
	{
		// TODO Auto-generated method stub

	}

	public void ejbPassivate() throws EJBException, RemoteException
	{
		// TODO Auto-generated method stub

	}

	public void ejbRemove() throws EJBException, RemoteException
	{
		// TODO Auto-generated method stub

	}

	public void setSessionContext(SessionContext arg0) throws EJBException,
			RemoteException
	{
		// TODO Auto-generated method stub

	}

}

und meine build.xml Datei sieht so aus:

Code:
<?xml version="1.0"?>
<!-- ====================================================================== 
     25.06.2007 13:33:39                                                        

     HelloWorldTest    
     description
     
     benötigt werden ein javac, jar, web, war und ein copy
                   
     czech                                                                
     ====================================================================== -->

<project name="HelloWorldTest" default="javac">

	<property name="j2ee.classPath" value="C:\Sun\AppServer\lib\j2ee.jar" />

	<property name="jboss.home" value="C:\jboss-4.0.4.GA" />
	<property name="xdoclet.home" value="C:\xdoclet-1.2.3" />

	<property name="jboss.lib" value="${jboss.home}/lib" />
	<property name="jboss.client" value="${jboss.home}/client" />
	<property name="jboss.configuration" value="mdonline" />

	<property name="src.client" value="${basedir}/Client" />
	<property name="src.server" value="${basedir}/Server" />
	<property name="build.dir" value="${basedir}/build" />

	<target name="javac" description="--> description">
		<echo>
    		Die Klassen werden kompiliert.
    	</echo>
		<javac srcdir="${src.client}:${src.server}" destdir="${build.dir}" debug="on" deprecation="off" compiler="javac1.4" classpath="${j2ee.classPath}">
		</javac>
	</target>

	<target name="jar">
		<jar jarfile="${build.dir}/ejb-jar-ic.jar">
			<fileset dir="${build.dir}" includes="Server/**">
			</fileset>
			<fileset dir="${build.dir}" includes="META-INF/**">
			</fileset>
		</jar>
	</target>

	<target name="web">
	</target>

	<target name="ear">
		<ear destfile="${build.dir}/HelloEJB.ear" appxml="${build.dir}/application.xml">
			<fileset dir="${build.dir}" includes="*.jar,*.war, " />
		</ear>
	</target>

	<target name="copyToJBoss">
	</target>

	<!--
		XDOCLET vorbereiten
		-> Path setzen
		-> Task definieren
		-> XDoclet ausführen
	-->

	<path id="base.path">
		<pathelement location="${ant.home}/lib/ant.jar" />
		<!-- AS Maybe necessary for Ant 1.5 and XDoclet 1.3
	      <pathelement location="${ant.home}/lib/xmlParserAPIs.jar" />
	      <pathelement location="${ant.home}/lib/xercesImpl.jar" />
	      <pathelement location="${ant.home}/lib/bcel.jar" />
	      <pathelement location="${xdoclet.home}/lib/xjavadoc.jar" />
	-->
		<fileset dir="${xdoclet.home}/lib">
			<include name="*.jar" />
		</fileset>

		<pathelement location="${jboss.client}/log4j.jar" />
		<pathelement location="${jboss.client}/jboss-j2ee.jar" />
		<pathelement location="${jboss.client}/jnp-client.jar" />
		<pathelement location="${jboss.client}/jbossmq-client.jar" />
		<pathelement location="${jboss.client}/jbosssx-client.jar" />
		<pathelement location="${jboss.client}/concurrent.jar" />
		<pathelement location="${jboss.client}/jaas.jar" />
		<pathelement location="${jboss.lib}/jboss-jmx.jar" />
		<pathelement location="${jboss.home}/server/${jboss.configuration}/lib/jbosssx.jar" />
		<pathelement location="${jboss.home}/server/${jboss.configuration}/lib/mail.jar" />
		<pathelement location="${jboss.home}/server/${jboss.configuration}/lib/javax.servlet.jar" />
		<pathelement location="${build.dir}" />
	</path>

	<tstamp>
		<format property="TODAY" pattern="d-MM-yy" />
	</tstamp>

	<target name="xdoclet-generate" depends="javac">
		<taskdef name="ejbdoclet" classname="xdoclet.modules.ejb.EjbDocletTask" classpathref="base.path" />

		<ejbdoclet destdir="${build.dir}\test" excludedtags="@version,@author" force="true">
			<fileset dir="${src.server}">
				<include name="**/*Bean.java" />
			</fileset>

			<!--<dataobject /> only entity beans-->

			<!--<packageSubstitution packages="session,entity" substituteWith="interfaces" />-->
			<!--    <valueobject/>only entity beans-->
			<!--<remoteinterface pattern="{0}Remote" />
			<localinterface pattern="{0}" />-->
			<remoteinterface/>
			<localinterface/>
			<homeinterface />
			<localhomeinterface />
			<entitybmp />
			<entitycmp />
			<session />


			<deploymentdescriptor  destdir="${build.dir}/ejb/META-INF"/> <!-- funktioniert -->
			<jboss version="3.0" securityDomain="java:/jaas/samples" preferredRelationMapping="relation-table" datasource="java:/DefaultDS" datasourcemapping="Hypersonic SQL" destdir="${build.dir}/ejb/META-INF" />
		</ejbdoclet>
	</target>



</project>

Was habe ich falsch gemacht? Wäre für Hilfe sehr dankbar. (Ich nutze Eclipse ohne Plugins)

cu

rogerssocke
 
Ich konnte mein Problem lösen. Es lag daran, dass ich das Fileset base.dir machen müssen, oder in der Bean das Package entfernen müsste.
 

Neue Beiträge

Zurück