Try adding <order>id</order>... I do not know whether this helps, but our
version of jBoss show deployment warnings if you do not provide ORDER BY
clause...

Alexander Klyubin

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Eric Broda
Sent: Monday, January 15, 2001 17:01
To: [EMAIL PROTECTED]
Subject: [jBoss-User] Custom Finder Question


Hello,

I have managed to get my Jboss/Tomcat implementation working well and I am
impressed with Jboss's capabilities and ease of use.

I have a number of servlet/EJBs working, howevever, I have been having
trouble with a custom finder method.  For backward compatibility to an
existing package I am trying to integrate, I need a generic "findByColumn"
finder.  This finder method needs to get information based upon a column
name parameter and column
value paramter.  The SELECT generated should be something like:

SELECT id from table_name where ? = ?

The first "?" is the column name and the second "?" is the collumn value.

I thought I setup the finder properly:
<jaws>
:
      <finder>
        <name>findColumn</name>
        <query> {0} = {1} </query>
        <order></order>
      </finder>
:
</jaws>

And I defined the "findColumn" method in the home interface:

public EmployeeEntity findColumn(
String theColumnName,
String theColumnValue )
throws RemoteException, FinderException;


The log file provides a little bit of information, but not enough to be that
helpful.  Unlike the other SQL calls, the one I am having problems with (the
last one in the server log) does not display any parameters.

I thought I followed the manual correctly and I looked through the mail
archives but with no luck yet.

Thoughts/advice?

Regards,
Eric Broda
[EMAIL PROTECTED]


RELEVANT INFO:

Version: Jboss 2.0-FINAL with Tomcat / Sun JDK 1.3
OS: Windows/NT 4.0, SP4
DB: MS/Access (going to MS SQL Server later...)

*****

THE LOG (the last portions of it)

[Default] 23 services and 4 other MBeans started.
[Default] Shutdown hook added
[Default] jBoss 2.0 FINAL Started
[Auto deploy] Auto deploy of
file:/I:/OpenSource/jboss/jBoss-2.0_FINAL/deploy/mbgttr.ear
[J2EE Deployer] Deploy J2EE application:
file:/I:/OpenSource/jboss/jBoss-2.0_FINAL/deploy/mbgttr.ear
[J2EE Deployer] Could not delete temporary file:
/i:/OpenSource/jboss/jBoss-2.0_FINAL/bin/../tmp/deploy/copy1001.zip
[J2EE Deployer] Create application mbgttr.ear
[J2EE Deployer] Installing web package: mbgttr.war
[J2EE Deployer] Installing EJB package: mbgttr.jar
[J2EE Deployer] Starting module mbgttr.jar
[Container factory]
Deploying:file:/i:/OpenSource/jboss/jBoss-2.0_FINAL/bin/../tmp/deploy/mbgttr
.ear/ejb1003.jar
[Container factory] Loading ejb-jar.xml :
jar:file:/i:/OpenSource/jboss/jBoss-2.0_FINAL/bin/../tmp/deploy/mbgttr.ear/e
jb1003.jar!/META-INF/ejb-jar.xml
[Container factory] Loading standardjboss.xml :
file:/I:/OpenSource/jboss/jBoss-2.0_FINAL/conf/default/standardjboss.xml
[Container factory]
jar:file:/i:/OpenSource/jboss/jBoss-2.0_FINAL/bin/../tmp/deploy/mbgttr.ear/e
jb1003.jar!/META-INF/jboss.xml
found. Overriding defaults
[Verifier] Verifying
file:/i:/OpenSource/jboss/jBoss-2.0_FINAL/bin/../tmp/deploy/mbgttr.ear/ejb10
03.jar
[Verifier] EmployeeEntityEjb: Verified.
[Container factory] Deploying EmployeeEntityEjb
[Container factory] Container Invoker RMI Port='4444'
[Container factory] Container Invoker Optimize='true'
[JAWS] Initializing JAWS plugin for EmployeeEntityEjb
[JAWS] Loading standardjaws.xml :
file:/I:/OpenSource/jboss/jBoss-2.0_FINAL/conf/default/standardjaws.xml
[JAWS]
jar:file:/i:/OpenSource/jboss/jBoss-2.0_FINAL/bin/../tmp/deploy/mbgttr.ear/e
jb1003.jar!/META-INF/jaws.xml
found. Overriding defaults
[JAWS] Init SQL: CREATE TABLE zzz_employee (employee_sin
VARCHAR(50),employee_age VARCHAR(50),employee_name VARCHAR(50),employee_id
VARCHAR(50))
[JAWS] Destroy SQL: DROP TABLE zzz_employee
[JAWS] Exists SQL: SELECT COUNT(*) FROM zzz_employee WHERE employee_id=?
[JAWS] findColumn SQL: SELECT employee_id FROM zzz_employee WHERE  ? = ?
[JAWS] FindAll SQL: SELECT employee_id FROM zzz_employee
[JAWS] Create SQL: INSERT INTO zzz_employee
(employee_sin,employee_age,employee_name,employee_id) VALUES (?,?,?,?)
[JAWS] Remove SQL: DELETE FROM zzz_employee WHERE employee_id=?
[JAWS] Load SQL: SELECT employee_sin,employee_age,employee_name,employee_id
FROM
zzz_employee WHERE employee_id=?
[JAWS] Store SQL: UPDATE zzz_employee SET
employee_sin=?,employee_age=?,employee_name=?,employee_id=? WHERE
employee_id=?
[Container factory] Bound EmployeeEntityEjb to ttr/EmployeeEntityEjb
[Bean Cache] Cache policy scheduler started
[Container factory] Deployed application:
file:/i:/OpenSource/jboss/jBoss-2.0_FINAL/bin/../tmp/deploy/mbgttr.ear/ejb10
03.jar
[J2EE Deployer] Starting module mbgttr.war
[EmbeddedTomcat] ContextManager: Adding context Ctx( /mbgttr )
[EmbeddedTomcat] path="/mbgttr" :jsp: init
[J2EE Deployer] J2EE application:
file:/I:/OpenSource/jboss/jBoss-2.0_FINAL/deploy/mbgttr.ear is deployed.
[EmbeddedTomcat] path="/mbgttr" :TestEjb: init
[JAWS] Create, id is 6
[JAWS] Exists command executing: SELECT COUNT(*) FROM zzz_employee WHERE
employee_id=?
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=6
[JAWS] Create command executing: INSERT INTO zzz_employee
(employee_sin,employee_age,employee_name,employee_id) VALUES (?,?,?,?)
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=NULL
[JAWS] Set parameter: idx=2, jdbcType=VARCHAR, value=NULL
[JAWS] Set parameter: idx=3, jdbcType=VARCHAR, value=NULL
[JAWS] Set parameter: idx=4, jdbcType=VARCHAR, value=6
[JAWS] Rows affected = 1
[JAWS] Store command executing: UPDATE zzz_employee SET
employee_sin=?,employee_age=?,employee_name=?,employee_id=? WHERE
employee_id=?
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=NULL
[JAWS] Set parameter: idx=2, jdbcType=VARCHAR, value=NULL
[JAWS] Set parameter: idx=3, jdbcType=VARCHAR, value=Joe Smith
[JAWS] Set parameter: idx=4, jdbcType=VARCHAR, value=6
[JAWS] Set parameter: idx=5, jdbcType=VARCHAR, value=6
[JAWS] Rows affected = 1
[JAWS] Store command executing: UPDATE zzz_employee SET
employee_sin=?,employee_age=?,employee_name=?,employee_id=? WHERE
employee_id=?
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=NULL
[JAWS] Set parameter: idx=2, jdbcType=VARCHAR, value=28
[JAWS] Set parameter: idx=3, jdbcType=VARCHAR, value=Joe Smith
[JAWS] Set parameter: idx=4, jdbcType=VARCHAR, value=6
[JAWS] Set parameter: idx=5, jdbcType=VARCHAR, value=6
[JAWS] Rows affected = 1
[JAWS] Store command executing: UPDATE zzz_employee SET
employee_sin=?,employee_age=?,employee_name=?,employee_id=? WHERE
employee_id=?
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=999 888 777
[JAWS] Set parameter: idx=2, jdbcType=VARCHAR, value=28
[JAWS] Set parameter: idx=3, jdbcType=VARCHAR, value=Joe Smith
[JAWS] Set parameter: idx=4, jdbcType=VARCHAR, value=6
[JAWS] Set parameter: idx=5, jdbcType=VARCHAR, value=6
[JAWS] Rows affected = 1
[JAWS] FindAll command executing: SELECT employee_id FROM zzz_employee
[JAWS] Exists command executing: SELECT COUNT(*) FROM zzz_employee WHERE
employee_id=?
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=6
[JAWS] Store command executing: UPDATE zzz_employee SET
employee_sin=?,employee_age=?,employee_name=?,employee_id=? WHERE
employee_id=?
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=999 888 777
[JAWS] Set parameter: idx=2, jdbcType=VARCHAR, value=28
[JAWS] Set parameter: idx=3, jdbcType=VARCHAR, value=Joe Smith
[JAWS] Set parameter: idx=4, jdbcType=VARCHAR, value=6
[JAWS] Set parameter: idx=5, jdbcType=VARCHAR, value=6
[JAWS] Rows affected = 1
[JAWS] Store command executing: UPDATE zzz_employee SET
employee_sin=?,employee_age=?,employee_name=?,employee_id=? WHERE
employee_id=?
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=999 888 777
[JAWS] Set parameter: idx=2, jdbcType=VARCHAR, value=28
[JAWS] Set parameter: idx=3, jdbcType=VARCHAR, value=Joe Smith
[JAWS] Set parameter: idx=4, jdbcType=VARCHAR, value=6
[JAWS] Set parameter: idx=5, jdbcType=VARCHAR, value=6
[JAWS] Rows affected = 1
[JAWS] Store command executing: UPDATE zzz_employee SET
employee_sin=?,employee_age=?,employee_name=?,employee_id=? WHERE
employee_id=?
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=999 888 777
[JAWS] Set parameter: idx=2, jdbcType=VARCHAR, value=28
[JAWS] Set parameter: idx=3, jdbcType=VARCHAR, value=Joe Smith
[JAWS] Set parameter: idx=4, jdbcType=VARCHAR, value=6
[JAWS] Set parameter: idx=5, jdbcType=VARCHAR, value=6
[JAWS] Rows affected = 1
[JAWS] Store command executing: UPDATE zzz_employee SET
employee_sin=?,employee_age=?,employee_name=?,employee_id=? WHERE
employee_id=?
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=999 888 777
[JAWS] Set parameter: idx=2, jdbcType=VARCHAR, value=28
[JAWS] Set parameter: idx=3, jdbcType=VARCHAR, value=Joe Smith
[JAWS] Set parameter: idx=4, jdbcType=VARCHAR, value=6
[JAWS] Set parameter: idx=5, jdbcType=VARCHAR, value=6
[JAWS] Rows affected = 1
[JAWS] findColumn command executing: SELECT employee_id FROM zzz_employee
WHERE
? = ?



*****

EJB-JAR.XML

<ejb-jar>
  <display-name>TTR Test EJB JAR</display-name>
  <enterprise-beans>

    <entity>
      <description>TTR Test EJB</description>

      <ejb-name>EmployeeEntityEjb</ejb-name>

      <home>com.mbg.ttr.ejb.EmployeeEntityHome</home>
      <remote>com.mbg.ttr.ejb.EmployeeEntity</remote>
      <ejb-class>com.mbg.ttr.ejb.EmployeeEntityEjb</ejb-class>

      <persistence-type>Container</persistence-type>
      <reentrant>False</reentrant>

      <cmp-field><field-name>employee_id</field-name></cmp-field>
      <cmp-field><field-name>employee_name</field-name></cmp-field>
      <cmp-field><field-name>employee_age</field-name></cmp-field>
      <cmp-field><field-name>employee_sin</field-name></cmp-field>
      <prim-key-class>java.lang.String</prim-key-class>
      <primkey-field>employee_id</primkey-field>

    </entity>

  </enterprise-beans>

  <assembly-descriptor>
    <container-transaction>
      <method>
        <ejb-name>EmployeeEntityEjb</ejb-name>
        <method-name>*</method-name>
      </method>
      <trans-attribute>Required</trans-attribute>
    </container-transaction>
  </assembly-descriptor>
</ejb-jar>

*****

JAWS.XML


<jaws>
  <enterprise-beans>
    <entity>
            <ejb-name>EmployeeEntityEjb</ejb-name>
      <table-name>zzz_employee</table-name>
      <create-table>false</create-table>
      <cmp-field>
        <field-name>employee_id</field-name>
        <column-name>employee_id</column-name>
        <jdbc-type>VARCHAR</jdbc-type>
        <sql-type>VARCHAR(50)</sql-type>
      </cmp-field>
      <cmp-field>
        <field-name>employee_name</field-name>
        <column-name>employee_name</column-name>
        <jdbc-type>VARCHAR</jdbc-type>
        <sql-type>VARCHAR(50)</sql-type>
      </cmp-field>
      <cmp-field>
        <field-name>employee_age</field-name>
        <column-name>employee_age</column-name>
        <jdbc-type>VARCHAR</jdbc-type>
        <sql-type>VARCHAR(50)</sql-type>
      </cmp-field>
      <cmp-field>
        <field-name>employee_sin</field-name>
        <column-name>employee_sin</column-name>
        <jdbc-type>VARCHAR</jdbc-type>
        <sql-type>VARCHAR(50)</sql-type>
      </cmp-field>
      <finder>
        <name>findColumn</name>
        <query> {0} = {1} </query>
        <order></order>
      </finder>
    </entity>
  </enterprise-beans>
:
some type mapping stuff
:
</jaws>


*****

JBOSS.XML

<jboss>

  <secure>false</secure>
  <container-configurations />
  <resource-managers />

  <enterprise-beans>
    <entity>
            <ejb-name>EmployeeEntityEjb</ejb-name>
            <jndi-name>ttr/EmployeeEntityEjb</jndi-name>
            <configuration-name></configuration-name>
    </entity>
  </enterprise-beans>

</jboss>


*****

THE SERVLET (calling the "findColumn")

     InitialContext jndiContext = new InitialContext();
      out.print("testBean:2" + ",jndiContext:" + jndiContext + "<BR/>" );

      // The JNDI Name is in the jboss.xml file
      Object ref  = jndiContext.lookup("ttr/EmployeeEntityEjb" );
      out.println("testBean:3" + ",ref:" + ref + "<BR/>" );

      EmployeeEntityHome home = (EmployeeEntityHome)
PortableRemoteObject.narrow
(ref, EmployeeEntityHome.class);
      out.println("testBean:4" + ",home:" + home + "<BR/>" );

      EmployeeEntity bean = home.create( "6" );
      bean.setEmployeeName( "Joe Smith" );
      bean.setEmployeeAge( "28" );
      bean.setEmployeeSin( "999 888 777" );
      out.println("testBean:5" + ",set employee details" + "<BR/>" );

      Collection all = home.findAll();
      out.println("testBean:6" + ",findAll:" + all + "<BR/>" );

      EmployeeEntity foundBean = home.findByPrimaryKey( "6" );
      out.println("testBean:7" + ",findByPrimaryKey[1]:" + foundBean +
"<BR/><BR/>" );

      out.println( "Id: " + foundBean.getEmployeeId() + "<BR/>" );
      out.println( "Name: " + foundBean.getEmployeeName() + "<BR/>" );
      out.println( "Age: " + foundBean.getEmployeeAge() + "<BR/>" );
      out.println( "Sin: " + foundBean.getEmployeeSin() + "<BR/><BR/>" );

      EmployeeEntity foundByColumnBean = home.findColumn( "employee_id", "6"
);
      out.println("testBean:8" + ",foundByColumnBean[3]:" +
foundByColumnBean +
"<BR/>" );

      out.println( "Id: " + foundBean.getEmployeeId() + "<BR/>" );
      out.println( "Name: " + foundBean.getEmployeeName() + "<BR/>" );
      out.println( "Age: " + foundBean.getEmployeeAge() + "<BR/>" );
      out.println( "Sin: " + foundBean.getEmployeeSin() + "<BR/><BR/>" );


*****


THE HOME INTERFACE


public interface EmployeeEntityHome extends EJBHome {

  public EmployeeEntity create( String theEmployeeId ) throws
RemoteException,
CreateException;
  public EmployeeEntity findByPrimaryKey( String theEmployeeId ) throws
RemoteException, FinderException;
  public Collection findAll() throws RemoteException, FinderException;

  public EmployeeEntity findColumn( String theColumnName, String
theColumnValue
) throws RemoteException, FinderException;

}


THE ENTITY BEAN

public class EmployeeEntityEjb implements EntityBean {
  transient private EntityContext ctx;

  public String employee_id;
  public String employee_name;
  public String employee_age;
  public String employee_sin;

  public void setEmployeeId( String theEmployeeId ){ employee_id =
theEmployeeId; }
  public String getEmployeeId() { return( employee_id ); }

  public void setEmployeeName( String theEmployeeName ) { employee_name =
theEmployeeName; }
  public String getEmployeeName() { return( employee_name ); }

  public void setEmployeeAge( String theEmployeeAge ) { employee_age =
theEmployeeAge; }
  public String getEmployeeAge() { return( employee_age ); }

  public void setEmployeeSin( String theEmployeeSin ) { employee_sin =
theEmployeeSin; }
  public String getEmployeeSin() { return( employee_sin ); }

  public void setEntityContext( EntityContext theCtx) throws RemoteException
{
ctx = theCtx; }
  public void unsetEntityContext() throws RemoteException { ctx = null; }

  public String ejbCreate( String theEmployeeId )
  throws RemoteException, CreateException {
    employee_id = theEmployeeId; return( employee_id );
  }

  public void ejbPostCreate( String theEmployeeId ) throws RemoteException,
CreateException {  }

  public void ejbLoad() throws RemoteException {  }
  public void ejbStore() throws RemoteException {  }
  public void ejbRemove() throws RemoteException {  }

  public void ejbActivate() throws RemoteException {  }
  public void ejbPassivate() throws RemoteException {  }

}



*****

THE EJBOBJECT

public interface EmployeeEntity extends EJBObject {

  public abstract void setEmployeeId( String theEmployeeId ) throws
RemoteException;
  public abstract String getEmployeeId() throws RemoteException;

  public abstract void setEmployeeName( String theEmployeeName ) throws
RemoteException;
  public abstract String getEmployeeName() throws RemoteException;

  public abstract void setEmployeeAge( String theEmployeeAge ) throws
RemoteException;
  public abstract String getEmployeeAge() throws RemoteException;

  public abstract void setEmployeeSin( String theEmployeeSin ) throws
RemoteException;
  public abstract String getEmployeeSin() throws RemoteException;

}

_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.



--
--------------------------------------------------------------
To subscribe:        [EMAIL PROTECTED]
To unsubscribe:      [EMAIL PROTECTED]
List Help?:          [EMAIL PROTECTED]



--
--------------------------------------------------------------
To subscribe:        [EMAIL PROTECTED]
To unsubscribe:      [EMAIL PROTECTED]
List Help?:          [EMAIL PROTECTED]

Reply via email to