Skip to content

Commit 4ee78f0

Browse files
Added programmatic Transaction demo
1 parent 596d7b4 commit 4ee78f0

2 files changed

Lines changed: 143 additions & 83 deletions

File tree

spring-data-eclipse-store-demo/src/main/java/software/xdev/spring/data/eclipse/store/demo/complex/ComplexDemoApplication.java

Lines changed: 13 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -16,38 +16,26 @@
1616

1717
package software.xdev.spring.data.eclipse.store.demo.complex;
1818

19-
import java.time.LocalDate;
20-
21-
import org.slf4j.Logger;
22-
import org.slf4j.LoggerFactory;
2319
import org.springframework.beans.factory.annotation.Autowired;
2420
import org.springframework.boot.CommandLineRunner;
2521
import org.springframework.boot.SpringApplication;
2622
import org.springframework.boot.autoconfigure.SpringBootApplication;
2723
import org.springframework.context.ConfigurableApplicationContext;
28-
import org.springframework.data.domain.Pageable;
29-
30-
import software.xdev.spring.data.eclipse.store.demo.complex.owner.Owner;
31-
import software.xdev.spring.data.eclipse.store.demo.complex.owner.OwnerRepository;
32-
import software.xdev.spring.data.eclipse.store.demo.complex.owner.Pet;
33-
import software.xdev.spring.data.eclipse.store.demo.complex.owner.PetType;
34-
import software.xdev.spring.data.eclipse.store.demo.complex.owner.Visit;
3524

3625

3726
@SpringBootApplication
3827
public class ComplexDemoApplication implements CommandLineRunner
3928
{
40-
private static final Logger LOG = LoggerFactory.getLogger(ComplexDemoApplication.class);
41-
private final OwnerRepository ownerRepository;
29+
private final OwnerService ownerService;
4230
private final VetService vetService;
4331

4432
@Autowired
4533
public ComplexDemoApplication(
46-
final OwnerRepository ownerRepository,
34+
final OwnerService ownerService,
4735
final VetService vetService
4836
)
4937
{
50-
this.ownerRepository = ownerRepository;
38+
this.ownerService = ownerService;
5139
this.vetService = vetService;
5240
}
5341

@@ -60,89 +48,31 @@ public static void main(final String[] args)
6048
@Override
6149
public void run(final String... args)
6250
{
63-
this.transactionalVetCalls();
64-
51+
this.vetCalls();
6552
this.ownerCalls();
6653
}
6754

55+
/**
56+
* Some calls are transactional (delete and create) and some are not (log).
57+
*/
6858
private void ownerCalls()
6959
{
70-
LOG.info("----Owner-BeforeDeleteAll----");
71-
this.ownerRepository.findAll(Pageable.unpaged()).forEach(i -> LOG.info(i.toString()));
72-
this.ownerRepository.deleteAll();
73-
74-
LOG.info("----Owner-AfterDeleteAll----");
75-
this.ownerRepository.findAll(Pageable.unpaged()).forEach(i -> LOG.info(i.toString()));
76-
77-
final Owner owner = createOwner();
78-
this.ownerRepository.save(owner);
79-
80-
LOG.info("----Owner-AfterSave----");
81-
this.ownerRepository.findAll(Pageable.unpaged()).forEach(i -> LOG.info(i.toString()));
82-
83-
final Visit visit = createVisit();
84-
owner.addVisit("Peter", visit);
85-
this.ownerRepository.save(owner);
86-
87-
LOG.info("----Owner-AfterVisit----");
88-
this.ownerRepository
89-
.findByLastName("Nicks", Pageable.unpaged())
90-
.forEach(i ->
91-
{
92-
LOG.info(i.toString());
93-
i.getPets().forEach(p -> {
94-
LOG.info(p.toString());
95-
p.getVisits().forEach(v -> LOG.info(v.toString()));
96-
}
97-
);
98-
}
99-
);
100-
101-
LOG.info("----Owner-Lazy Pet loading----");
102-
this.ownerRepository.findAll().forEach(
103-
o -> o.getPets().forEach(
104-
pet -> LOG.info(String.format(
105-
"Pet %s has owner %s %s",
106-
pet.getName(),
107-
o.getFirstName(),
108-
o.getLastName()))
109-
)
110-
);
60+
this.ownerService.logOwners();
61+
this.ownerService.deleteAll();
62+
this.ownerService.logOwners();
63+
this.ownerService.createNewOwnerAndVisit();
64+
this.ownerService.logOwnersAndVisits();
11165
}
11266

11367
/**
11468
* Each of these calls are one transaction.
11569
*/
116-
private void transactionalVetCalls()
70+
private void vetCalls()
11771
{
11872
this.vetService.logVetEntries();
11973
this.vetService.deleteAll();
12074
this.vetService.logVetEntries();
12175
this.vetService.saveNewEntries();
12276
this.vetService.logVetEntries();
12377
}
124-
125-
private static Visit createVisit()
126-
{
127-
final Visit visit = new Visit();
128-
visit.setDate(LocalDate.now());
129-
visit.setDescription("Peter got his first parvovirus vaccine");
130-
return visit;
131-
}
132-
133-
@SuppressWarnings("checkstyle:MagicNumber")
134-
private static Owner createOwner()
135-
{
136-
final Owner owner = new Owner();
137-
owner.setFirstName("Stevie");
138-
owner.setLastName("Nicks");
139-
final Pet pet = new Pet();
140-
pet.setBirthDate(LocalDate.now().minusWeeks(6));
141-
pet.setName("Peter");
142-
final PetType petType = new PetType();
143-
petType.setName("Dog");
144-
pet.setType(petType);
145-
owner.addPet(pet);
146-
return owner;
147-
}
14878
}
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package software.xdev.spring.data.eclipse.store.demo.complex;
2+
3+
import java.time.LocalDate;
4+
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.data.domain.Pageable;
9+
import org.springframework.stereotype.Service;
10+
import org.springframework.transaction.PlatformTransactionManager;
11+
import org.springframework.transaction.support.TransactionTemplate;
12+
13+
import software.xdev.spring.data.eclipse.store.demo.complex.owner.Owner;
14+
import software.xdev.spring.data.eclipse.store.demo.complex.owner.OwnerRepository;
15+
import software.xdev.spring.data.eclipse.store.demo.complex.owner.Pet;
16+
import software.xdev.spring.data.eclipse.store.demo.complex.owner.PetType;
17+
import software.xdev.spring.data.eclipse.store.demo.complex.owner.Visit;
18+
19+
20+
@Service
21+
public class OwnerService
22+
{
23+
private static final Logger LOG = LoggerFactory.getLogger(OwnerService.class);
24+
private final OwnerRepository ownerRepository;
25+
private final PlatformTransactionManager transactionManager;
26+
27+
@Autowired
28+
public OwnerService(final OwnerRepository ownerRepository, final PlatformTransactionManager transactionManager)
29+
{
30+
this.ownerRepository = ownerRepository;
31+
this.transactionManager = transactionManager;
32+
}
33+
34+
/**
35+
* Non transactional
36+
*/
37+
public void logOwners()
38+
{
39+
LOG.info("----All current stored owners----");
40+
this.ownerRepository.findAll(Pageable.unpaged()).forEach(i -> LOG.info(i.toString()));
41+
}
42+
43+
/**
44+
* Transactional
45+
*/
46+
public void deleteAll()
47+
{
48+
new TransactionTemplate(this.transactionManager).execute(
49+
status ->
50+
{
51+
this.ownerRepository.deleteAll();
52+
LOG.info("----Deleted all owners----");
53+
return null;
54+
});
55+
}
56+
57+
/**
58+
* Non transactional
59+
*/
60+
public void logOwnersAndVisits()
61+
{
62+
LOG.info("----All owners with last name Nicks----");
63+
this.ownerRepository
64+
.findByLastName("Nicks", Pageable.unpaged())
65+
.forEach(i ->
66+
{
67+
LOG.info(i.toString());
68+
i.getPets().forEach(p -> {
69+
LOG.info(p.toString());
70+
p.getVisits().forEach(v -> LOG.info(v.toString()));
71+
}
72+
);
73+
}
74+
);
75+
76+
LOG.info("----Owner-Lazy Pet loading----");
77+
this.ownerRepository.findAll().forEach(
78+
o -> o.getPets().forEach(
79+
pet -> LOG.info(String.format(
80+
"Pet %s has owner %s %s",
81+
pet.getName(),
82+
o.getFirstName(),
83+
o.getLastName()))
84+
)
85+
);
86+
}
87+
88+
/**
89+
* Transactional
90+
*/
91+
public void createNewOwnerAndVisit()
92+
{
93+
new TransactionTemplate(this.transactionManager).execute(
94+
status ->
95+
{
96+
final Owner owner = this.createOwner();
97+
this.ownerRepository.save(owner);
98+
99+
final Visit visit = this.createVisit();
100+
owner.addVisit("Peter", visit);
101+
this.ownerRepository.save(owner);
102+
LOG.info("----Stored new owner and visit----");
103+
return null;
104+
});
105+
}
106+
107+
private Visit createVisit()
108+
{
109+
final Visit visit = new Visit();
110+
visit.setDate(LocalDate.now());
111+
visit.setDescription("Peter got his first parvovirus vaccine");
112+
return visit;
113+
}
114+
115+
@SuppressWarnings("checkstyle:MagicNumber")
116+
private Owner createOwner()
117+
{
118+
final Owner owner = new Owner();
119+
owner.setFirstName("Stevie");
120+
owner.setLastName("Nicks");
121+
final Pet pet = new Pet();
122+
pet.setBirthDate(LocalDate.now().minusWeeks(6));
123+
pet.setName("Peter");
124+
final PetType petType = new PetType();
125+
petType.setName("Dog");
126+
pet.setType(petType);
127+
owner.addPet(pet);
128+
return owner;
129+
}
130+
}

0 commit comments

Comments
 (0)