[jboss-user] [EJB 3.0] - Re: Exception recieving problem
voidhawc
do-not-reply at jboss.com
Wed Sep 27 20:03:43 EDT 2006
We are using jboss-4.0.4.GA-Patch1-installer.jar using the ejb3 profile (not clustered) during installation.
We are using JDK 1.5.0_06-b05 to compile the source with a ANT build script run using ANT 1.6.5.
Just having a look at your code snippets, does the annontation order matter?
Here's the build script for one of the layers.
| <project basedir="." default="build" name="IEDA-BP">
| <!--Loads are the Property files required for this project-->
| <loadproperties srcfile="build/default.properties" />
| <property environment="env" />
| <path id="jboss-libs.classpath">
| <pathelement location="${env.JBOSS_HOME}/client/jnp-client.jar" />
| <pathelement location="${env.JBOSS_HOME}/client/jbosssx-client.jar" />
| <pathelement location="${env.JBOSS_HOME}/client/jboss-j2ee.jar" />
| <pathelement location="${env.JBOSS_HOME}/client/jboss-transaction-client.jar" />
| <pathelement location="${env.JBOSS_HOME}/lib/commons-logging.jar" />
| <pathelement location="${env.JBOSS_HOME}/server/default/deploy/ejb3.deployer/jboss-ejb3.jar" />
| <pathelement location="${env.JBOSS_HOME}/server/default/deploy/ejb3.deployer/jboss-ejb3x.jar" />
| <pathelement location="${env.JBOSS_HOME}/server/default/deploy/ejb3.deployer/jboss-annotations-ejb3.jar" />
| <pathelement location="${env.JBOSS_HOME}/server/default/lib/hibernate3.jar" />
| <pathelement location="${env.JBOSS_HOME}/server/default/lib/ejb3-persistence.jar" />
| <pathelement location="${env.JBOSS_HOME}/server/default/lib/hibernate-annotations.jar" />
| <pathelement location="${env.JBOSS_HOME}/server/default/lib/jboss-remoting.jar" />
| <pathelement location="${env.JBOSS_HOME}/server/default/lib/log4j.jar" />
| <pathelement location="${env.JBOSS_HOME}/server/default/lib/mail.jar" />
| </path>
| <path id="ieda.classpath">
| <path refid="jboss-libs.classpath" />
| <fileset dir="${bp.dir}" includes="**/*.class"/>
| <fileset dir="${lib.dir}" includes="**/*.jar" />
| <fileset dir="${dist.dir}" includes="**/*.jar" />
| </path>
| <target name="init">
| <mkdir dir="${bp.dir}" />
| <mkdir dir="${client.dir}" />
| <mkdir dir="${manifest.location}" />
| <copy includeemptydirs="false" todir="${bp.dir}">
| <fileset dir="${src.dir}" excludes="**/*.launch, **/*.java" />
| <fileset dir="${pd.location}/src" includes="META-INF/*persistence.xml" />
| </copy>
| </target>
| <target name="clean">
| <delete dir="${bp.dir}" />
| <delete dir="${client.dir}" />
| <delete dir="${manifest.location}" />
| <delete>
| <fileset dir="${dist.dir}">
| <include name="**/*.jar" />
| </fileset>
| </delete>
| </target>
| <!--Clean Routines are done here -->
| <target depends="clean" name="cleanall">
| </target>
|
| <!-- Run the builds in the sequence -->
| <!--<antcall target="build-project" />-->
|
| <!--Builds all the dependent subprojects-->
| <target name="build-subprojects">
| </target>
|
| <target depends="init, build-subprojects,build" name="buildEar">
| <!-- create the ear -->
| <ear destfile="${dist.dir}/${bp.filename}.ear" appxml="src/META-INF/application.xml" update="true">
| <fileset dir="${dist.dir}" includes="**/*" />
| </ear>
| </target>
|
| <!-- build the manifest file -->
| <target name="create-manifest">
| <delete>
| <fileset dir="${basedir}">
| <include name="${manifest.file}" />
| </fileset>
| </delete>
| <tstamp>
| <format property="today_aus" pattern="${time.pattern}" locale="en" />
| </tstamp>
| <manifest file="${manifest.file}">
| <attribute name="Version" value="${version}" />
| <attribute name="Class-Path" value="${classpath}" />
| <attribute name="Built-By" value="${built-by}" />
| <attribute name="Built-On" value="${today_aus}" />
| </manifest>
| </target>
|
| <!-- Package the Project -->
| <target depends="init, build-subprojects" name="build">
| <antcall target="create-manifest">
| <param name="classpath" value="${client.classpath}" />
| </antcall>
| <!-- Build client jar -->
| <javac debug="true" debuglevel="${debuglevel}" destdir="${bp.dir}" source="${source}" target="${target}">
| <src path="${pd.location}/${src.dir}" />
| <src path="${generic.location}/${src.dir}" />
| <src path="${src.dir}" />
| <classpath refid="ieda.classpath" />
| </javac>
| <jar destfile="${dist.dir}/${client.filename}.jar" basedir="${bp.dir}" update="true" manifest="${manifest.file}">
| <include name="**/test/**" />
| <include name="**/generic/**" />
| <include name="**/interfaces/**" />
| <include name="**/entities/**" />
| <include name="**/exceptions/**" />
| </jar>
| <!-- Build bp jar -->
| <antcall target="create-manifest">
| <param name="classpath" value="${bp.classpath}" />
| </antcall>
| <jar destfile="${dist.dir}/${bp.filename}.jar" basedir="${bp.dir}" update="true" manifest="${manifest.file}">
| <exclude name="**/test/**" />
| <exclude name="**/generic/**" />
| <exclude name="**/interfaces/**" />
| <exclude name="**/entities/**" />
| <exclude name="**/exceptions/**" />
| </jar>
| </target>
| </project>
|
And here's the build script to create the ear packages
| <project basedir="." default="build" name="IEDA-EAR">
| <!--Loads are the Property files required for this project-->
| <loadproperties srcfile="build/app.properties" />
| <loadproperties srcfile="build/bp.properties" />
| <loadproperties srcfile="build/ui.properties" />
| <loadproperties srcfile="build/test.properties" />
| <property environment="env" />
|
| <!--Clean Routines are done here -->
| <target name="clean">
| <delete>
| <fileset dir="${basedir}">
| <include name="${dist.dir}/*.jar" />
| <include name="${dist.dir}/*.war" />
| </fileset>
| </delete>
| </target>
|
| <!-- Run the builds in the sequence -->
| <!--<antcall target="build-project" />-->
|
| <!--Builds all the BP dependent subprojects-->
| <target name="bp-pim-sub-build">
| <echo message="${ant.project.name}: Building PIM BP Projects" />
| <ant antfile="${bp.pim.location}/build.xml" target="build" inheritall="false" />
| <!--Copy the files to the library-->
| <copy todir="${dist.dir}" description="Copying the Depenedent Libraries" overwrite="true">
| <fileset dir="${bp.pim.location}/${dist.dir}" includes="**/*.jar" />
| </copy>
| </target>
|
|
| <!-- BP Individual app build targets -->
| <target depends="clean, bp-pim-sub-build" name="build-bp-pim">
| <antcall target="buildEar">
| <param name="appxml" value="${bp.pim.appxml}" />
| <param name="ear.filename" value="${bp.ear.filename}" />
| </antcall>
| </target>
|
| <!--Builds all the UI dependent subprojects-->
| <target name="ui-pim-sub-build">
| <echo message="${ant.project.name}: Building PIM UI Projects" />
| <ant antfile="${ui.pim.location}/build.xml" target="build" inheritall="false" />
| <!--Copy the files to the library-->
| <copy todir="${dist.dir}" description="Copying the Depenedent Libraries" overwrite="true">
| <fileset dir="${ui.pim.location}/${dist.dir}" includes="**/*.jar" />
| <fileset dir="${ui.pim.location}/${dist.dir}" includes="**/*.war" />
| </copy>
| </target>
|
| <!-- UI Individual app build targets -->
| <target depends="clean, ui-pim-sub-build" name="build-ui-pim">
| <antcall target="buildEar">
| <param name="appxml" value="${ui.pim.appxml}" />
| <param name="ear.filename" value="${ui.ear.filename}" />
| </antcall>
| </target>
|
| <!--Builds all the TEST dependent subprojects-->
| <target name="test-pim-sub-build">
| <echo message="${ant.project.name}: Building PIM UI Projects" />
| <ant antfile="${test.pim.location}/build.xml" target="build" inheritall="false" />
| <!--Copy the files to the library-->
| <copy todir="${dist.dir}" description="Copying the Depenedent Libraries" overwrite="true">
| <fileset dir="${test.pim.location}/${dist.dir}" includes="**/*.jar" />
| <fileset dir="${test.pim.location}/${dist.dir}" includes="**/*.war" />
| </copy>
| </target>
|
| <!-- TEST Individual app build targets -->
| <target depends="clean, test-pim-sub-build" name="build-test-pim">
| <antcall target="buildEar">
| <param name="appxml" value="${test.pim.appxml}" />
| <param name="ear.filename" value="${test.ear.filename}" />
| </antcall>
| </target>
|
| <target depends="create-manifest" name="buildEar">
| <!-- create the ear -->
| <ear destfile="${dist.dir}/${ear.filename}.ear" appxml="${appxml}" update="true" manifest="${manifest.file}">
| <fileset dir="${dist.dir}" includes="**/*.jar" />
| <fileset dir="${dist.dir}" includes="**/*.war" />
| </ear>
| </target>
|
| <!-- build the manifest file -->
| <target name="create-manifest">
| <delete>
| <fileset dir="${basedir}">
| <include name="${manifest.file}" />
| </fileset>
| </delete>
| <tstamp>
| <format property="today_aus" pattern="${time.pattern}" locale="en" />
| </tstamp>
| <manifest file="${manifest.file}">
| <attribute name="Version" value="${version}" />
| <attribute name="Built-By" value="${built-by}" />
| <attribute name="Built-On" value="${today_aus}" />
| </manifest>
| </target>
|
| <target name="build"></target>
| </project>
|
Here's some code snippets for the actual app.
Remote Interface
| package pitem.pd.interfaces;
|
| import java.util.List;
|
| import javax.ejb.Remote;
|
|
| import pitem.pd.entities.lookup.SpratSpecies;
| import pitem.pd.entities.search.SpratSearch;
| import pitem.pd.exceptions.PimInvalidSearchTermException;
| import sys.generic.JndiLookupSupport;
|
|
| /**
| * @author QuimbyG
| * Remote Interface for the use of the Process Layer for the UserManagement of the PAD2 system.
| *
| */
| @Remote
| public interface QueryManager extends sys.pd.interfaces.QueryManager {
|
| /** JNDI location string */
| public final static String location = JndiLookupSupport.getJndiName(QueryManager.class);
|
| /**
| * Find a SPRAT entry for the given criteria
| * @param searchTerms object containing the search criteria
| * @return a SPRAT species entry
| * @throws PimNoEntityException
| * @throws PimIllegalArgumentException
| * @throws PimInvalidSearchTermException
| * @throws DataLayerException
| */
| public SpratSpecies searchForSpecies(SpratSearch searchTerms) throws PimInvalidSearchTermException, Exception;
| }
|
Stateless Session Bean
| package pitem.pd.managers;
|
| import java.util.ArrayList;
| import java.util.List;
|
| import javax.ejb.ApplicationException;
| import javax.ejb.Stateless;
| import javax.persistence.EntityManager;
| import javax.persistence.NoResultException;
| import javax.persistence.NonUniqueResultException;
| import javax.persistence.PersistenceContext;
| import javax.persistence.Query;
|
| import org.apache.log4j.Logger;
|
|
| import pitem.pd.entities.lookup.SpratSpecies;
| import pitem.pd.entities.search.SpratSearch;
| import pitem.pd.exceptions.PimDataException;
| import pitem.pd.exceptions.PimIllegalArgumentException;
| import pitem.pd.exceptions.PimInvalidSearchTermException;
| import pitem.pd.exceptions.PimNoEntityException;
| import pitem.pd.interfaces.QueryManager;
| import sys.pd.exceptions.DataLayerException;
|
|
| /**
| * @author QuimbyG
| * This class implements the remote interface for PIM queries.
| */
| @ApplicationException(rollback=false)
| public @Stateless class QueryManagerBean implements QueryManager {
|
| /** Inject the entity manager */
| @PersistenceContext(unitName="PITEM")
| private EntityManager manager;
|
| /** Log4j logging */
| static Logger logger = Logger.getLogger(QueryManagerBean.class);
|
| /*
| * (non-Javadoc)
| * @see au.gov.deh.pim.pd.dm.PimQueryManager#searchForSpecies(au.gov.deh.pim.pd.search.SpratSearch)
| */
| public SpratSpecies searchForSpecies(SpratSearch searchTerms) throws PimInvalidSearchTermException,
| PimNoEntityException,
| PimIllegalArgumentException,
| DataLayerException {
| if (searchTerms == null) {
| logger.warn("No search terms passed");
| throw new PimInvalidSearchTermException("searchForSpecies","Null passed",
| "Must have a valid SpratSearch object");
| }
|
| logger.info("search for Species with SpratTerms");
| SpratSpecies result = new SpratSpecies();
|
| /* Query for the taxon id if set */
| if (searchTerms.getTaxon() != null) {
| Integer taxon = searchTerms.getTaxon();
| /* Check if TAXON_ID is valid */
| if (taxon > 0) {
| try {
| result = (SpratSpecies) manager.createQuery("select OBJECT(s) from SpratSpecies s" +
| " WHERE s.taxon = :taxon")
| .setParameter("taxon",taxon)
| .getSingleResult();
| } catch (NonUniqueResultException e) {
| logger.warn("Multiple records");
| throw new PimInvalidSearchTermException("searchForSpecies","Not unique",
| "Query term must return only one result",e);
| } catch (NoResultException e) {
| logger.warn("No record");
| throw new PimNoEntityException("searchForSpecies","No Record","Proposal does not exist",e);
| } catch (IllegalArgumentException e){
| logger.error("Illegal argument",e);
| throw new PimIllegalArgumentException("searchForSpecies", "Illegal Argument", e.toString(), null, e);
| } catch (Throwable e) {
| logger.error("Error with Species Search query",e);
| throw new DataLayerException(PimDataException.ERR_NUMBER, "searchForSpecies", "Unknown", e.toString(), null, e);
| }
| } else {
| logger.warn("invalid taxon id passed");
| throw new PimInvalidSearchTermException("searchForSpecies","taxon is less than zero",
| "Valid taxon must be greater than zero");
| }
| } else if (searchTerms.getScientificName() != null) {
| /* Query for the species name otherwise */
| String s = "%" + replaceWildCards(searchTerms.getScientificName()) + "%";
|
| try {
| result = (SpratSpecies) manager.createQuery("select OBJECT(s) from SpratSpecies s" +
| " WHERE UPPER(s.scientificName) LIKE UPPER(:sciName)")
| .setParameter("sciName", s)
| .getSingleResult();
| } catch (NonUniqueResultException e) {
| logger.warn("Multiple records");
| throw new PimInvalidSearchTermException("searchForSpecies","Not unique",
| "Query term must return only one result",e);
| } catch (NoResultException e) {
| logger.warn("No record");
| throw new PimNoEntityException("searchForSpecies","No Record","Proposal does not exist",e);
| } catch (IllegalArgumentException e){
| logger.error("Illegal argument",e);
| throw new PimIllegalArgumentException("searchForSpecies", "Illegal Argument", e.toString(), null, e);
| } catch (Throwable e) {
| logger.error("Error with Species search query",e);
| throw new DataLayerException(PimDataException.ERR_NUMBER, "searchForSpecies", "Unknown", e.toString(), null, e);
| }
| } else {
| logger.warn("No search terms passed");
| throw new PimInvalidSearchTermException("searchForSpecies","Empty object",
| "Must have a valid SpratSearch object");
| }
| return result;
| }
|
| /** Method to turn standard wildcards into EJBQL wildcards
| *
| * @param s the String to convert
| * @return the converted string
| */
| private String replaceWildCards(String s) {
| logger.debug("replacing wildcards");
|
| s = s.replace("%","_"); // escape all percentage signs
| s = s.replace(' ','%'); // turn spaces into wildcards
| s = s.replace('*','%'); // convert * to % for SQL search
| s = s.replace('?','_'); // convert ? to _ for SQL search
|
| return s;
| }
| }
|
The place where it is called in the Backing Bean to test things
| try {
| SpratSearch s = new SpratSearch(new Integer(-1));
| SpratSpecies t = Qm.searchForSpecies(s);
| result.setDesc("Found " + t.getMigratoryScientificName());
|
| } catch (PimInvalidSearchTermException e) {
|
| result.setDesc(e.getMessage());
| result.setPass(true);
|
| } catch (Exception e) {
| if (e instanceof PimInvalidSearchTermException) {
| PimInvalidSearchTermException t = (PimInvalidSearchTermException) e;
| result.setDesc(t.traceBack());
| result.setPass(true);
| } else {
| result.setDesc(e.toString());
| result.setPass(false);
| e.printStackTrace();
| }
| }
|
If it can identify the correct Exception the test passes otherwise it fails.
Hope this helps clarify what is happening.
Thanks for you time.
Grant
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3974712#3974712
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3974712
More information about the jboss-user
mailing list