Avatar billede kasper28 Nybegynder
10. september 2003 - 13:30 Der er 21 kommentarer og
1 løsning

CMP entitybean og CMT sessionbean

Hej

Jeg har et problem - jeg anvender CMP i mine entitybeans og har en sessionbean som anvender CMT. Begge er sat op med required i deployment descriptoren.

hvis jeg så laver en transaktion som involverer flere oprettelser på databasen og den sidste af dem ikke kan lade sig gøre burde den ikke lave en rollback på begge entitybeans ????
Avatar billede arne_v Ekspert
10. september 2003 - 13:39 #1
Jo.

Men det afhænger af om du smider den rette type exception !
Avatar billede kasper28 Nybegynder
10. september 2003 - 13:57 #2
min sessionbean kode ser således ud:
try{
Account1.deposit(100);    //(CMP ENTITYBEAN)
Account2.withdraw(100);  //(CMP ENTITYBEAN)
}
catch (Exception ex) {
        ex.printStackTrace();
        throw new EJBException
          ("Transaction failed: "
          + ex.getMessage());
        }

Account2.withdraw(100); er den som fejler - men den laver ikke rollback å den første
Avatar billede kasper28 Nybegynder
10. september 2003 - 14:00 #3
godt nok et tænkt eksempel for i mit tilfælde laver jeg nærmere et

Account1.create(navn,.....,.....); //LYKKEDES
Account2.create(navn,.....,.....); //LYKKEDES IKKE

som ikke kan ligges på databasen da primærnøglen allerede er brugt
Avatar billede arne_v Ekspert
10. september 2003 - 14:02 #4
EJBException burde få containeren til at lave rollback.

Hvilken Exception smider Account2.withdraw ?
Avatar billede kasper28 Nybegynder
10. september 2003 - 14:07 #5
den smider en createException
Avatar billede arne_v Ekspert
10. september 2003 - 14:11 #6
Bliver printStackTrace skrevet ud ?
Avatar billede kasper28 Nybegynder
10. september 2003 - 14:16 #7
13:05:14,576 INFO  [STDOUT] OPRETTER ORDRE 157

13:05:14,576 INFO  [STDOUT] OPRETTER ORDRELINIER 1

13:05:14,576 ERROR [STDERR] javax.ejb.DuplicateKeyException: Entity with primary key 1 already exists

13:05:14,576 ERROR [STDERR]     at org.jboss.ejb.plugins.cmp.jdbc.JDBCCreateEntityCommand.execute(JDBCCreateEntityCommand.java:128)

13:05:14,576 ERROR [STDERR]     at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.createEntity(JDBCStoreManager.java:527)

13:05:14,576 ERROR [STDERR]     at org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManager.java:253)

13:05:14,586 ERROR [STDERR]     at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.createEntity(CachedConnectionInterceptor.java:270)

13:05:14,586 ERROR [STDERR]     at org.jboss.ejb.EntityContainer.createLocalHome(EntityContainer.java:580)

13:05:14,586 ERROR [STDERR]     at sun.reflect.GeneratedMethodAccessor498.invoke(Unknown Source)

13:05:14,586 ERROR [STDERR]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

13:05:14,586 ERROR [STDERR]     at java.lang.reflect.Method.invoke(Method.java:324)

13:05:14,616 ERROR [STDERR]     at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:1119)

13:05:14,616 ERROR [STDERR]     at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:73)

13:05:14,616 ERROR [STDERR]     at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchronizationInterceptor.java:207)

13:05:14,616 ERROR [STDERR]     at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:215)

13:05:14,626 ERROR [STDERR]     at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:73)

13:05:14,626 ERROR [STDERR]     at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInterceptor.java:91)

13:05:14,626 ERROR [STDERR]     at org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockInterceptor.java:79)

13:05:14,626 ERROR [STDERR]     at org.jboss.ejb.plugins.EntityCreationInterceptor.invokeHome(EntityCreationInterceptor.java:44)

13:05:14,626 ERROR [STDERR]     at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:111)

13:05:14,626 ERROR [STDERR]     at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:237)

13:05:14,626 ERROR [STDERR]     at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:68)

13:05:14,626 ERROR [STDERR]     at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:105)

13:05:14,626 ERROR [STDERR]     at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:133)

13:05:14,626 ERROR [STDERR]     at org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:487)

13:05:14,636 ERROR [STDERR]     at org.jboss.ejb.plugins.local.BaseLocalContainerInvoker.invokeHome(BaseLocalContainerInvoker.java:230)

13:05:14,636 ERROR [STDERR]     at org.jboss.ejb.plugins.local.LocalHomeProxy.invoke(LocalHomeProxy.java:110)

13:05:14,636 ERROR [STDERR]     at $Proxy764.create(Unknown Source)

13:05:14,636 ERROR [STDERR]     at global.OrdreControllerBean.opretOrdre(OrdreControllerBean.java:68)

13:05:14,636 ERROR [STDERR]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

13:05:14,636 ERROR [STDERR]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

13:05:14,636 ERROR [STDERR]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

13:05:14,636 ERROR [STDERR]     at java.lang.reflect.Method.invoke(Method.java:324)

13:05:14,636 ERROR [STDERR]     at org.jboss.ejb.StatefulSessionContainer$ContainerInterceptor.invoke(StatefulSessionContainer.java:824)

13:05:14,636 ERROR [STDERR]     at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:130)

13:05:14,636 ERROR [STDERR]     at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:186)

13:05:14,646 ERROR [STDERR]     at org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor.invoke(StatefulSessionInstanceInterceptor.java:268)

13:05:14,646 ERROR [STDERR]     at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:107)

13:05:14,646 ERROR [STDERR]     at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:237)

13:05:14,646 ERROR [STDERR]     at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:98)

13:05:14,646 ERROR [STDERR]     at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:208)

13:05:14,646 ERROR [STDERR]     at org.jboss.ejb.StatefulSessionContainer.invoke(StatefulSessionContainer.java:380)

13:05:14,646 ERROR [STDERR]     at org.jboss.ejb.Container.invoke(Container.java:738)

13:05:14,646 ERROR [STDERR]     at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)

13:05:14,646 ERROR [STDERR]     at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:383)

13:05:14,646 ERROR [STDERR]     at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)

13:05:14,646 ERROR [STDERR]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

13:05:14,656 ERROR [STDERR]     at java.lang.reflect.Method.invoke(Method.java:324)

13:05:14,656 ERROR [STDERR]     at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:261)

13:05:14,656 ERROR [STDERR]     at sun.rmi.transport.Transport$1.run(Transport.java:148)

13:05:14,656 ERROR [STDERR]     at java.security.AccessController.doPrivileged(Native Method)

13:05:14,656 ERROR [STDERR]     at sun.rmi.transport.Transport.serviceCall(Transport.java:144)

13:05:14,656 ERROR [STDERR]     at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)

13:05:14,656 ERROR [STDERR]     at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)

13:05:14,656 ERROR [STDERR]     at java.lang.Thread.run(Thread.java:536)

13:05:14,666 ERROR [LogInterceptor] EJBException:

javax.ejb.EJBException: Transaction failed: Entity with primary key 1 already exists

    at global.OrdreControllerBean.opretOrdre(OrdreControllerBean.java:159)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:324)

    at org.jboss.ejb.StatefulSessionContainer$ContainerInterceptor.invoke(StatefulSessionContainer.java:824)

    at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:130)

    at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:186)

    at org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor.invoke(StatefulSessionInstanceInterceptor.java:268)

    at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:107)

    at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:237)

    at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:98)

    at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:208)

    at org.jboss.ejb.StatefulSessionContainer.invoke(StatefulSessionContainer.java:380)

    at org.jboss.ejb.Container.invoke(Container.java:738)

    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)

    at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:383)

    at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:324)

    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:261)

    at sun.rmi.transport.Transport$1.run(Transport.java:148)

    at java.security.AccessController.doPrivileged(Native Method)

    at sun.rmi.transport.Transport.serviceCall(Transport.java:144)

    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)

    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)

    at java.lang.Thread.run(Thread.java:536)
Avatar billede arne_v Ekspert
10. september 2003 - 14:43 #8
Hm.

Jeg tror at jeg vil prøve at lave et lille eksperiment i aften og se
hvordan det virker hos mig.
Avatar billede kasper28 Nybegynder
10. september 2003 - 15:12 #9
er det fordi man ikke kan lave en rollback på en create() ??
Avatar billede arne_v Ekspert
10. september 2003 - 15:18 #10
Det tror jeg ikke.

En create er jo en SQL INSERT og selvfølgelig bør den kunne rollback'es.
Avatar billede arne_v Ekspert
10. september 2003 - 15:18 #11
Hvad database kører du med ?
Avatar billede kasper28 Nybegynder
10. september 2003 - 15:19 #12
mysql
Avatar billede arne_v Ekspert
10. september 2003 - 15:24 #13
Du bruger vel ikke MyISAM tabeller ?
Avatar billede kasper28 Nybegynder
10. september 2003 - 15:28 #14
ved det faktisk ikke - har ladet jboss oprette tabellerne
Avatar billede arne_v Ekspert
10. september 2003 - 15:31 #15
Pointen er, at MyISAM tabeller ikke understøtter transaktioner.

InnoDB tabeller understøtter transaktioner.

Jeg tror at du skal checke det !
Avatar billede kasper28 Nybegynder
10. september 2003 - 15:36 #16
har anvendt ALTER TABLE global.Ordrelinier_bean TYPE=INNODB på mine tabeller efter jboss har oprettet dem - ved du hvordan man ser om de er ændret ?
Avatar billede arne_v Ekspert
10. september 2003 - 15:43 #17
Prøv med:

SHOW TABLE STATUS
Avatar billede kasper28 Nybegynder
10. september 2003 - 15:47 #18
står til MyISAM :(
Avatar billede arne_v Ekspert
10. september 2003 - 15:50 #19
Så var det nok fristende at:
  (- gemme data)
  - notere sig felter og typer
  - slette tabellerne
  - oprette dem manuelt
  (-restore data)
Avatar billede kasper28 Nybegynder
10. september 2003 - 15:57 #20
jaa - men skal lige sætte INNODB op på mysql serveren nu
Avatar billede kasper28 Nybegynder
10. september 2003 - 21:46 #21
svar mig lige så jeg kan tildele dig nogle point. :D der funker nu
Avatar billede arne_v Ekspert
10. september 2003 - 21:49 #22
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester