Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Adrian
/
EjemploDAE2020
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
61be9bed
authored
Nov 23, 2020
by
Adrian
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Transaccion exclusiva en transferencia
parent
857ad4da
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
69 additions
and
24 deletions
src/main/java/es/ujaen/dae/ujacoin/beans/RepositorioClientes.java
src/main/java/es/ujaen/dae/ujacoin/beans/RepositorioCuentas.java
src/main/java/es/ujaen/dae/ujacoin/beans/RepositorioMovimientos.java
src/main/java/es/ujaen/dae/ujacoin/beans/RepositorioTarjetas.java
src/main/java/es/ujaen/dae/ujacoin/beans/ServicioUjaBankImpl.java
src/main/java/es/ujaen/dae/ujacoin/entidades/Cuenta.java
src/main/resources/application-test.properties
src/test/java/es/ujaen/dae/ujacoin/beans/ServicioUjaBankImplIntegrationTest.java
src/main/java/es/ujaen/dae/ujacoin/beans/RepositorioClientes.java
View file @
61be9bed
...
@@ -6,12 +6,10 @@
...
@@ -6,12 +6,10 @@
package
es
.
ujaen
.
dae
.
ujacoin
.
beans
;
package
es
.
ujaen
.
dae
.
ujacoin
.
beans
;
import
es.ujaen.dae.ujacoin.entidades.Cliente
;
import
es.ujaen.dae.ujacoin.entidades.Cliente
;
import
es.ujaen.dae.ujacoin.entidades.Cuenta
;
import
es.ujaen.dae.ujacoin.entidades.Movimiento
;
import
java.util.List
;
import
javax.persistence.EntityManager
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
javax.persistence.PersistenceContext
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
/**
/**
...
...
src/main/java/es/ujaen/dae/ujacoin/beans/RepositorioCuentas.java
View file @
61be9bed
...
@@ -8,11 +8,16 @@ package es.ujaen.dae.ujacoin.beans;
...
@@ -8,11 +8,16 @@ package es.ujaen.dae.ujacoin.beans;
import
es.ujaen.dae.ujacoin.entidades.Cliente
;
import
es.ujaen.dae.ujacoin.entidades.Cliente
;
import
es.ujaen.dae.ujacoin.entidades.Cuenta
;
import
es.ujaen.dae.ujacoin.entidades.Cuenta
;
import
es.ujaen.dae.ujacoin.entidades.Movimiento
;
import
es.ujaen.dae.ujacoin.entidades.Movimiento
;
import
es.ujaen.dae.ujacoin.util.TipoMovimiento
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
javax.persistence.EntityManager
;
import
javax.persistence.EntityManager
;
import
javax.persistence.LockModeType
;
import
javax.persistence.PersistenceContext
;
import
javax.persistence.PersistenceContext
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Isolation
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
/**
/**
...
@@ -42,6 +47,25 @@ public class RepositorioCuentas {
...
@@ -42,6 +47,25 @@ public class RepositorioCuentas {
em
.
remove
(
em
.
merge
(
cuenta
));
em
.
remove
(
em
.
merge
(
cuenta
));
}
}
public
void
transferencia
(
Cuenta
cuentaOrigen
,
Cuenta
cuentaDestino
,
float
importe
){
Cuenta
cuentaOrigenEnlazada
=
em
.
find
(
Cuenta
.
class
,
cuentaOrigen
.
getNumero
(),
LockModeType
.
PESSIMISTIC_WRITE
);
Cuenta
cuentaDestinoEnlazada
=
em
.
find
(
Cuenta
.
class
,
cuentaDestino
.
getNumero
(),
LockModeType
.
PESSIMISTIC_WRITE
);
cuentaOrigenEnlazada
.
modificarSaldo
(-
importe
);
cuentaDestinoEnlazada
.
modificarSaldo
(
importe
);
Movimiento
movOrigen
=
new
Movimiento
(
TipoMovimiento
.
TMTransferenciaEmitida
,
importe
,
LocalDateTime
.
now
(),
cuentaDestino
);
Movimiento
movDestino
=
new
Movimiento
(
TipoMovimiento
.
TMTrasnferenciaRecibida
,
importe
,
LocalDateTime
.
now
(),
cuentaOrigen
);
em
.
persist
(
movOrigen
);
em
.
persist
(
movDestino
);
cuentaOrigenEnlazada
.
getMovimientos
().
add
(
movOrigen
);
cuentaDestinoEnlazada
.
getMovimientos
().
add
(
movDestino
);
}
public
List
<
Cuenta
>
listarCuentasPorCliente
(
Cliente
cliente
)
{
public
List
<
Cuenta
>
listarCuentasPorCliente
(
Cliente
cliente
)
{
em
.
merge
(
cliente
);
em
.
merge
(
cliente
);
...
...
src/main/java/es/ujaen/dae/ujacoin/beans/RepositorioMovimientos.java
View file @
61be9bed
...
@@ -12,6 +12,7 @@ import java.util.List;
...
@@ -12,6 +12,7 @@ import java.util.List;
import
javax.persistence.EntityManager
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
javax.persistence.PersistenceContext
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
/**
/**
...
...
src/main/java/es/ujaen/dae/ujacoin/beans/RepositorioTarjetas.java
View file @
61be9bed
...
@@ -12,6 +12,7 @@ import java.util.List;
...
@@ -12,6 +12,7 @@ import java.util.List;
import
javax.persistence.EntityManager
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
javax.persistence.PersistenceContext
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
/**
/**
...
...
src/main/java/es/ujaen/dae/ujacoin/beans/ServicioUjaBankImpl.java
View file @
61be9bed
...
@@ -17,10 +17,12 @@ import es.ujaen.dae.ujacoin.util.TipoMovimiento;
...
@@ -17,10 +17,12 @@ import es.ujaen.dae.ujacoin.util.TipoMovimiento;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Random
;
import
java.util.Random
;
import
javax.persistence.EntityManager
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.dao.DataAccessResourceFailureException
;
import
org.springframework.dao.DataAccessResourceFailureException
;
import
org.springframework.dao.EmptyResultDataAccessException
;
import
org.springframework.dao.EmptyResultDataAccessException
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
/**
/**
...
@@ -107,23 +109,11 @@ public class ServicioUjaBankImpl implements ServicioUjaBank {
...
@@ -107,23 +109,11 @@ public class ServicioUjaBankImpl implements ServicioUjaBank {
}
}
@Transactional
@Override
@Override
public
void
transferencia
(
Cuenta
cuentaOrigen
,
Cuenta
cuentaDestino
,
float
importe
)
{
public
void
transferencia
(
Cuenta
cuentaOrigen
,
Cuenta
cuentaDestino
,
float
importe
)
{
repoCuentas
.
actualizar
(
cuentaOrigen
);
repoCuentas
.
transferencia
(
cuentaOrigen
,
cuentaDestino
,
importe
);
repoCuentas
.
actualizar
(
cuentaDestino
);
cuentaOrigen
.
modificarSaldo
(-
importe
);
cuentaDestino
.
modificarSaldo
(
importe
);
Movimiento
movOrigen
=
new
Movimiento
(
TipoMovimiento
.
TMTransferenciaEmitida
,
importe
,
LocalDateTime
.
now
(),
cuentaDestino
);
Movimiento
movDestino
=
new
Movimiento
(
TipoMovimiento
.
TMTrasnferenciaRecibida
,
importe
,
LocalDateTime
.
now
(),
cuentaOrigen
);
repoMovimientos
.
insertar
(
movOrigen
);
repoMovimientos
.
insertar
(
movDestino
);
repoCuentas
.
a
ñ
adirMovimiento
(
cuentaOrigen
,
movOrigen
);
repoCuentas
.
a
ñ
adirMovimiento
(
cuentaDestino
,
movDestino
);
}
}
...
@@ -215,4 +205,12 @@ public class ServicioUjaBankImpl implements ServicioUjaBank {
...
@@ -215,4 +205,12 @@ public class ServicioUjaBankImpl implements ServicioUjaBank {
}
}
//SOLO PARA TESTS
public
void
asignarSaldoManual
(
Cuenta
cuenta
,
float
saldo
){
cuenta
.
setSaldo
(
saldo
);
repoCuentas
.
actualizar
(
cuenta
);
}
}
}
src/main/java/es/ujaen/dae/ujacoin/entidades/Cuenta.java
View file @
61be9bed
...
@@ -15,6 +15,7 @@ import javax.persistence.Entity;
...
@@ -15,6 +15,7 @@ import javax.persistence.Entity;
import
javax.persistence.FetchType
;
import
javax.persistence.FetchType
;
import
javax.persistence.Id
;
import
javax.persistence.Id
;
import
javax.persistence.JoinColumn
;
import
javax.persistence.JoinColumn
;
import
javax.persistence.ManyToMany
;
import
javax.persistence.ManyToOne
;
import
javax.persistence.ManyToOne
;
import
javax.persistence.MapKey
;
import
javax.persistence.MapKey
;
import
javax.persistence.OneToMany
;
import
javax.persistence.OneToMany
;
...
...
src/main/resources/application-test.properties
View file @
61be9bed
spring.jpa.database-platform
=
com.springboot.sqlite.SQL
Dialect
spring.jpa.database-platform
=
org.hibernate.dialect.MySQL55
Dialect
spring.jpa.hibernate.ddl-auto
=
update
spring.jpa.hibernate.ddl-auto
=
update
spring.datasource.url
=
jdbc:
sqlite:sqlitesampleTest.db
spring.datasource.url
=
jdbc:
mysql://176.31.162.158:3306/DAE2020G9
spring.datasource.driver-class-name
=
org.sqlite.JDBC
spring.datasource.driver-class-name
=
com.mysql.cj.jdbc.Driver
spring.datasource.username
=
spring.datasource.username
=
DAE2020G9
spring.datasource.password
=
spring.datasource.password
=
DAE2020G9
src/test/java/es/ujaen/dae/ujacoin/beans/ServicioUjaBankImplIntegrationTest.java
View file @
61be9bed
...
@@ -119,7 +119,29 @@ public class ServicioUjaBankImplIntegrationTest {
...
@@ -119,7 +119,29 @@ public class ServicioUjaBankImplIntegrationTest {
Cuenta
cuentaA
=
ujaBank
.
listaCuentas
(
clienteA
).
get
(
0
);
Cuenta
cuentaA
=
ujaBank
.
listaCuentas
(
clienteA
).
get
(
0
);
Cuenta
cuentaB
=
ujaBank
.
listaCuentas
(
clienteB
).
get
(
0
);
Cuenta
cuentaB
=
ujaBank
.
listaCuentas
(
clienteB
).
get
(
0
);
cuentaA
.
setSaldo
(
450
);
ujaBank
.
asignarSaldoManual
(
cuentaA
,
450
);
// ArrayList<Thread> hilos = new ArrayList<>();
//
// for (int i = 0; i < 2; i++) {
//
// Thread t = new Thread(() -> {
// ujaBank.transferencia(cuentaA, cuentaB, 125);
// });
// hilos.add(t);
// t.start();
//
// }
//
// for (Thread hilo : hilos) {
// try{
// hilo.join();
// }catch(InterruptedException e){
// throw new RuntimeException("Excepción en el join de test");
// }
// }
//
// Assertions.assertEquals(450, cuentaA.getSaldo() + cuentaB.getSaldo());
ujaBank
.
transferencia
(
cuentaA
,
cuentaB
,
125
);
ujaBank
.
transferencia
(
cuentaA
,
cuentaB
,
125
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment