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".
