소스 검색

Moved transaction demarcation from ExternalRoutingServiceImpl into pathfinder application, improved documentation.

peter_backlund 17 년 전
부모
커밋
0e7ce21cf3

+ 1
- 8
dddsample/src/main/java/com/partner/pathfinder/api/package.html 파일 보기

1
 <html>
1
 <html>
2
 <body>
2
 <body>
3
 <p>
3
 <p>
4
-  This is the routing team context, which is separate from "our" application and context.
5
-  Our domain model with cargo, itinerary, handling event etc does not exist here.
6
-  The routing service implementation works against the API exposed by
7
-  this context.
8
-</p>
9
-<p>
10
-  It is not related to the core application at all, and is only part of this source tree for
11
-  developer convenience.
4
+  Public API for the pathfinder application.
12
 </p>
5
 </p>
13
 </body>
6
 </body>
14
 </html>
7
 </html>

+ 2
- 0
dddsample/src/main/java/com/partner/pathfinder/internal/GraphTraversalServiceImpl.java 파일 보기

3
 import com.partner.pathfinder.api.GraphTraversalService;
3
 import com.partner.pathfinder.api.GraphTraversalService;
4
 import com.partner.pathfinder.api.TransitEdge;
4
 import com.partner.pathfinder.api.TransitEdge;
5
 import com.partner.pathfinder.api.TransitPath;
5
 import com.partner.pathfinder.api.TransitPath;
6
+import org.springframework.transaction.annotation.Transactional;
6
 
7
 
7
 import java.util.*;
8
 import java.util.*;
8
 
9
 
16
     this.random = new Random();
17
     this.random = new Random();
17
   }
18
   }
18
 
19
 
20
+  @Transactional(readOnly = true)
19
   public List<TransitPath> findShortestPath(String originUnLocode, String destinationUnLocode) {
21
   public List<TransitPath> findShortestPath(String originUnLocode, String destinationUnLocode) {
20
     List<String> allVertices = dao.listLocations();
22
     List<String> allVertices = dao.listLocations();
21
     allVertices.remove(originUnLocode);
23
     allVertices.remove(originUnLocode);

+ 1
- 1
dddsample/src/main/java/com/partner/pathfinder/internal/package.html 파일 보기

1
 <html>
1
 <html>
2
 <body>
2
 <body>
3
 <p>
3
 <p>
4
-  Internal parts of the routing team application.
4
+  Internal parts of the pathfinder application.
5
 </p>
5
 </p>
6
 </body>
6
 </body>
7
 </html>
7
 </html>

+ 14
- 0
dddsample/src/main/java/com/partner/pathfinder/package.html 파일 보기

1
+<html>
2
+<body>
3
+<p>
4
+  This is the pathfinder application context, which is separate from "our" application and context.
5
+  Our domain model with cargo, itinerary, handling event etc does not exist here.
6
+  The routing domain service implementation works against the API exposed by
7
+  this context.
8
+</p>
9
+<p>
10
+  It is not related to the core application at all, and is only part of this source tree for
11
+  developer convenience.
12
+</p>
13
+</body>
14
+</html>

+ 4
- 2
dddsample/src/main/java/se/citerus/dddsample/infrastructure/routing/ExternalRoutingService.java 파일 보기

3
 import com.partner.pathfinder.api.GraphTraversalService;
3
 import com.partner.pathfinder.api.GraphTraversalService;
4
 import com.partner.pathfinder.api.TransitEdge;
4
 import com.partner.pathfinder.api.TransitEdge;
5
 import com.partner.pathfinder.api.TransitPath;
5
 import com.partner.pathfinder.api.TransitPath;
6
-import org.springframework.transaction.annotation.Transactional;
7
 import se.citerus.dddsample.domain.model.cargo.Itinerary;
6
 import se.citerus.dddsample.domain.model.cargo.Itinerary;
8
 import se.citerus.dddsample.domain.model.cargo.Leg;
7
 import se.citerus.dddsample.domain.model.cargo.Leg;
9
 import se.citerus.dddsample.domain.model.cargo.RouteSpecification;
8
 import se.citerus.dddsample.domain.model.cargo.RouteSpecification;
30
   private LocationRepository locationRepository;
29
   private LocationRepository locationRepository;
31
   private VoyageRepository voyageRepository;
30
   private VoyageRepository voyageRepository;
32
 
31
 
33
-  @Transactional(readOnly = true)
34
   public List<Itinerary> fetchRoutesForSpecification(RouteSpecification routeSpecification) {
32
   public List<Itinerary> fetchRoutesForSpecification(RouteSpecification routeSpecification) {
35
     final Location origin = routeSpecification.origin();
33
     final Location origin = routeSpecification.origin();
36
     final Location destination = routeSpecification.destination();
34
     final Location destination = routeSpecification.destination();
37
 
35
 
36
+    // TODO send arrival deadline too
37
+
38
     final List<TransitPath> transitPaths = graphTraversalService.findShortestPath(
38
     final List<TransitPath> transitPaths = graphTraversalService.findShortestPath(
39
       origin.unLocode().idString(),
39
       origin.unLocode().idString(),
40
       destination.unLocode().idString()
40
       destination.unLocode().idString()
47
       // Use the specification to safe-guard against invalid itineraries
47
       // Use the specification to safe-guard against invalid itineraries
48
       if (routeSpecification.isSatisfiedBy(itinerary)) {
48
       if (routeSpecification.isSatisfiedBy(itinerary)) {
49
         itineraries.add(itinerary);
49
         itineraries.add(itinerary);
50
+      } else {
51
+        // TODO log warning/error? Fail?
50
       }
52
       }
51
     }
53
     }
52
 
54
 

+ 3
- 1
dddsample/src/test/java/se/citerus/dddsample/infrastructure/routing/ExternalRoutingServiceTest.java 파일 보기

43
     externalRoutingService.setGraphTraversalService(graphTraversalService);
43
     externalRoutingService.setGraphTraversalService(graphTraversalService);
44
   }
44
   }
45
 
45
 
46
+  // TODO this test belongs in com.partner.pathfinder
47
+
46
   public void testCalculatePossibleRoutes() {
48
   public void testCalculatePossibleRoutes() {
47
     TrackingId trackingId = new TrackingId("ABC");
49
     TrackingId trackingId = new TrackingId("ABC");
48
     RouteSpecification routeSpecification = new RouteSpecification(HONGKONG, HELSINKI, new Date());
50
     RouteSpecification routeSpecification = new RouteSpecification(HONGKONG, HELSINKI, new Date());
54
 
56
 
55
     List<Itinerary> candidates = externalRoutingService.fetchRoutesForSpecification(routeSpecification);
57
     List<Itinerary> candidates = externalRoutingService.fetchRoutesForSpecification(routeSpecification);
56
     assertNotNull(candidates);
58
     assertNotNull(candidates);
57
-    
59
+
58
     for (Itinerary itinerary : candidates) {
60
     for (Itinerary itinerary : candidates) {
59
       List<Leg> legs = itinerary.legs();
61
       List<Leg> legs = itinerary.legs();
60
       assertNotNull(legs);
62
       assertNotNull(legs);