From: costin <gic...@ed...> - 2003-04-09 16:45:50
|
Hi! Here is a little clue (I wish I receive some on my questions). Mysql tends to get out of hand with transaction - my oppinion. I have noticed differential transactional behaviour when using mysql - I am considering moving to postgresql or other serious transactional database. Anyway,before doing anything nasty try the following: 1. Use Mysql MAX (it`s way better then the standard and supports InnoDB by default). You can configure it to use the tables trough the conf file. 2. Get the latest mysql driver(you already did that I suppose) 3. Try to see the difference between mysql and hpsql(Hypersonic database) - usually you can set this only through a simple change in the description. please, post the results to see what you achieve... BM> Hi all, BM> I'm going to attach my myslql-service.xml BM> file here because perhaps I have some configuration error BM> with mysql and Jboss. BM> Unfortunately under extensive testing we can still not find BM> the problem - to reiterate, BM> using mysql 3.23.52-max BM> Table type is InnoDB to enable transactions BM> problem is that a simple test that spawns multiple threads BM> where each thread accesses a session bean method with BM> transaction required. This method updates a counter in an BM> entity bean. BM> The test essentially shows that each thread essentially can BM> do dirty reads, for example, here's a snapshot of the output. BM> 15:35:55,781 INFO [STDOUT] The counter created is: 5525, created by: Thread BM> 9 BM> 15:35:55,796 INFO [STDOUT] The counter created is: 5525, created by: Thread BM> 6 BM> 15:35:55,812 INFO [STDOUT] The counter created is: 5525, created by: Thread BM> 1 BM> 15:35:55,828 INFO [STDOUT] The counter created is: 5525, created by: Thread BM> 8 BM> 15:35:55,843 INFO [STDOUT] The counter created is: 5525, created by: Thread BM> 3 BM> 15:35:55,843 INFO [STDOUT] The counter created is: 5525, created by: Thread BM> 7 BM> 15:35:55,890 INFO [STDOUT] The counter created is: 5526, created by: Thread BM> 2 BM> 15:35:55,890 INFO [STDOUT] The counter created is: 5526, created by: Thread BM> 5 BM> 15:35:55,906 INFO [STDOUT] The counter created is: 5526, created by: Thread BM> 0 BM> 15:35:55,906 INFO [STDOUT] The counter created is: 5526, created by: Thread BM> 4 BM> 15:35:55,921 INFO [STDOUT] The counter created is: 5526, created by: Thread BM> 9 BM> 15:35:55,921 INFO [STDOUT] The counter created is: 5526, created by: Thread BM> 6 BM> Perhaps dirty reads is the standard commit option. I'm not sure. BM> Does anyone have any idea about this? BM> ----- Original Message ----- BM> From: "Brian McSweeney" <bri...@au...> BM> To: <jbo...@li...> BM> Sent: Tuesday, April 08, 2003 4:41 PM BM> Subject: Re: [JBoss-user] Fundamental error >> Ok, >> have retested with mysql - still the same mad problem. >> I'm suspicious that this may be a mysql problem but to >> illustrate that InnoDB is set up I have printed out the >> table status below. >> >> Perhaps it is some sort of commit option using mysql. >> Are there any mysql gurus out there who might see if there >> is some error? >> thanks Brian >> >> >> >> mysql> show table status like 't_counter'; >> >> +-----------+----------+--------------+-------+------------------+ >> | Name | Type | Row_format | Rows | Avg_row_length | >> +-----------+----------+--------------+-------+------------------+ >> | t_counter | InnoDB | Dynamic | 1 | 16384 >> | >> +-----------+----------+--------------+-------+------------------+ >> >> >> BM> +-------------+------------------+--------------+-----------+--------------- >> --+ >> | Data_length | Max_data_length | Index_length | Data_free | >> Auto_increment | >> BM> +--------------+------------------+--------------+-----------+-------------- >> ---+ >> | 16384 | Null | 0 | >> 0 | Null | >> BM> +--------------+------------------+--------------+-----------+-------------- >> ---+ >> >> BM> +-------------+-------------+--------------+----------------+--------------- >> -----------+ >> | Create_time | Update_time | Check_time | Create_options | Comment >> | >> BM> +-------------+-------------+--------------+----------------+--------------- >> -----------+ >> | Null | Null | Null | >> | InnoDB free: 98088 Kb | >> BM> +-------------+-------------+--------------+----------------+--------------- >> -----------+ >> >> >> >> ----- Original Message ----- >> From: "Brian McSweeney" <bri...@au...> >> To: <jbo...@li...> >> Cc: "Herve Tchepannou" <htc...@ob...> >> Sent: Tuesday, April 08, 2003 3:04 PM >> Subject: Re: [JBoss-user] Fundamental error >> >> >> > OK, test shows no problem with hsqldb. Perhaps it is a >> > mysql config problem - but InnoDB tables are being used so >> > I'm still at a loss. Will keep looking. >> > Brian >> > >> > ----- Original Message ----- >> > From: "Brian McSweeney" <bri...@au...> >> > To: "Meyer-Willner, Bernhard" <Ber...@lo...>; >> > <jbo...@li...> >> > Sent: Tuesday, April 08, 2003 1:27 PM >> > Subject: Re: [JBoss-user] Fundamental error >> > >> > >> > > Hi Bernhard, >> > > yes InnoDB tables are enabled. But your point is a good one, >> > > perhaps it is the database configuration somehow. >> > > I'll try to run the test with hsqldb to see if it fails on that too BM> and >> > > then we'll know if it is JBoss or the database config. >> > > Brian >> > > >> > > ----- Original Message ----- >> > > From: "Meyer-Willner, Bernhard" <Ber...@lo...> >> > > To: <jbo...@li...> >> > > Cc: <bri...@au...> >> > > Sent: Tuesday, April 08, 2003 1:11 PM >> > > Subject: Re: [JBoss-user] Fundamental error >> > > >> > > >> > > > I see you're using MySQL. By default MySQL's ISAM tables are >> > > > nontransactional. Or are you using InnoDB? >> > > > >> > > > Cheers, >> > > > Bernhard >> > > > >> > > > >> > > > -----Ursprüngliche Nachricht----- >> > > > Von: Brian McSweeney [mailto:bri...@au...] >> > > > Gesendet: Dienstag, 8. April 2003 13:53 >> > > > An: jbo...@li... >> > > > Betreff: Re: [JBoss-user] Fundamental error >> > > > >> > > > >> > > > Done this. If this is a bug and not a configuration error of ours, >> > > > then I think it implies that transactions don't work in JBoss with >> > > > CMR!!! >> > > > >> > > > >> > > > ----- Original Message ----- >> > > > From: "Scott M Stark" <st...@st...> >> > > > To: <jbo...@li...> >> > > > Sent: Monday, April 07, 2003 6:06 PM >> > > > Subject: Re: [JBoss-user] Fundamental error >> > > > >> > > > >> > > > > Please create a bug report on sourcforge with this >> > > > > information. >> > > > > >> > > > > -- >> > > > > xxxxxxxxxxxxxxxxxxxxxxxx >> > > > > Scott Stark >> > > > > Chief Technology Officer >> > > > > JBoss Group, LLC >> > > > > xxxxxxxxxxxxxxxxxxxxxxxx >> > > > > >> > > > > >> > > > > >> > > > > Brian McSweeney wrote: >> > > > > >> > > > > >Hi all, >> > > > > > >> > > > > >we have a fundamental problem with primary key generation with >> JBoss >> > > > using >> > > > > >the >> > > > > >xpetstore UIDGenerator component. This component has two classes. BM> A >> > > > session >> > > > > >facade UIDGeneratorEJB which has a method getUniqueId, which BM> calls >> a >> > > > > >nextValue >> > > > > >method on an entity bean ( CounterEJB ). This is an BM> implementation >> of >> > > > Floyd >> > > > > >Marinescu's >> > > > > >Sequence pattern. >> > > > > > >> > > > > >The UIDGeneratorEJB is marked transaction required. However a >> simple >> > > test >> > > > > >shows that >> > > > > >several threads are able to similtaniously call nextValue and get >> > back >> > > > the >> > > > > >same integer. >> > > > > >Something is surely critically wrong with our implementation or >> with >> > > > JBoss. >> > > > > >This scenario happens on JBoss 3.x with MySql. >> > > > > > >> > > > > >The two xpetstore files are below with a simple test class. >> > > > > > >> > > > > >Any help at all would be very much appreciated. >> > > > > > >> > > > > >Brian >> > > > > > >> > > > > >//------------- >> > > > > > >> > > > > >package xpetstore.util.uidgen.ejb; >> > > > > > >> > > > > >import javax.ejb.EJBException; >> > > > > >import javax.ejb.FinderException; >> > > > > >import javax.ejb.SessionBean; >> > > > > > >> > > > > >import xpetstore.util.uidgen.interfaces.CounterLocal; >> > > > > >import xpetstore.util.uidgen.interfaces.CounterLocalHome; >> > > > > >import xpetstore.util.uidgen.util.CounterUtil; >> > > > > > >> > > > > > >> > > > > >/** >> > > > > > * @author <a href="mailto:tch...@us...">Herve >> > > > > >Tchepannou</a> >> > > > > > * >> > > > > > * @ejb.bean >> > > > > > * name="UIDGenerator" >> > > > > > * type="Stateless" >> > > > > > * >> > local-jndi-name="local/xpetstore.util.uidgen.UIDGenerator" >> > > > > > * view-type="local" >> > > > > > * @ejb.transaction >> > > > > > * type="Required" >> > > > > > * @ejb.util >> > > > > > * generate="physical" >> > > > > > */ >> > > > > >public abstract class UIDGeneratorEJB >> > > > > > implements SessionBean >> > > > > >{ >> > > > > > file://~ >> > > > > >> > > >> >Methods ---------------------------------------------------------------- >> > > > > > >> > > > > > file://================================= >> > > > > > // Business Methods >> > > > > > file://================================= >> > > > > > >> > > > > > /** >> > > > > > * @ejb.interface-method >> > > > > > */ >> > > > > > public int getUniqueId( String idPrefix ) >> > > > > > { >> > > > > > return getCounter( idPrefix ).nextValue( ); >> > > > > > } >> > > > > > >> > > > > > file://================================= >> > > > > > // Misc Method >> > > > > > file://================================= >> > > > > > private CounterLocal getCounter( String name ) >> > > > > > { >> > > > > > try >> > > > > > { >> > > > > > CounterLocal counter = null; >> > > > > > CounterLocalHome home = CounterUtil.getLocalHome( ); >> > > > > > >> > > > > > try >> > > > > > { >> > > > > > counter = home.findByPrimaryKey( name ); >> > > > > > } >> > > > > > catch ( FinderException fe ) >> > > > > > { >> > > > > > counter = home.create( name ); >> > > > > > } >> > > > > > >> > > > > > return counter; >> > > > > > } >> > > > > > catch ( Exception ce ) >> > > > > > { >> > > > > > throw new EJBException( "Could not create counter " + >> > name >> > > + >> > > > ". >> > > > > >Error: " + ce.getMessage( ) ); >> > > > > > } >> > > > > > } >> > > > > >} >> > > > > > >> > > > > > >> > > > > > >> > > > > >package xpetstore.util.uidgen.ejb; >> > > > > > >> > > > > >import javax.ejb.CreateException; >> > > > > >import javax.ejb.EntityBean; >> > > > > > >> > > > > > >> > > > > >/** >> > > > > > * @author <a href="mailto:tch...@us...">Herve >> > > > > >Tchepannou</a> >> > > > > > * >> > > > > > * @ejb.bean >> > > > > > * name="Counter" >> > > > > > * type="CMP" >> > > > > > * view-type="local" >> > > > > > * local-jndi-name="local/xpetstore.util.uidgen.Counter" >> > > > > > * primkey-field="name" >> > > > > > * schema="Counter" >> > > > > > * cmp-version="${ejb.cmp.version}" >> > > > > > * @ejb.transaction >> > > > > > * type="Required" >> > > > > > * @ejb.util >> > > > > > * generate="physical" >> > > > > > * @ejb.persistence >> > > > > > * table-name="T_COUNTER" >> > > > > > * >> > > > > > * @jboss.persistence >> > > > > > * create-table="${jboss.create.table}" >> > > > > > * remove-table="${jboss.remove.table}" >> > > > > > */ >> > > > > >public abstract class CounterEJB >> > > > > > implements EntityBean >> > > > > >{ >> > > > > > file://~ >> > > > > >> > > >> >Methods ---------------------------------------------------------------- >> > > > > > >> > > > > > file://================================= >> > > > > > // Business methods >> > > > > > file://================================= >> > > > > > >> > > > > > /** >> > > > > > * @ejb.interface-method >> > > > > > */ >> > > > > > public int nextValue( ) >> > > > > > { >> > > > > > int value = getValue( ) + 1; >> > > > > > setValue( value ); >> > > > > > >> > > > > > return value; >> > > > > > } >> > > > > > >> > > > > > file://======================================== >> > > > > > // CMP fields >> > > > > > file://======================================== >> > > > > > >> > > > > > /** >> > > > > > * @ejb.pk-field >> > > > > > * @ejb.persistence >> > > > > > * column-name="cnt_name" >> > > > > > * jdbc-type="VARCHAR" >> > > > > > * sql-type="varchar(50)" >> > > > > > * @ejb.interface-method >> > > > > > * @ejb.transaction >> > > > > > * type="NotSupported" >> > > > > > */ >> > > > > > public abstract String getName( ); >> > > > > > >> > > > > > public abstract void setName( String name ); >> > > > > > >> > > > > > /** >> > > > > > * @ejb.persistence >> > > > > > * column-name="cnt_value" >> > > > > > */ >> > > > > > public abstract int getValue( ); >> > > > > > >> > > > > > public abstract void setValue( int value ); >> > > > > > >> > > > > > file://======================================== >> > > > > > // EJB callbacks >> > > > > > file://======================================== >> > > > > > >> > > > > > /** >> > > > > > * @ejb.create-method >> > > > > > */ >> > > > > > public String ejbCreate( String name ) >> > > > > > throws CreateException >> > > > > > { >> > > > > > setName( name ); >> > > > > > setValue( 0 ); >> > > > > > >> > > > > > return null; >> > > > > > } >> > > > > > >> > > > > > public void ejbPostCreate( String name ) >> > > > > > throws CreateException {} >> > > > > >} >> > > > > > >> > > > > > >> > > > > > >> > > > > >package xpetstore.util.uidgen.test; >> > > > > > >> > > > > >import javax.ejb.CreateException; >> > > > > > >> > > > > >import javax.naming.NamingException; >> > > > > > >> > > > > >import junit.framework.*; >> > > > > > >> > > > > >import xpetstore.util.uidgen.util.UIDGeneratorUtil; >> > > > > > >> > > > > > >> > > > > >public class UIDGenTest >> > > > > > extends TestCase >> > > > > >{ >> > > > > > file://~ Static >> > > > > >fields/initializers --------------------------------------------- >> > > > > > >> > > > > > private static String COUNTER = "Test"; >> > > > > > >> > > > > > file://~ >> > > > > >> > > >> >Constructors ----------------------------------------------------------- >> > > > > > >> > > > > > public UIDGenTest( String name ) >> > > > > > { >> > > > > > super( name ); >> > > > > > } >> > > > > > >> > > > > > file://~ >> > > > > >> > > >> >Methods ---------------------------------------------------------------- >> > > > > > >> > > > > > public void testCounter( ) >> > > > > > throws Exception >> > > > > > { >> > > > > > System.out.println( "Testing counter creation" ); >> > > > > > >> > > > > > for ( int i = 0; i < 10; i++ ) >> > > > > > { >> > > > > > Thread t = new CounterThread( "Thread " + i ); >> > > > > > t.start( ); >> > > > > > } >> > > > > > } >> > > > > > >> > > > > > private void count( String name ) >> > > > > > throws CreateException >> > > > > > { >> > > > > > int uid; >> > > > > > try >> > > > > > { >> > > > > > uid = >> > > > > >neratorUtil.getLocalHome( ).create( ).getUniqueId( COUNTER ); >> > > > > > } >> > > > > > catch ( NamingException n ) >> > > > > > { >> > > > > > throw new CreateException( "Unable to generate the BM> UId. >> > > > Error=" >> > > > > >+ n.toString( ) ); >> > > > > > } >> > > > > > >> > > > > > System.out.println( "The counter created is: " + uid + ", >> > > created >> > > > > >by: " + name ); >> > > > > > } >> > > > > > >> > > > > > file://~ Inner >> > > > > >>Classes ---------------------------------------------------------- >> > > > > > >> > > > > > private class CounterThread >> > > > > > extends Thread >> > > > > > { >> > > > > > file://~ Instance >> > > > > >fields ---------------------------------------------------- >> > > > > > >> > > > > > private String name = ""; >> > > > > > >> > > > > > file://~ >> > > > > >> >Constructors ------------------------------------------------------- >> > > > > > >> > > > > > public CounterThread( String str ) >> > > > > > { >> > > > > > super( str ); >> > > > > > name = str; >> > > > > > } >> > > > > > >> > > > > > file://~ >> > > > > >> >Methods ------------------------------------------------------------ >> > > > > > >> > > > > > public void run( ) >> > > > > > { >> > > > > > while ( true ) >> > > > > > { >> > > > > > try >> > > > > > { >> > > > > > count( name ); >> > > > > > } >> > > > > > catch ( CreateException ce ) >> > > > > > { >> > > > > > System.err.println( "Couldn't create" ); >> > > > > > } >> > > > > > } >> > > > > > } >> > > > > > } >> > > > > >} >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > >> > > > > >> > > > > ------------------------------------------------------- >> > > > > This SF.net email is sponsored by: ValueWeb: >> > > > > Dedicated Hosting for just $79/mo with 500 GB of bandwidth! >> > > > > No other company gives more support or power for your dedicated >> server >> > > > > http://click.atdmt.com/AFF/go/sdnxxaff00300020aff/direct/01/ >> > > > > _______________________________________________ >> > > > > JBoss-user mailing list >> > > > > JBo...@li... >> > > > > https://lists.sourceforge.net/lists/listinfo/jboss-user >> > > > > >> > > > >> > > > >> > > > >> > > > ------------------------------------------------------- >> > > > This SF.net email is sponsored by: ValueWeb: >> > > > Dedicated Hosting for just $79/mo with 500 GB of bandwidth! >> > > > No other company gives more support or power for your dedicated BM> server >> > > > http://click.atdmt.com/AFF/go/sdnxxaff00300020aff/direct/01/ >> > > > _______________________________________________ >> > > > JBoss-user mailing list >> > > > JBo...@li... >> > > > https://lists.sourceforge.net/lists/listinfo/jboss-user >> > > > >> > > > This e-mail and any attachment is for authorised use by the intended >> > > recipient(s) only. It may contain proprietary material, confidential >> > > information and/or be subject to legal privilege. It should not be >> > copied, >> > > disclosed to, retained or used by, any other party. If you are not an >> > > intended recipient then please promptly delete this e-mail and any >> > > attachment and all copies and inform the sender. Thank you. >> > > > >> > > >> > > >> > > >> > > ------------------------------------------------------- >> > > This SF.net email is sponsored by: ValueWeb: >> > > Dedicated Hosting for just $79/mo with 500 GB of bandwidth! >> > > No other company gives more support or power for your dedicated server >> > > http://click.atdmt.com/AFF/go/sdnxxaff00300020aff/direct/01/ >> > > _______________________________________________ >> > > JBoss-user mailing list >> > > JBo...@li... >> > > https://lists.sourceforge.net/lists/listinfo/jboss-user >> > > >> > >> > >> > >> > ------------------------------------------------------- >> > This SF.net email is sponsored by: ValueWeb: >> > Dedicated Hosting for just $79/mo with 500 GB of bandwidth! >> > No other company gives more support or power for your dedicated server >> > http://click.atdmt.com/AFF/go/sdnxxaff00300020aff/direct/01/ >> > _______________________________________________ >> > JBoss-user mailing list >> > JBo...@li... >> > https://lists.sourceforge.net/lists/listinfo/jboss-user >> > >> >> >> >> ------------------------------------------------------- >> This SF.net email is sponsored by: ValueWeb: >> Dedicated Hosting for just $79/mo with 500 GB of bandwidth! >> No other company gives more support or power for your dedicated server >> http://click.atdmt.com/AFF/go/sdnxxaff00300020aff/direct/01/ >> _______________________________________________ >> JBoss-user mailing list >> JBo...@li... >> https://lists.sourceforge.net/lists/listinfo/jboss-user >> BM> ------------------------------------------------------- BM> This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger BM> for complex code. Debugging C/C++ programs can leave you feeling lost and BM> disoriented. TotalView can help you find your way. Available on major UNIX BM> and Linux platforms. Try it free. www.etnus.com BM> _______________________________________________ BM> JBoss-user mailing list BM> JBo...@li... BM> https://lists.sourceforge.net/lists/listinfo/jboss-user -- costin mailto:gic...@ed... |