Title: RE: [JBoss-user] ejbCreate help

Chris,

This is a nice simple one, for each create(...) method in the home interface you need one ejbCreate(...) and one ejbPostCreate(...) method. In your implementation you have two create methods in the home interface but only one in the ikmplementation class. The arguments to the create(...) method must match the argumaents to the corresponding ejbCreate(...) and postCreate(...) methods.

Also as you are doing the database access calls yourself this should be a Bean Managed Persistance bean.

The documentation that comes with the Sun's J2EE developers kit at http://java.sun.com/j2ee/j2sdkee/techdocs/guides/ejb/html/Entity3.html#12223 has more info.

Hope this helps,
Paul

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Chris Tragas
Sent: 07 June 2001 09:56
To: '[EMAIL PROTECTED]'
Subject: [JBoss-user] ejbCreate help


Hi.

I've been on this problem for days now and I'm crying out for some help.

What I am trying to achive is to have a cmp bean that is mapped to a
database table in which the primary key is also an identity column (ie self
incrementing) I've read a lot of the queries and answers that have been sent
but I havent found a solution that suffices.

Versions i'm using are: JBoss 2.2.2 with Tomcat 3.2.1 and SQL Server 7 on an
NT4 server.

What I'm trying to achieve is when i create a new CustomerDetails Bean via
the Home.create method I want the ejbCreate method to look up the database
to find the max(company_id) and assign the primary key value of the new
CustomerDetails Bean i'm trying to create to max(company_id) + 1;

I successfully deploy the bean (sometimes, I wont even begin to explain the
inconsistencies I've been experiencing with Jboss deployment - for instance.
it spits out error messages regarding method types that don't even exist- is
there a caching issue here???);
Then I have a jsp client that access the cmp bean CustomerDetails. When I
reference home.create() method the container management tries to insert into
the database a row with the column value of the primary key as null;
I assumed that when calling the home.create() method, the corresponding
ejbCreate method in the remote bean CustomerDetailsEJB would be called; but
it doesnt appear to be getting there and I have no way of telling;

HELP? Please? Anyone? Things are growing out of my forehead that shouldnt be
as a result of this "hic-up";

Thanks in advance.

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
My table definition is:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

CREATE TABLE COMPANY_DETAILS (
        COMPANY_ID              numeric (18, 0) NOT NULL ,  // this column
is the identify (self incrementing) column
        COMPANY_NAME    varchar (255) NULL ,
        COMPANY_ABN     varchar (20) NULL ,
        COMPANY_DESC    varchar (255) NULL ,
        COMPANY_LOGO_IMG        varchar (255) NULL
)

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
My Home class is as follows:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

package com.atomicmedia.totalpromoter.dao.companydetails;

import java.rmi.RemoteException;

import javax.ejb.*;

public interface CompanyDetailsHome extends EJBHome {

    /**
     * create a new CompnayDetails Record
        public CompanyDetails create(String id)
                throws RemoteException, FinderException;
     */

    /**
     * Find a CompnayDetails Record by the primary key
     */
    public CompanyDetails findByPrimaryKey(Integer aKey)
        throws RemoteException, FinderException;

    /**
     * create an ejb
     */
    public CompanyDetails create()
        throws RemoteException, CreateException;
}

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
My Entity Bean is as follows
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

package com.atomicmedia.totalpromoter.dao.companydetails;

import javax.ejb.*;
import javax.naming.*;
import java.sql.*;

public class CompanyDetailsEJB implements EntityBean {
    EntityContext ejbContext;

    public Integer companyId;
 
   /* Container managed fields */
    public String companyName;
    public String companyAbn;
    public String companyDesc;
    public String companyLogoImg;

    public CompanyDetailsEJB() {
    }

    public void setEntityContext(EntityContext context){
        ejbContext = context;
    }

    public void unsetEntityContext(){
        ejbContext = null;
    }

        private Connection getConnection() throws SQLException,
javax.naming.NamingException {
                InitialContext jndiContext = new InitialContext();
                javax.sql.DataSource source = (javax.sql.DataSource)
jndiContext.lookup("java:TotalPromoterPool");
                return source.getConnection();
        }

    public Integer ejbCreate() {

                Integer cId = null;
                Connection con = null;

                try {
                        con = this.getConnection();
                        PreparedStatement sqlStmt =
con.prepareStatement("INSERT INTO company_details " +
       
"(company_name " +
                                                    ",company_abn " +
                                                    ",company_desc " +
                                                    ",company_logo_img) " +
                                                    "VALUES " +
 
"(null,null,null,null)");
                        sqlStmt.execute();
                        sqlStmt = con.prepareStatement("SELECT
MAX(company_id) FROM company_details");
                        ResultSet rs = sqlStmt.executeQuery();
                        if (rs.next())
                                cId = new Integer(rs.getInt("COMPANY_ID"));
                }

                catch (SQLException sqle) {
                        throw new EJBException(sqle);
                }

                catch (javax.naming.NamingException e) {
                        throw new EJBException(e);
                }

                finally {
                        try {
                                if (con!=null)
                                        con.close();
                        }
                        catch (SQLException sqle) {
                                throw new EJBException(sqle);
                        }
                }

                this.companyId = cId;
                return cId;
    }

    public void ejbPostCreate() {
    }


    public void ejbActivate() {
    }

    public void ejbPassivate() {
    }

    public void ejbLoad() {
    }

    public void ejbStore() {
    }

    public void ejbRemove() {
    }

    public void setCompanyAbn(java.lang.String _companyAbn) {
        companyAbn = _companyAbn;
    }

    public java.lang.String getCompanyAbn() {
        return companyAbn;
    }

    public void setCompanyDesc(java.lang.String _companyDesc) {
        companyDesc = _companyDesc;
    }
    public java.lang.String getCompanyDesc() {
        return companyDesc;
    }

    public void setCompanyLogoImg(java.lang.String _companyLogoImg) {
        companyLogoImg = _companyLogoImg;
    }

    public java.lang.String getCompanyLogoImg() {
        return companyLogoImg;
    }

    public void setCompanyName(java.lang.String _companyName) {
        companyName = _companyName;
    }

    public java.lang.String getCompanyName() {
        return companyName;
    }
}



Chris Tragas
-----------------------------------------
[EMAIL PROTECTED]
+61 3 9695 5711 direct
+61 3 0402 28 10 20 mobile
-----------------------------------------
a t o m i c m e d i a
Leading Partners Online

Level 1 / 216 City Road
Southbank, Melbourne, Vic 3006
Australia.

+61 3 9695 5777 tel
+61 3 9695 5700 fax
-----------------------------------------
www.atomicmedia.com
-----------------------------------------



_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to