Hi Tim,
I'm certainly no expert but the TX_NOT_SUPPORTED seems strange for
Container managed persistence. I would think it needs to be TX_SUPPORTED
as this is what I am using that works.
Hope this helps,
Eric :-)
Timothy Stewart wrote:
> Please forgive the volume of attached code here. I thought it would
> help. I have a container managed Entity bean, pretty simple bean..
> manages a mail account on a server.
>
> Rather than call each get/set method to get the properties, I've set
> up a getDataMap and storeDataMap which basically just gets and
> sets the properties as a batch filling or taking values from a
> HashMap. Originally, I didn't want to trigger an update call for each
> method so I thought doing them all in one swipe would be better. I
> do not believe this is really relevent to the problem, just wanted to
> explain the odd bit of code. Also, forgive the hardcoding of a
> domain name in there for now. Will switch to properties later.
>
> The rest is pretty standard. The problem is that setDomain gets
> called with a new value. The storeRow method gets called. It
> prints out that the new value is the correctly modified one. But the
> database doesn't seem to get updated. The next read from this
> bean has the value back to the old one.
>
> Here are the bean, home, and remote files, along with the data
> descriptor and the properties file. I've switched to the isModified
> method thinking that maybe a write wasn't being triggered but that
> didn't help. I'm going to switch this bean to bean managed I think.
> This is the only one that is container managed and the only one
> that exhibits this behavior.
>
> If anyone sees a problem here, please let me know. The container
> managed beans are far easier to write .. but I need the things to
> work. :)
>
> // File MailAccountEJB.java
> // EJBean File
>
> package com.nfolink;
>
> import java.sql.*;
> import javax.sql.*;
> import java.util.*;
> import javax.ejb.*;
> import javax.naming.*;
>
> public class MailAccountEJB implements EntityBean {
>
> // username CHAR(63) NOT NULL,
> // customer integer NOT NULL,
> // domain CHAR(127) NOT NULL,
> // alias CHAR(255) NOT NULL,
> // is_alias ENUM ('yes','no') NOT NULL DEFAULT 'no',
> // password CHAR(32) NOT NULL
>
> public String username;
> public int customer;
> public String domain;
> public String alias;
> public String is_alias;
> public String password;
>
> private EntityContext context;
> private transient boolean isDirty;
>
> public boolean isModified() {
> return isDirty;
> }
> public void setModified(boolean flag) {
> isDirty = flag;
> }
> public String getUsername() {
> return username;
> }
> public int getCustomer() {
> return customer;
> }
> public String getDomain() {
> return domain;
> }
> public String getAlias() {
> return alias;
> }
> public String getIsAlias() {
> return is_alias;
> }
> public String getPassword() {
> return password;
> }
> public void setUsername(String u) {
> username = u;
> setModified(true);
> }
> public void setDomain(String s) {
> domain = s;
> setModified(true);
> }
> public void setAlias(String s) {
> alias =s;
> setModified(true);
> }
> public void setIsAlias(String s) {
> is_alias = s;
> setModified(true);
> }
> public void setPassword(String s) {
> password = s;
> setModified(true);
> }
>
> public Map getDataMap() {
> Map mailMap = new HashMap();
> mailMap.put("username", this.username);
> mailMap.put("domain", this.domain);
> mailMap.put("alias", this.alias);
> mailMap.put("is_alias", this.is_alias);
> return mailMap;
> }
> public void storeDataMap(Map mailMap) {
> System.out.println("MailAccount: Storing data map");
> for (Iterator i = mailMap.keySet().iterator(); i.hasNext(); ) {
> String key = (String)i.next();
> System.out.println("Updating for key: "+key);
> if (key.equals("username")) {
> this.setUsername((String)mailMap.get(key));
> continue;
> }
> if (key.equals("password")) {
> this.setPassword((String)mailMap.get(key));
> continue;
> }
> if (key.equals("domain")) {
> this.setDomain((String)mailMap.get(key));
> System.out.println("Domain set to "+domain);
> continue;
> }
> if (key.equals("alias")) {
> this.setAlias((String)mailMap.get(key));
> continue;
> }
> if (key.equals("is_alias")) {
> this.setIsAlias((String)mailMap.get(key));
> continue;
> }
> }
> }
>
> public void ejbCreate(String username, int customer, String
> domain,
> String alias, String is_alias, String password) {
> this.username = username;
> this.customer = customer;
> if (domain==null || domain.equals(""))
> domain = "nfolink.com";
> this.domain = domain;
> this.alias = alias;
> this.is_alias = alias;
> this.password = password;
> }
> public void ejbPostCreate(String username, int customer, String
> domain,
> String alias, String is_alias, String password) {
> }
> public void ejbCreate(String username, int customer, String
> password) {
> this.username = username;
> this.customer = customer;
> this.domain = "nfolink.com";
> this.alias = "";
> this.is_alias = "no";
> this.password = password;
> }
> public void ejbPostCreate(String username, int customer, String
> password) {
> }
>
> public void setEntityContext(EntityContext ctx) {
> context = ctx;
> setModified(true);
> }
> public void unsetEntityContext() {
> context = null;
> }
> public void ejbActivate() {
> setModified(true);
> }
> public void ejbPassivate() { }
> public void ejbLoad() {
> setModified(false);
> }
> public void ejbStore() {
> System.out.println("Completion of stored.");
> setModified(false);
> }
> public void ejbRemove() { }
>
>
> }
>
> // File MailAccount.java
> // Remote Interface
>
> package com.nfolink;
>
> import javax.ejb.EJBObject;
> import java.rmi.RemoteException;
>
> public interface MailAccount extends EJBObject {
> public String getUsername() throws RemoteException;
> public int getCustomer() throws RemoteException;
> public String getDomain() throws RemoteException;
> public String getAlias() throws RemoteException;
> public String getIsAlias() throws RemoteException;
> public String getPassword() throws RemoteException;
> public void setUsername(String u) throws RemoteException;
> public void setDomain(String s) throws RemoteException;
> public void setAlias(String s) throws RemoteException;
> public void setIsAlias(String s) throws RemoteException;
> public void setPassword(String s) throws RemoteException;
> public java.util.Map getDataMap() throws RemoteException;
> public void storeDataMap(java.util.Map mailMap) throws
> RemoteException;
> }
>
> // File MailAccountHome.java
> // Home Interface
>
> package com.nfolink;
>
> import java.util.Collection;
> import java.rmi.RemoteException;
> import javax.ejb.*;
>
> public interface MailAccountHome extends EJBHome {
>
> public MailAccount create(String username, int customer, String
> domain,
> String alias, String is_alias, String password)
> throws RemoteException, CreateException;
> public MailAccount create(String username, int customer, String
> password)
> throws RemoteException, CreateException;
>
> public MailAccount findByPrimaryKey(MailAccountPK primary)
> throws FinderException, RemoteException;
> public Collection findByCustomer(int customer)
> throws FinderException, RemoteException;
> public Collection findAllMailAccounts()
> throws FinderException, RemoteException;
> }
>
> // File MailAccountDD.txt
> // Data Descriptor
>
> EntityDescriptor {
> BeanHomeName = "MailAccountHome";
> EnterpriseBeanClassName =
> com.nfolink.MailAccountEJB;
> HomeInterfaceClassName =
> com.nfolink.MailAccountHome;
> RemoteInterfaceClassName = com.nfolink.MailAccount;
> PrimaryKeyClassName =
> com.nfolink.MailAccountPK;
> EnvironmentProperties = "MailAccount.properties";
> ControlDescriptors = {
> {
> TransactionAttribute = TX_NOT_SUPPORTED;
> };
> };
> ContainerManagedFields = {
> username;
> customer;
> domain;
> alias;
> is_alias;
> password;
> };
> }
>
> // File MailAccount.properties
> // Enviroment properties file
>
> datasource.name jdbc_3
> isModifiedMethodName isModified
> db.TableName mail_accounts
> db.Field.username username
> db.Field.customer customer
> db.Field.domain domain
> db.Field.alias alias
> db.Field.is_alias is_alias
> db.Field.password password
> db.Finder.findByCustomer where customer = ?
> db.Finder.findAllMailAccounts
>
> ==========================================================================
>
> Timothy Stewart, Lead Developer (Programmer Level IV)
> Laureate Inc.
> Tel: 512.257.7531 Email: [EMAIL PROTECTED]
> Corporate Web page: http://www.laureate.net/
>
> Laureate Inc. specializes in development of distributed evaluation and
> assessment systems for educational, governmental, corporate and military
> environments.
>
> Our primary focus is the creation of customized, reliable, cross-platform
> applications that maintain ease of use and integrate seemlessly into the
> instutional enterprise system; we strive in every aspect to avoid the
> need to have the institution conform to our software. Rather, our
> software conforms to user expectations. Installation is made simple
> with the provision of a pre-configured Sun Server and Oracle Database.
>
> For more information, contact [EMAIL PROTECTED]
>
> ==========================================================================
> ----
> 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".
----
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".