I am trying to deploy a CMP 2.0 entity bean with Service Pack 1, which maps
the bean to a SQL Server 2000 table that already exists, where it's primary
key field is an identity.

The table looks like this and was created by the same bean by JRun before I
installed Service Pack 1:
curDate         deciaml
platformId      int
referer         nvarchar
PK transactionId        numeric
clientId        nvarchar
transType       int
sessionId       nvarchar
transactionschema$JRunID

I changed the table so that the transactionId Primary Key is an identity
field.

My bean code looks like
package envelope;

import javax.ejb.EJBObject;
import java.rmi.RemoteException;
import java.util.Date;

/**
 * <p>Title: Transaction Bean</p>
 * <p>Description: Bean to handle TMX e-mail transactions.</p>
 * <p>Copyright: Copyright (c) 2002</p>
 * <p>Company: TMX Interactive</p>
 * @author Bob Jacobs
 * @version 1.0
 */

public interface Transaction extends EJBObject {
  public long getTransactionId();
  public void setTransactionId(long transactionId);
  public String getClientId();
  public void setClientId(String clientId);
  public long getTransType();
  public void setTransType(int transType);
  public int getPlatformId();
  public void setPlatformId(int platformId);
  public String getSessionId();
  public void setSessionId(String sessionId);
  public String getReferer();
  public void setReferer(String referer);
  public Date getCurDate();
  public void setCurDate(Date curDate);
}
***********************************************************************
package envelope;

import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.EJBException;
import javax.ejb.CreateException;
import java.rmi.RemoteException;
import javax.ejb.FinderException;
import java.util.Date;

/**
 * <h2>Transaction Bean</h2>
 * <p>A bean to handle TMX's e-mail transactions.</p>
 */
public abstract class TransactionBean implements EntityBean {
  /**
  * Bean's entity context.
  */
  private EntityContext context;

  /**
  * Callback method.
  */
  public void ejbLoad() throws RemoteException { }

  /**
  * Callback method.
  */
  public void ejbStore() throws RemoteException { }

  /**
  *  Save the EntityContext
  */
  public void setEntityContext(EntityContext context) throws RemoteException
{
    this.context = context;
  }

  /**
  * Callback method.
  */
  public void unsetEntityContext() throws RemoteException, EJBException {
    this.context = null;
  }

  /**
  * Callback method.
  */
  public void ejbRemove() throws RemoteException { }

  /**
  * Callback method.
  */
  public void ejbActivate() throws RemoteException { }

  /**
  * Callback method.
  */
  public void ejbPassivate() throws RemoteException { }


  /*
  public java.lang.Long ejbCreate(java.lang.Long transactionId,
    String clientId, java.lang.Integer transType,
      java.lang.Integer platformId, String sessionId,
      String referer, Date curDate)
        throws RemoteException, CreateException {
    setTransactionId(transactionId.longValue());
    setClientId(clientId);
    setTransType(transType.intValue());
    setPlatformId(platformId.intValue());
    setSessionId(sessionId);
    setReferer(referer);
    setCurDate(curDate);
    return null;
  }
*/

/**
  * <p>Callback method to create an instance (row).
  *  @param transactionId - Unique id of transaction
  *  @param clientId - Client's client id
  *  @param transType - The transaction type id
  *  @param platformId - The id of the users platform
  *  @param sessionId - The id of the users session
  *  @param curDate - The time of the transaction
  * <p>This method must match the create method coded in the home
interface.</p>
  */


  public java.lang.Long ejbCreate(String clientId, java.lang.Integer
transType,
      java.lang.Integer platformId, String sessionId, String referer,
      Date curDate)
        throws RemoteException, CreateException {
    setClientId(clientId);
    setTransType(transType.intValue());
    setPlatformId(platformId.intValue());
    setSessionId(sessionId);
    setReferer(referer);
    setCurDate(curDate);
    return null;
  }


  /*
  public void ejbPostCreate(java.lang.Long transactionId, String clientId,
      java.lang.Integer transType,
      java.lang.Integer platformId, String sessionId, String referer,
      Date curDate) throws RemoteException, CreateException { }
*/

  /**
  * <p>Required callback method.</p>.
  *  @param transactionId - Unique id of transaction
  *  @param clientId - Client's client id
  *  @param transType - The transaction type id
  *  @param platformId - The id of the users platform
  *  @param sessionId - The id of the users session
  *  @param curDate - The time of the transaction
  */
  public void ejbPostCreate(String clientId, java.lang.Integer transType,
      java.lang.Integer platformId, String sessionId, String referer,
      Date curDate) throws RemoteException, CreateException { }
  /**
  * CMP field methods
  */
  public abstract long getTransactionId();
  public abstract void setTransactionId(long transactionId);
  public abstract String getClientId();
  public abstract void setClientId(String clientId);
  public abstract int getTransType();
  public abstract void setTransType(int transType);
  public abstract int getPlatformId();
  public abstract void setPlatformId(int platformId);
  public abstract String getSessionId();
  public abstract void setSessionId(String sessionId);
  public abstract String getReferer();
  public abstract void setReferer(String referer);
  public abstract Date getCurDate();
  public abstract void setCurDate(Date curDate);
}
***************************************************************************
package envelope;

import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import java.rmi.RemoteException;
import java.util.Date;
import java.util.Collection;

/**
 * <p>Title: Transaction Bean</p>
 * <p>Description: Entity Bean Representing a TMX Transaction</p>
 * <p>Copyright: Copyright (c) 2002</p>
 * <p>Company: TMX Interactive</p>
 * @author Bob Jacobs
 * @version 1.0
 */

public interface TransactionHome extends EJBHome {

/*
  public Transaction create(java.lang.Long transactionId, String clientId,
      java.lang.Integer transType, java.lang.Integer platformId,
      String sessionId, String referer, Date curDate)
          throws RemoteException, CreateException;
*/
  public Transaction create(String clientId,
    java.lang.Integer transType, java.lang.Integer platformId,
    String sessionId, String referer, Date curDate)
      throws RemoteException, CreateException;

  public Transaction findByPrimaryKey(java.lang.Long transactionId)
      throws FinderException, RemoteException;

  public Collection findAll()
      throws FinderException, RemoteException;

  public Collection findElementsBySession(String sessionId)
      throws FinderException, RemoteException;
}
***********************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise
JavaBeans 2.0//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd";>
<ejb-jar>
        <enterprise-beans>
                <entity>
                        <ejb-name>Transaction</ejb-name>
                        <ejb-class>envelope.TransactionBean</ejb-class>
                        <home>envelope.TransactionHome</home>
                        <remote>envelope.Transaction</remote>
                        <persistence-type>Container</persistence-type>
                        <prim-key-class>java.lang.Long</prim-key-class>
                        <reentrant>True</reentrant>
                        <primkey-field>transactionId</primkey-field>
        
<abstract-schema-name>transactionschema</abstract-schema-name>
                        <cmp-version>2.x</cmp-version>
                        <cmp-field>
                                <field-name>transactionId</field-name>
                        </cmp-field>
                        <cmp-field>
                                <field-name>clientId</field-name>
                        </cmp-field>
                        <cmp-field>
                                <field-name>transType</field-name>
                        </cmp-field>
                        <cmp-field>
                                <field-name>platformId</field-name>
                        </cmp-field>
                        <cmp-field>
                                <field-name>sessionId</field-name>
                        </cmp-field>
                        <cmp-field>
                                <field-name>referer</field-name>
                        </cmp-field>
                        <cmp-field>
                                <field-name>curDate</field-name>
                        </cmp-field>
                        <query>
                                <query-method>
                                        <method-name>findAll</method-name>
                                        <method-params />
                                </query-method>
        
<return-type-mapping>Local</return-type-mapping>
                                <ejb-ql>SELECT OBJECT(o) FROM
transactionschema AS o</ejb-ql>
                        </query>
                        <query>
                                <query-method>
        
<method-name>findElementsBySession</method-name>
                                        <method-params>
        
<method-param>java.lang.String</method-param>
                                        </method-params>
                                </query-method>
        
<return-type-mapping>Local</return-type-mapping>
                                <ejb-ql>SELECT OBJECT(o) FROM
transactionschema AS o WHERE o.sessionId = ?1</ejb-ql>
                        </query>
                </entity>
        </enterprise-beans>
</ejb-jar>
****************************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jrun-ejb-jar PUBLIC "-//Macromedia, Inc.//DTD jrun-ejb-jar
4.0//EN" "http://jrun.macromedia.com/dtds/jrun-ejb-jar.dtd";>
<jrun-ejb-jar>
  <source>development</source>
  <enterprise-beans>
    <entity>
      <ejb-name>Transaction</ejb-name>
      <jndi-name>Transaction</jndi-name>
      <instance-pool>
        <maximum-size>5</maximum-size>
        <minimum-size>1</minimum-size></instance-pool>
      <jdbc-mappings>
        <create-table>false</create-table>
        <delete-table>false</delete-table>
    <!--    <jdbc-mapping>
          <statement>
            <action>CREATE TABLE "transactionschema" ( "transactionId"
NUMERIC(19,0) , "clientId" NVARCHAR(255) , "transType" INTEGER ,
"platformId" INTEGER , "sessionId" NVARCHAR(255) , "referer" NVARCHAR(255) ,
"curDate" DATETIME )</action></statement>
          <name>createTable</name></jdbc-mapping>-->
        <jdbc-mapping>
          <statement>
            <params>
          <!--    <param>
                <name>transactionId</name>
                <type>BIGINT</type></param> -->
              <param>
                <name>clientId</name>
                <type>VARCHAR</type></param>
              <param>
                <name>transType</name>
                <type>INTEGER</type></param>
              <param>
                <name>platformId</name>
                <type>INTEGER</type></param>
              <param>
                <name>sessionId</name>
                <type>VARCHAR</type></param>
              <param>
                <name>referer</name>
                <type>VARCHAR</type></param>
              <param>
              <name>curDate</name>
              <type>DATE</type></param></params>
            <action>INSERT INTO "transactionschema" ( "clientId" ,
"transType" , "platformId" , "sessionId" , "referer" , "curDate" ) VALUES (?
, ? , ? , ? , ? , ? )</action></statement>
          <name>create</name></jdbc-mapping>
        <jdbc-mapping>
          <statement>
            <params>
              <param>
              <name>transactionId</name>
              <type>BIGINT</type></param></params>
            <fields>
              <field>transactionId</field>
              <field>clientId</field>
              <field>transType</field>
              <field>platformId</field>
              <field>sessionId</field>
              <field>referer</field>
              <field>curDate</field></fields>
            <action>SELECT "transactionId" , "clientId" , "transType" ,
"platformId" , "sessionId" , "referer" , "curDate" FROM "transactionschema"
WHERE "transactionId" = ?</action></statement>
          <name>load</name></jdbc-mapping>
        <jdbc-mapping>
          <statement>
            <params>
              <param>
              <name>transactionId</name>
              <type>BIGINT</type></param></params>
            <fields>
              <field>transactionId</field></fields>
            <action>SELECT "transactionId" FROM "transactionschema" WHERE
"transactionId" = ?</action></statement>
          <name>findByPrimaryKey</name></jdbc-mapping>
        <jdbc-mapping>
          <statement>
            <params>
              <param>
                <name>transactionId</name>
                <type>BIGINT</type></param>
              <param>
                <name>clientId</name>
                <type>VARCHAR</type></param>
              <param>
                <name>transType</name>
                <type>INTEGER</type></param>
              <param>
                <name>platformId</name>
                <type>INTEGER</type></param>
              <param>
                <name>sessionId</name>
                <type>VARCHAR</type></param>
              <param>
                <name>referer</name>
                <type>VARCHAR</type></param>
              <param>
                <name>curDate</name>
                <type>DATE</type></param>
              <param>
              <name>transactionId</name>
              <type>BIGINT</type></param></params>
            <action>UPDATE "transactionschema" SET "transactionId" = ? ,
"clientId" = ? , "transType" = ? , "platformId" = ? , "sessionId" = ? ,
"referer" = ? , "curDate" = ? WHERE "transactionId" = ?</action></statement>
          <name>store</name></jdbc-mapping>
        <jdbc-mapping>
          <statement>
            <params>
              <param>
              <name>transactionId</name>
              <type>BIGINT</type></param></params>
            <action>DELETE FROM "transactionschema" WHERE "transactionId" =
?</action></statement>
          <name>remove</name></jdbc-mapping>
        <jdbc-mapping>
          <statement>
            <action>DROP TABLE "transactionschema"</action></statement>
          <name>deleteTable</name></jdbc-mapping>
        <jdbc-mapping>
          <statement>
            <fields>
              <field>transactionId</field></fields>
            <action>SELECT "o"."transactionId" FROM "transactionschema" "o"
WHERE ("o"."sessionId" = ?1 )</action></statement>
          <name>findElementsBySession</name></jdbc-mapping>
        <jdbc-mapping>
          <statement>
            <fields>
              <field>transactionId</field></fields>
            <action>SELECT "o"."transactionId" FROM "transactionschema"
"o"</action></statement>
          <name>findAll</name></jdbc-mapping>
        <table-name>transactionschema</table-name>
        <object-class>envelope.TransactionBean</object-class>
 
<primary-key-class>java.lang.Long</primary-key-class></jdbc-mappings>
      <always-dirty>false</always-dirty>
      <commit-option>B</commit-option>
      <multiplexing>true</multiplexing>
      <cluster-home>true</cluster-home>
      <cluster-object>true</cluster-object>
      <cache-size>100</cache-size></entity>
  </enterprise-beans>
</jrun-ejb-jar>
**************************************************************************
According to the code and the mapping, when a new bean is created, the
transactionId is not inserted into the database and should be generated by
the database since it is an identity.
However, when I try to create the bean I get the following exception:
javax.ejb.DuplicateKeyException javax.ejb.DuplicateKeyException at
jrunx.persistence.JDBCPersistenceStore.create(JDBCPersistenceStore.java:86)
at
jrun.ejb.persistence.ContainerManagedEntityPersistenceManager.create(Contain
erManagedEntityPersistenceManager.java:77) at
jrun.ejb.EntityContainer.createHome(EntityContainer.java:284) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:42
) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
java:28) at java.lang.reflect.Method.invoke(Method.java:313) at
jrun.ejb.interceptors.InvokerInterceptor.invokeHomeMethod(InvokerInterceptor
java:101) at
jrun.ejb.interceptors.EntitySynchronizationInterceptor.invokeHomeMethod(Enti
tySynchronizationInterceptor.java:39) at
jrun.ejb.interceptors.EntityInstanceInterceptor.invokeHomeMethod(EntityInsta
nceInterceptor.java:112) at
jrun.ejb.interceptors.ContainerManagedTransactionInterceptor.invokeRequired(
ContainerManagedTransactionInterceptor.java:302) at
jrun.ejb.interceptors.ContainerManagedTransactionInterceptor.invokeTransacte
dMethod(ContainerManagedTransactionInterceptor.java:140) at
jrun.ejb.interceptors.TransactionInterceptor.invokeHomeMethod(TransactionInt
erceptor.java:123) at
jrun.ejb.interceptors.EJBSecurityInterceptor.invokeHomeMethod(EJBSecurityInt
erceptor.java:54) at
jrun.ejb.ClientInvokableContainer.invokeHomeMethod(ClientInvokableContainer.
java:282) at
jrun.ejb.invocation.RemoteInvocationProxyImpl.invoke(RemoteInvocationProxyIm
pl.java:107) at jrunx.rmi.RMIBroker.invokeEJB(RMIBroker.java:233) at
jrunx.rmi.RMIBroker.invoke(RMIBroker.java:140) at
sun.reflect.GeneratedMethodAccessor39.invoke(Unknown Source) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
java:28) at java.lang.reflect.Method.invoke(Method.java:313) at
sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:256) at
sun.rmi.transport.Transport$1.run(Transport.java:151) at
java.security.AccessController.doPrivileged(Native Method) at
sun.rmi.transport.Transport.serviceCall(Transport.java:147) at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:463) at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:7
04) at java.lang.Thread.run(Thread.java:539) 

Why am I getting a DuplicateKeyException when the database should just
increment that transactionId field?


Any help would be most appreciated.


Thanks,
Bob
______________________________________________________________________
Your ad could be here. Monies from ads go to support these lists and provide more 
resources for the community. http://www.fusionauthority.com/ads.cfm
Archives: http://www.mail-archive.com/[email protected]/
Unsubscribe: http://www.houseoffusion.com/index.cfm?sidebar=lists

Reply via email to