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]