IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des données Java Discussion :

[JSF-Mysql] Problème de rollback et d'autocommit sous Linux


Sujet :

Persistance des données Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut [JSF-Mysql] Problème de rollback et d'autocommit sous Linux
    Bonjour à tous,

    J'ai un problème de rollback: j'ai deux entités client et adresse avec une relation unidirectionnelle de client vers adresse (relation oneToMany).

    J'ai trois table:
    - client
    - adresse
    - client_adresse: cette dernière fait la liason entre les deux tables cité plus haut.

    Lorsque j'ajoute un client avec une adresse et que j'ai un problème de transaction (voulue car deux client identique), une entré n'est pas ajouté ni dans la table client ni dans la table client_adresse. Par contre une entrée est ajouté dans la table adresse. Il n'y a pas de rollback complet et il semble donc qu'il y ait un autocommit.

    Je n'arrive pas à trouver la cause de ce problème.
    A noter : il n'y a pas ce problème avec le même code et les mêmes fichiers de conf (à part la conf jndi du au driver mysql) chez un developpeur sous Windows (je suis sous Linux). J'envisage donc que ce problème est lié à mon Mysql ?? Mais je n'arrive pas à le résoudre.


    Ci dessous quelques fichiers de configurations de mon application:

    Fichier persistence.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
      <persistence-unit name="EcomPU" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>JNDI_mysql</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
          <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
        </properties>
      </persistence-unit>
    </persistence>
    Fichier sun-ressources.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd">
    <resources>
        <!--connection-validation-method="auto-commit"-->
        <jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="mysql_ecom_JixmannschaftPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
            <property name="serverName" value="localhost"/>
            <property name="portNumber" value="3306"/>
            <property name="databaseName" value="ecom"/>
            <property name="User" value="Jixmannschaft"/>
            <property name="Password" value="linux"/>
            <property name="URL" value="jdbc:mysql://localhost:3306/ecom"/>
            <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        </jdbc-connection-pool> 
        <jdbc-resource enabled="true" jndi-name="JNDI_mysql" object-type="user" pool-name="mysql_ecom_JixmannschaftPool"/>
    </resources>
    Depuis phpMyAdmin, j'ai accés en lecture aux variable du serveur Mysql.
    A noter la variable autocmmit est à ON (comme sous l'user windows avec qui il n'y a pas de problème de rollback. Je n'arrive pas à la passer à OFF, mais je doute donc que ce soit la cause du problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
     
    auto increment increment	1
    auto increment offset	1
    autocommit	ON
    automatic sp privileges	ON
    back log	50
    basedir	/usr/
    big tables	OFF
    binlog cache size	32 768
    binlog direct non transactional updates	OFF
    binlog format	MIXED
    bulk insert buffer size	8 388 608
    character set client	utf8
    character set connection	utf8
    character set database	utf8
    character set filesystem	binary
    character set results	utf8
    character set server	utf8
    character set system	utf8
    character sets dir	/usr/share/mysql/charsets/
    collation connection	utf8_unicode_ci
    collation database	utf8_unicode_ci
    collation server	utf8_unicode_ci
    completion type	0
    concurrent insert	1
    connect timeout	10
    datadir	/var/lib/mysql/
    date format	%Y-%m-%d
    datetime format	%Y-%m-%d %H:%i:%s
    default week format	0
    delay key write	ON
    delayed insert limit	100
    delayed insert timeout	300
    delayed queue size	1 000
    div precision increment	4
    engine condition pushdown	ON
    error count	0
    event scheduler	OFF
    example enum var	e1
    example ulong var	8
    expire logs days	0
    flush	OFF
    flush time	0
    foreign key checks	ON
    ft boolean syntax	+ -><()~*:""&|
    ft max word len	84
    ft min word len	4
    ft query expansion limit	20
    ft stopword file	(built-in)
    general log	OFF
    general log file	/var/run/mysql/mysqld.log
    group concat max len	1 024
    have community features	YES
    have compress	YES
    have crypt	YES
    have csv	YES
    have dynamic loading	YES
    have geometry	YES
    have innodb	YES
    have ndbcluster	DISABLED
    have openssl	DISABLED
    have partitioning	YES
    have query cache	YES
    have rtree keys	YES
    have ssl	DISABLED
    have symlink	YES
    hostname	linux
    identity	0
    ignore builtin innodb	OFF
    init connect	
    init file	
    init slave	
    innodb adaptive hash index	ON
    innodb additional mem pool size	1 048 576
    innodb autoextend increment	8
    innodb autoinc lock mode	1
    innodb buffer pool size	8 388 608
    innodb checksums	ON
    innodb commit concurrency	0
    innodb concurrency tickets	500
    innodb data file path	ibdata1:10M:autoextend
    innodb data home dir	
    innodb doublewrite	ON
    innodb fast shutdown	1
    innodb file io threads	4
    innodb file per table	OFF
    innodb flush log at trx commit	1
    innodb flush method	
    innodb force recovery	0
    innodb lock wait timeout	50
    innodb locks unsafe for binlog	OFF
    innodb log buffer size	1 048 576
    innodb log file size	5 242 880
    innodb log files in group	2
    innodb log group home dir	./
    innodb max dirty pages pct	90
    innodb max purge lag	0
    innodb mirrored log groups	1
    innodb open files	300
    innodb rollback on timeout	OFF
    innodb stats on metadata	ON
    innodb support xa	ON
    innodb sync spin loops	20
    innodb table locks	ON
    innodb thread concurrency	8
    innodb thread sleep delay	10 000
    innodb use legacy cardinality algorithm	ON
    insert id	0
    interactive timeout	28 800
    join buffer size	131 072
    keep files on create	OFF
    key buffer size	16 777 216
    key cache age threshold	300
    key cache block size	1 024
    key cache division limit	100
    language	/usr/share/mysql/english/
    large files support	ON
    large page size	0
    large pages	OFF
    last insert id	0
    lc time names	en_US
    license	GPL
    local infile	ON
    locked in memory	OFF
    log	OFF
    log bin	ON
    log bin trust function creators	OFF
    log bin trust routine creators	OFF
    log error	/var/log/mysql/mysqld.log
    log output	FILE
    log queries not using indexes	OFF
    log slave updates	OFF
    log slow queries	OFF
    log warnings	1
    long query time	10
    low priority updates	OFF
    lower case file system	OFF
    lower case table names	0
    max allowed packet	1 048 576
    max binlog cache size	4 294 963 200
    max binlog size	1 073 741 824
    max connect errors	10
    max connections	151
    max delayed threads	20
    max error count	64
    max heap table size	16 777 216
    max insert delayed threads	20
    max join size	4 294 967 295
    max length for sort data	1 024
    max prepared stmt count	16 382
    max relay log size	0
    max seeks for key	4 294 967 295
    max sort length	1 024
    max sp recursion depth	0
    max tmp tables	32
    max user connections	0
    max write lock count	4 294 967 295
    min examined row limit	0
    multi range count	256
    myisam data pointer size	6
    myisam max sort file size	2 146 435 072
    myisam mmap size	4 294 967 295
    myisam recover options	OFF
    myisam repair threads	1
    myisam sort buffer size	8 388 608
    myisam stats method	nulls_unequal
    myisam use mmap	OFF
    ndb autoincrement prefetch sz	1
    ndb cache check time	0
    ndb connectstring	
    ndb extra logging	0
    ndb force send	ON
    ndb index stat cache entries	32
    ndb index stat enable	OFF
    ndb index stat update freq	20
    ndb report thresh binlog epoch slip	3
    ndb report thresh binlog mem usage	10
    ndb use copying alter table	OFF
    ndb use exact count	ON
    ndb use transactions	ON
    net buffer length	8 192
    net read timeout	30
    net retry count	10
    net write timeout	60
    new	OFF
    old	OFF
    old alter table	OFF
    old passwords	OFF
    open files limit	1 024
    optimizer prune level	1
    optimizer search depth	62
    optimizer switch	index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on
    pid file	/var/run/mysql/mysqld.pid
    plugin dir	/usr/lib/mysql/plugin
    port	3 306
    preload buffer size	32 768
    profiling	OFF
    profiling history size	15
    protocol version	10
    pseudo thread id	311
    (Valeur globale)	0
    query alloc block size	8 192
    query cache limit	1 048 576
    query cache min res unit	4 096
    query cache size	0
    query cache type	ON
    query cache wlock invalidate	OFF
    query prealloc size	8 192
    rand seed1	
    rand seed2	
    range alloc block size	4 096
    read buffer size	262 144
    read only	OFF
    read rnd buffer size	524 288
    relay log	
    relay log index	
    relay log info file	relay-log.info
    relay log purge	ON
    relay log space limit	0
    report host	
    report password	
    report port	3 306
    report user	
    rpl recovery rank	0
    secure auth	OFF
    secure file priv	
    server id	1
    skip external locking	ON
    skip name resolve	OFF
    skip networking	OFF
    skip show database	OFF
    slave compressed protocol	OFF
    slave exec mode	STRICT
    slave load tmpdir	/var/tmp/mysql.Dapy7K
    slave net timeout	3 600
    slave skip errors	OFF
    slave transaction retries	10
    slow launch time	2
    slow query log	OFF
    slow query log file	/var/run/mysql/mysqld-slow.log
    socket	/var/run/mysql/mysql.sock
    sort buffer size	524 288
    sql auto is null	ON
    sql big selects	ON
    sql big tables	OFF
    sql buffer result	OFF
    sql log bin	ON
    sql log off	OFF
    sql log update	ON
    sql low priority updates	OFF
    sql max join size	4 294 967 295
    sql mode	
    sql notes	ON
    sql quote show create	ON
    sql safe updates	OFF
    sql select limit	4 294 967 295
    sql slave skip counter	
    sql warnings	OFF
    ssl ca	
    ssl capath	
    ssl cert	
    ssl cipher	
    ssl key	
    storage engine	MyISAM
    sync binlog	0
    sync frm	ON
    system time zone	CET
    table definition cache	256
    table lock wait timeout	50
    table open cache	64
    table type	MyISAM
    thread cache size	0
    thread handling	one-thread-per-connection
    thread stack	196 608
    time format	%H:%i:%s
    time zone	SYSTEM
    timed mutexes	OFF
    timestamp	1 290 943 669
    tmp table size	16 777 216
    tmpdir	/var/tmp/mysql.Dapy7K
    transaction alloc block size	8 192
    transaction prealloc size	4 096
    tx isolation	REPEATABLE-READ
    unique checks	ON
    updatable views with limit	YES
    version	5.1.46-log
    version comment	SUSE MySQL RPM
    version compile machine	i686
    version compile os	suse-linux-gnu
    wait timeout	28 800
    warning count	0
    Je peut poster tout code ou toute configurations supplémentaire.
    Merci d'avance pour votre aide

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Pas d'idée?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Par hasard, votre base n'utiliserait pas Myisam, alors que l'autre développeur utiliserait bien Innodb? Pour rappel, Myisam ne supporte pas les transactions.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour ta réponse.
    Effectivement mon moteur de stockage par défaut est en Myisam (et non en innodb), ce qui expliquerait mon problème. Pour les utilisateurs windows, je vais me renseigner. Sais tu comment mettre le moteur de stockage par défaut en inndb sous Linux (j'ai sous la main mysql et à phpMyAdmin). Merci d'avance.

    Une fois le server glassfish lancé et les tables recrée je peut modifier manuellement le moteur de stockage en inndb et effectivement je n'ai plus ce problème, les transactions étant supporté!. Par contre je ne sais pas trop comment mettre ce moteur de stokage par défaut (à chaque fois que le server est relancé, les tables sont recrée et sont par défaut en Myisam), depuis mon projet JEE ? depuis phpMyAdmin? depuisMysql?
    Merci d'avance

    ps: j'ai tenté de modifier le fichier perstence.xml (j'utilise JPA 2.0 avec eclipseLink) mais sans résultat positif (j'ai toujours du Myisam qui est généré automatiquement):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
      <persistence-unit name="EcomPU" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>JNDI_mysql</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
          <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
          <property name="eclipselink.ddl-generation.table-creation-suffix" value="engine=InnoDB" />
        </properties>
      </persistence-unit>
    </persistence>
    J'ai rajouté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="eclipselink.ddl-generation.table-creation-suffix" value="engine=InnoDB" />


    EDIT: résolu en éditant le fichier et en ajoutant le code ci dessous dans la partie [mysqld] du fichier /etc/my.cnf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    default-table-type=innodb
    Pour toute table le mode de stockage passe en innodb. Par contre je ne comprend pas pourquoi via eclipselink, je n'arrive pas à paramétrer le type de mode de stockage...

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/02/2009, 12h18
  2. Problème de librairie avec code blocks sous Linux
    Par philmor34 dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 31/10/2008, 13h25
  3. Problème avec mon écran 19 pouces sous Linux
    Par Flomyr dans le forum Matériel
    Réponses: 2
    Dernier message: 17/01/2008, 20h26
  4. Réponses: 11
    Dernier message: 14/02/2006, 00h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo