How to map cmp bean to database
rotbart Nov 20, 2005 1:48 PMHello, dear stuff!
I am newbie in EJB, here is my problem description
1. I use Xdoclet
2. Using ODBC I created datasource to MsAccess , and it works (tested!).
I want to work with table called "table1"
3. I Created CMP Ejb , Lookup returns the object, no any problem at this step
4. But findByPrimaryKey fails! My table isn't emty, it contains a couple of lines.
The most strange is the error I got:
"Find failed: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]
The Microsoft Jet database engine cannot find the input table or query 'Person'.
Make sure it exists and that its name is spelled correctly."
If I rename my table1 to Person - it works!!!!
... and the question is how to map EJB to table????
Ejb jar contains line
<abstract-schema-name>table1</abstract-schema-name>
As I understood, this is the place where I refer my EJB to particular table.
Am I wrong?
I use eclipce plugin , so maybe it has some "bugs".... Hard to believe,
but possible?
My class starts as follows:
/**
* @ejb.bean name="Person"
* display-name="Name for Person"
* description="Description for Person"
* jndi-name="ejb/PersonBean"
* primkey-field = "numberFld"
* type="CMP"
* cmp-version="2.x"
* view-type="both"
* schema = "table1"
*
*
*/
public abstract class PersonBean implements EntityBean {
........
My ejb-jar as follows
<?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 >
<![CDATA[No 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 markup for those beans.
-->
<!-- Entity Beans -->
<![CDATA[Description for Person]]>
<display-name>Name for Person</display-name>
<ejb-name>Person</ejb-name>
DbEjb.interfaces.PersonHome
DbEjb.interfaces.Person
<local-home>DbEjb.interfaces.PersonLocalHome</local-home>
DbEjb.interfaces.PersonLocal
<ejb-class>DbEjb.ejb.PersonCMP</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Double</prim-key-class>
False
<cmp-version>2.x</cmp-version>
<abstract-schema-name>table1</abstract-schema-name>
<cmp-field >
<![CDATA[Getter for CMP Field stringFld]]>
<field-name>stringFld</field-name>
</cmp-field>
<cmp-field >
<![CDATA[Getter for CMP Field numberFld]]>
<field-name>numberFld</field-name>
</cmp-field>
<cmp-field >
<![CDATA[Getter for CMP Field dateFld]]>
<field-name>dateFld</field-name>
</cmp-field>
<primkey-field>numberFld</primkey-field>
<!-- Write a file named ejb-finders-PersonBean.xml if you want to define extra finders. -->
<!--
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 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 -->
<assembly-descriptor >
<!--
To add additional assembly descriptor info here, add a file to your
XDoclet merge directory called assembly-descriptor.xml that contains
the <assembly-descriptor></assembly-descriptor> markup.
-->
<!-- finder permissions -->
<!-- transactions -->
<!-- finder transactions -->
</assembly-descriptor>
</ejb-jar>