We are using Jonas-2-1-1 on a redhat 6.2 linux system.  We are using
bean-managed persistence and are having problems with Jonas not
synching with the database when the bean is modified.  

The ejbStore method is not called when we modify the entity bean.  We
have tried trans-attributes of RequiresNew, Requires, Supported, and
NotSupported.  We have tried demarcating the transaction in the client
with UserTransaction begin/commit methods surrounding the entity bean
update.  And, we have tried the is-modified-method-name tag.  In all
of these attempts the ejbStore method was not called at all.  The only
way we have been able to get Jonas to synch with the database (call
ejbStore) is to use the JonasAdmin sync command, or to shutdown Jonas.

I'm sure we are doing something wrong in the setup.  We've checked
through the docs and mail-list archives, though, and are running out
of ideas about what to try.  We'd really appreciate any suggestions
about what we should try next...

I'll append our ejb-xml.jar and jonas-ejb-xml.jar files at the end,
along with a couple of code snippets.


Thanks very much for any information,

Laurie Tynor
[EMAIL PROTECTED]


----------------------------------------------------------------------

ejb-xml.jar:  

(sorry about the format here - this file was autogenerated.  The
problem entity bean is enClient)

<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' 
'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'><ejb-jar><enterprise-beans><session><ejb-name>slSiteBean</ejb-name><home>com.WP.ejb.slSiteHome</home><remote>com.WP.ejb.slSite</remote><ejb-class>com.WP.ejb.slSiteBean</ejb-class><session-type>Stateless</session-type><transaction-type>Container</transaction-type></session><session><ejb-name>scSiteBean</ejb-name><home>com.WP.ejb.scSiteHome</home><remote>com.WP.ejb.scSite</remote><ejb-class>com.WP.ejb.scSiteBean</ejb-class><session-type>Stateless</session-type><transaction-type>Container</transaction-type></session>
<session><ejb-name>slAddressBean</ejb-name><home>com.WP.ejb.slAddressHome</home><remote>com.WP.ejb.slAddress</remote><ejb-class>com.WP.ejb.slAddressBean</ejb-class><session-type>Stateless</session-type><transaction-type>Container</transaction-type></session><entity><ejb-name>enAddressBean</ejb-name><home>com.WP.ejb.enAddressHome</home><remote>com.WP.ejb.enAddress</remote><ejb-class>com.WP.ejb.enAddressBean</ejb-class><persistence-type>Bean</persistence-type><prim-key-class>com.WP.ejb.enAddressPK</prim-key-class><reentrant>False</reentrant></entity>
<session><ejb-name>slClientBean</ejb-name><home>com.WP.ejb.slClientHome</home><remote>com.WP.ejb.slClient</remote><ejb-class>com.WP.ejb.slClientBean</ejb-class><session-type>Stateless</session-type><transaction-type>Container</transaction-type></session><entity><ejb-name>enClientBean</ejb-name><home>com.WP.ejb.enClientHome</home><remote>com.WP.ejb.enClient</remote><ejb-class>com.WP.ejb.enClientBean</ejb-class><persistence-type>Bean</persistence-type><prim-key-class>com.WP.ejb.enClientPK</prim-key-class><reentrant>False</reentrant></entity>
<session><ejb-name>slClientTestTypeBean</ejb-name><home>com.WP.ejb.slClientTestTypeHome</home><remote>com.WP.ejb.slClientTestType</remote><ejb-class>com.WP.ejb.slClientTestTypeBean</ejb-class><session-type>Stateless</session-type><transaction-type>Container</transaction-type></session>
</enterprise-beans><assembly-descriptor>
<container-transaction><method><ejb-name>scSiteBean</ejb-name><method-intf>Home</method-intf><method-name>*</method-name></method>
<method><ejb-name>scSiteBean</ejb-name><method-intf>Remote</method-intf><method-name>*</method-name></method>
<method><ejb-name>scSiteBean</ejb-name><method-name>*</method-name></method>
<method><ejb-name>slSiteBean</ejb-name><method-intf>Remote</method-intf><method-name>*</method-name></method><method><ejb-name>slSiteBean</ejb-name><method-intf>Home</method-intf><method-name>*</method-name></method><method><ejb-name>slSiteBean</ejb-name><method-name>*</method-name></method>
<method><ejb-name>enAddressBean</ejb-name><method-intf>Home</method-intf><method-name>*</method-name></method>
<method><ejb-name>enAddressBean</ejb-name><method-intf>Remote</method-intf><method-name>*</method-name></method>
<method><ejb-name>slAddressBean</ejb-name><method-intf>Remote</method-intf><method-name>*</method-name></method><method><ejb-name>slAddressBean</ejb-name><method-intf>Home</method-intf><method-name>*</method-name></method><method><ejb-name>slAddressBean</ejb-name><method-name>*</method-name></method>
<method><ejb-name>enClientBean</ejb-name><method-intf>Home</method-intf><method-name>*</method-name></method>
<method><ejb-name>enClientBean</ejb-name><method-intf>Remote</method-intf><method-name>*</method-name></method>
<method><ejb-name>slClientBean</ejb-name><method-intf>Remote</method-intf><method-name>*</method-name></method><method><ejb-name>slClientBean</ejb-name><method-intf>Home</method-intf><method-name>*</method-name></method><method><ejb-name>slClientBean</ejb-name><method-name>*</method-name></method>
<method><ejb-name>slClientTestTypeBean</ejb-name><method-intf>Remote</method-intf><method-name>*</method-name></method><method><ejb-name>slClientTestTypeBean</ejb-name><method-intf>Home</method-intf><method-name>*</method-name></method><method><ejb-name>slClientTestTypeBean</ejb-name><method-name>*</method-name></method>
<trans-attribute>NotSupported</trans-attribute></container-transaction><container-transaction><method><ejb-name>enAddressBean</ejb-name><method-name>*</method-name></method>
<method><ejb-name>enClientBean</ejb-name><method-name>*</method-name></method>
<trans-attribute>Requires</trans-attribute></container-transaction></assembly-descriptor>
</ejb-jar>


----------------------------------------------------------------------

jonas-ejb-jar.xml

<!DOCTYPE jonas-ejb-jar SYSTEM "http://localhost/dtd/jonas-ejb-jar.dtd"><jonas-ejb-jar>
<jonas-session><ejb-name>slSiteBean</ejb-name><jndi-name>ejb.slSiteHome</jndi-name></jonas-session><jonas-session><ejb-name>scSiteBean</ejb-name><jndi-name>ejb.scSiteHome</jndi-name></jonas-session>

<jonas-session><ejb-name>slAddressBean</ejb-name><jndi-name>ejb.slAddressHome</jndi-name></jonas-session><jonas-entity><ejb-name>enAddressBean</ejb-name><jndi-name>ejb.enAddressHome</jndi-name></jonas-entity>

<jonas-session><ejb-name>slClientBean</ejb-name><jndi-name>ejb.slClientHome</jndi-name></jonas-session><jonas-entity><ejb-name>enClientBean</ejb-name><is-modified-method-name>isModified</is-modified-method-name><jndi-name>ejb.enClientHome</jndi-name></jonas-entity>

<jonas-session><ejb-name>slClientTestTypeBean</ejb-name><jndi-name>ejb.slClientTestTypeHome</jndi-name></jonas-session>

</jonas-ejb-jar>


----------------------------------------------------------------------

code snippet calling the bean:  

enAddress is the entity bean class
vcAddress is the value class holding the entity bean data (we use it
to get/set the entity bean data with a single call instead of using
multiple getter/setters)


   private void saveState(sfClient clientState, int step)
      throws RemoteException
   {
      if (action.equals(ADD_ACTION))
      {
      < stuff for adding goes here >
      }
      else if (action.equals(MODIFY_ACTION))
      {
         try
         {
            //            Hashtable jndi = OWC.getJNDI();
            //InitialContext context = new InitialContext( jndi );
            //UserTransaction utx = 
(UserTransaction)context.lookup("javax.transaction.UserTransaction"); 
            //utx.begin();
         Log.getLog().debug("in saveState for MODIFY NOT USING TRANSACTIONS");
         vcAddress addressValues = clientState.getAddressValues();
         enAddress address = hcAddress.getEntity(addressValues);
         address.setValues(addressValues);

         vcAddress billingAddressValues = clientState.getBillingAddressValues();
         enAddress billingAddress = hcAddress.getEntity(billingAddressValues);
         billingAddress.setValues(billingAddressValues);

         vcClient clientValues = clientState.getValues();
         enClient client = hcClient.getEntity(clientValues);
         Log.getLog().debug("Setting client via the setValues method");
         client.setValues(clientValues);
         //utx.commit();

         }
         catch (Exception e)
         {
            Log.getLog().exception(e, "Exception with user transaction");
         }
      }
      else
      {
         Log.getLog().error("Invalid action for saveState: " + action);
      }
   }

----------------------------------------------------------------------

entity bean code snippet:

(We know the ejbStore isn't being called because the println isn't never reached 
unless we do a manual sync via JonasAdmin)

        public void ejbStore() throws EJBException 
        { 
           System.out.println("IN EJBSTORE FOR CLIENT BEAN");

                // bail if this isn't modified
                if (!isModified)
                        return;

                Hashtable jndi = WPC.getJNDI(); 
                Connection cn = null; 
                PreparedStatement ps = null; 

                try 
                { 
                        Context context = new InitialContext( jndi ); 
                        DataSource ds = (DataSource) 
context.lookup(WPC.dataSourceName); 
                        cn = ds.getConnection(); 
                        StringBuffer sbQuery = new StringBuffer(); 
                        sbQuery.append("UPDATE WP_CLIENT SET ");
                        // below are the non-primary key fields (based on field_name 
!= 'pk_*'


                        sbQuery.append("ADDRESS_ID = ?, ");
                        sbQuery.append("BILLING_ADDRESS_ID = ?, ");
                        sbQuery.append("BILLING_NAME = ?, ");
                        sbQuery.append("CLIENT_NAME = ?, ");
                        sbQuery.append("CONTACT_EXTENSION = ?, ");
                        sbQuery.append("CONTACT_FIRST_NAME = ?, ");
                        sbQuery.append("CONTACT_LAST_NAME = ?, ");
                        sbQuery.append("CONTACT_MIDDLE_INITIAL = ?, ");
                        sbQuery.append("CONTACT_PHONE_LINE_NUMBER = ?, ");
                        sbQuery.append("CONTACT_PHONE_NPA = ?, ");
                        sbQuery.append("CONTACT_PHONE_NXX = ?, ");
                        sbQuery.append("LINK_URL = ?, ");
                        sbQuery.append("LOGIN_ID = ?, ");
                        sbQuery.append("LOGO_URL = ?, ");
                        sbQuery.append("PASSWORD = ?, ");
                        sbQuery.append("PREPAID_DETAILED_REPORTS_FLAG = ?, ");
                        sbQuery.append("STATUS = ?, ");
                        sbQuery.append("STATUS_UPDATE_DATE = ? ");
                        sbQuery.append(" WHERE ");
                        // below are the primary keys

                        sbQuery.append("PK_CLIENT_ID = ? ");

                        ps = cn.prepareStatement(sbQuery.toString()); 
                        ps.clearParameters(); 
                        // here is a list of all non-primary key fields

                        ps.setLong(1, addressId); 
                        ps.setLong(2, billingAddressId); 
                        ps.setString(3, billingName); 
                        ps.setString(4, clientName); 
                        ps.setString(5, contactExtension); 
                        ps.setString(6, contactFirstName); 
                        ps.setString(7, contactLastName); 
                        ps.setString(8, contactMiddleInitial); 
                        ps.setString(9, contactPhoneLineNumber); 
                        ps.setString(10, contactPhoneNpa); 
                        ps.setString(11, contactPhoneNxx); 
                        ps.setString(12, linkUrl); 
                        ps.setString(13, loginId); 
                        ps.setString(14, logoUrl); 
                        ps.setString(15, password); 
                        ps.setInt(16, prepaidDetailedReportsFlag); 
                        ps.setLong(17, status); 
                        if (statusUpdateDate == null)
                        {
                                ps.setDate(18, null);
                        }
                        else
                        {
                                ps.setDate(18, new 
java.sql.Date(statusUpdateDate.getTime()));
                        } 
                        ps.setLong(19, pkClientId); 
                        ps.executeUpdate(); 

                        this.isModified = false; 
                } 
                catch( Exception e ) 
                { 
                        throw new EJBException("Exception inserting data: 
"+e.toString() ); 
                } 
                finally 
                { 
                        try 
                        { 
                                if( cn != null ) cn.close(); 
                                if( ps != null ) ps.close(); 
                        } 
                        catch(Exception e) 
                        { 
                                System.out.println("Error closing cn or 
ps."+e.toString()); 
                        } 
                } 
        } 

        < other stuff... >

        public boolean isModified() 
        { 
           System.out.println("IN ISMODIFIED, and isModified=" + isModified); 
                return isModified; 
        } 



----
To unsubscribe, send email to [EMAIL PROTECTED] and
include in the body of the message "unsubscribe jonas-users".
For general help, send email to [EMAIL PROTECTED] and
include in the body of the message "help".

Reply via email to