Skip to content

Commit 34c2b84

Browse files
committed
Changed application context configuration from XML to Java-based and removed RMI dependency between booking and routing context.
1 parent ecca53f commit 34c2b84

File tree

13 files changed

+132
-140
lines changed

13 files changed

+132
-140
lines changed
Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.pathfinder.api;
22

3-
import java.rmi.Remote;
4-
import java.rmi.RemoteException;
53
import java.util.List;
64
import java.util.Properties;
75

@@ -10,17 +8,16 @@
108
* and used by us (booking and tracking team).
119
*
1210
*/
13-
public interface GraphTraversalService extends Remote {
11+
public interface GraphTraversalService {
1412

1513
/**
1614
* @param originUnLocode origin UN Locode
1715
* @param destinationUnLocode destination UN Locode
1816
* @param limitations restrictions on the path selection, as key-value according to some API specification
19-
* @return A list of transit paths
20-
* @throws RemoteException RMI problem
17+
* @return A list of transit pathss
2118
*/
2219
List<TransitPath> findShortestPath(String originUnLocode,
2320
String destinationUnLocode,
24-
Properties limitations) throws RemoteException;
21+
Properties limitations);
2522

2623
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.pathfinder.config;
2+
3+
import com.pathfinder.api.GraphTraversalService;
4+
import com.pathfinder.internal.GraphDAO;
5+
import com.pathfinder.internal.GraphTraversalServiceImpl;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.context.annotation.Configuration;
8+
9+
@Configuration
10+
public class PathfinderApplicationContext {
11+
12+
private GraphDAO graphDAO() {
13+
return new GraphDAO();
14+
}
15+
16+
@Bean
17+
public GraphTraversalService graphTraversalService() {
18+
return new GraphTraversalServiceImpl(graphDAO());
19+
}
20+
}

src/main/java/se/citerus/dddsample/Application.java

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,28 @@
11
package se.citerus.dddsample;
22

3-
import org.hibernate.SessionFactory;
3+
import com.pathfinder.config.PathfinderApplicationContext;
44
import org.springframework.beans.factory.annotation.Autowired;
55
import org.springframework.boot.SpringApplication;
66
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
7-
import org.springframework.context.annotation.Bean;
87
import org.springframework.context.annotation.Configuration;
9-
import org.springframework.context.annotation.ImportResource;
10-
import org.springframework.transaction.PlatformTransactionManager;
8+
import org.springframework.context.annotation.Import;
119
import se.citerus.dddsample.application.util.SampleDataGenerator;
12-
import se.citerus.dddsample.domain.model.cargo.CargoRepository;
13-
import se.citerus.dddsample.domain.model.handling.HandlingEventRepository;
14-
import se.citerus.dddsample.domain.model.location.LocationRepository;
15-
import se.citerus.dddsample.domain.model.voyage.VoyageRepository;
10+
import se.citerus.dddsample.config.DDDSampleApplicationContext;
1611

1712
import javax.annotation.PostConstruct;
1813

1914
@Configuration
20-
@ImportResource({
21-
"classpath:/com/pathfinder/internal/applicationContext.xml",
22-
"classpath:context-infrastructure.xml",
23-
"classpath:context-application.xml",
24-
"classpath:context-domain.xml",
25-
"classpath:context-interfaces.xml"})
15+
@Import({DDDSampleApplicationContext.class,
16+
PathfinderApplicationContext.class})
2617
@EnableAutoConfiguration
2718
public class Application {
2819

2920
@Autowired
30-
PlatformTransactionManager platformTransactionManager;
31-
32-
@Autowired
33-
SessionFactory sessionFactory;
34-
35-
@Autowired
36-
CargoRepository cargoRepository;
37-
38-
@Autowired
39-
VoyageRepository voyageRepository;
40-
41-
@Autowired
42-
LocationRepository locationRepository;
43-
44-
@Autowired
45-
HandlingEventRepository handlingEventRepository;
46-
47-
@Bean
48-
public SampleDataGenerator sampleDataGenerator() {
49-
return new SampleDataGenerator(platformTransactionManager, sessionFactory, cargoRepository, voyageRepository, locationRepository, handlingEventRepository);
50-
}
21+
SampleDataGenerator sampleDataGenerator;
5122

5223
@PostConstruct
5324
public void init() {
54-
sampleDataGenerator().generate();
25+
sampleDataGenerator.generate();
5526
}
5627

5728
public static void main(String[] args) throws Exception {
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package se.citerus.dddsample.config;
2+
3+
import com.pathfinder.api.GraphTraversalService;
4+
import org.hibernate.SessionFactory;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.context.annotation.ImportResource;
9+
import org.springframework.transaction.PlatformTransactionManager;
10+
import se.citerus.dddsample.application.ApplicationEvents;
11+
import se.citerus.dddsample.application.BookingService;
12+
import se.citerus.dddsample.application.CargoInspectionService;
13+
import se.citerus.dddsample.application.HandlingEventService;
14+
import se.citerus.dddsample.application.impl.BookingServiceImpl;
15+
import se.citerus.dddsample.application.impl.CargoInspectionServiceImpl;
16+
import se.citerus.dddsample.application.impl.HandlingEventServiceImpl;
17+
import se.citerus.dddsample.application.util.SampleDataGenerator;
18+
import se.citerus.dddsample.domain.model.cargo.CargoRepository;
19+
import se.citerus.dddsample.domain.model.handling.HandlingEventFactory;
20+
import se.citerus.dddsample.domain.model.handling.HandlingEventRepository;
21+
import se.citerus.dddsample.domain.model.location.LocationRepository;
22+
import se.citerus.dddsample.domain.model.voyage.VoyageRepository;
23+
import se.citerus.dddsample.domain.service.RoutingService;
24+
import se.citerus.dddsample.infrastructure.routing.ExternalRoutingService;
25+
26+
@Configuration
27+
@ImportResource({
28+
"classpath:context-interfaces.xml",
29+
"classpath:context-infrastructure-messaging.xml",
30+
"classpath:context-infrastructure-persistence.xml"})
31+
public class DDDSampleApplicationContext {
32+
33+
@Autowired
34+
CargoRepository cargoRepository;
35+
36+
@Autowired
37+
LocationRepository locationRepository;
38+
39+
@Autowired
40+
VoyageRepository voyageRepository;
41+
42+
@Autowired
43+
RoutingService routingService;
44+
45+
@Autowired
46+
HandlingEventRepository handlingEventRepository;
47+
48+
@Autowired
49+
HandlingEventFactory handlingEventFactory;
50+
51+
@Autowired
52+
ApplicationEvents applicationEvents;
53+
54+
@Autowired
55+
GraphTraversalService graphTraversalService;
56+
57+
@Autowired
58+
PlatformTransactionManager platformTransactionManager;
59+
60+
@Autowired
61+
SessionFactory sessionFactory;
62+
63+
@Bean
64+
public BookingService bookingService() {
65+
return new BookingServiceImpl(cargoRepository, locationRepository, routingService);
66+
}
67+
68+
@Bean
69+
public CargoInspectionService cargoInspectionService() {
70+
return new CargoInspectionServiceImpl(applicationEvents, cargoRepository, handlingEventRepository);
71+
}
72+
73+
@Bean
74+
public HandlingEventService handlingEventService() {
75+
return new HandlingEventServiceImpl(handlingEventRepository, applicationEvents, handlingEventFactory);
76+
}
77+
78+
@Bean
79+
public HandlingEventFactory handlingEventFactory() {
80+
return new HandlingEventFactory(cargoRepository, voyageRepository, locationRepository);
81+
}
82+
83+
@Bean
84+
public RoutingService routingService() {
85+
ExternalRoutingService routingService = new ExternalRoutingService();
86+
routingService.setGraphTraversalService(graphTraversalService);
87+
routingService.setLocationRepository(locationRepository);
88+
routingService.setVoyageRepository(voyageRepository);
89+
return routingService;
90+
}
91+
92+
@Bean
93+
public SampleDataGenerator sampleDataGenerator() {
94+
return new SampleDataGenerator(platformTransactionManager, sessionFactory, cargoRepository, voyageRepository, locationRepository, handlingEventRepository);
95+
}
96+
}

src/main/java/se/citerus/dddsample/infrastructure/routing/ExternalRoutingService.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
import se.citerus.dddsample.domain.model.voyage.VoyageRepository;
1616
import se.citerus.dddsample.domain.service.RoutingService;
1717

18-
import java.rmi.RemoteException;
1918
import java.util.ArrayList;
20-
import java.util.Collections;
2119
import java.util.List;
2220
import java.util.Properties;
2321

@@ -45,16 +43,11 @@ public List<Itinerary> fetchRoutesForSpecification(RouteSpecification routeSpeci
4543
limitations.setProperty("DEADLINE", routeSpecification.arrivalDeadline().toString());
4644

4745
final List<TransitPath> transitPaths;
48-
try {
4946
transitPaths = graphTraversalService.findShortestPath(
5047
origin.unLocode().idString(),
5148
destination.unLocode().idString(),
5249
limitations
5350
);
54-
} catch (RemoteException e) {
55-
log.error(e, e);
56-
return Collections.EMPTY_LIST;
57-
}
5851

5952
/*
6053
The returned result is then translated back into our domain model.

src/main/resources/com/pathfinder/internal/applicationContext.xml

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/main/resources/context-application.xml

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/main/resources/context-domain.xml

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/main/resources/context-infrastructure.xml

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/test/java/se/citerus/dddsample/infrastructure/persistence/hibernate/CargoRepositoryTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package se.citerus.dddsample.infrastructure.persistence.hibernate;
22

3-
import org.hibernate.SessionFactory;
43
import org.hibernate.Session;
4+
import org.hibernate.SessionFactory;
55
import org.junit.Before;
66
import org.junit.Test;
77
import org.junit.runner.RunWith;
@@ -38,7 +38,7 @@
3838
import static se.citerus.dddsample.domain.model.voyage.SampleVoyages.CM004;
3939

4040
@RunWith(SpringJUnit4ClassRunner.class)
41-
@ContextConfiguration(value = {"/context-infrastructure-persistence.xml", "/context-domain.xml"})
41+
@ContextConfiguration(value = {"/context-infrastructure-persistence.xml"})
4242
@TransactionConfiguration(transactionManager = "transactionManager")
4343
@Transactional
4444
public class CargoRepositoryTest {

0 commit comments

Comments
 (0)