Skip to content

Commit 4a7fde7

Browse files
authored
Merge pull request #39 from peyerroger/bugfix/auto-config-condition
BugFix - Remove invalid condition in auto configuration
2 parents 1c8ed9f + d516d63 commit 4a7fde7

File tree

8 files changed

+154
-62
lines changed

8 files changed

+154
-62
lines changed

quickfixj-spring-boot-starter/src/main/java/io/allune/quickfixj/spring/boot/starter/autoconfigure/client/QuickFixJClientAutoConfiguration.java

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@
2424
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2525
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2626
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
27-
import org.springframework.boot.autoconfigure.condition.ResourceCondition;
2827
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2928
import org.springframework.context.ApplicationEventPublisher;
3029
import org.springframework.context.annotation.Bean;
31-
import org.springframework.context.annotation.Conditional;
3230
import org.springframework.context.annotation.Configuration;
3331

3432
import io.allune.quickfixj.spring.boot.starter.application.EventPublisherApplicationAdapter;
@@ -58,7 +56,6 @@
5856
@Configuration
5957
@EnableConfigurationProperties(QuickFixJBootProperties.class)
6058
@ConditionalOnBean(QuickFixJClientMarkerConfiguration.Marker.class)
61-
@Conditional(QuickFixJClientAutoConfiguration.ClientConfigAvailableCondition.class)
6259
public class QuickFixJClientAutoConfiguration {
6360

6461
private static final String SYSTEM_VARIABLE_QUICKFIXJ_CLIENT_CONFIG = "quickfixj.client.config";
@@ -75,25 +72,25 @@ public SessionSettings clientSessionSettings(QuickFixJBootProperties properties)
7572
}
7673

7774
@Bean
78-
@ConditionalOnMissingBean(name = "clientApplication")
75+
@ConditionalOnMissingBean(name = "clientApplication", value = Application.class)
7976
public Application clientApplication(ApplicationEventPublisher applicationEventPublisher) {
8077
return new EventPublisherApplicationAdapter(applicationEventPublisher);
8178
}
8279

8380
@Bean
84-
@ConditionalOnMissingBean(name = "clientMessageStoreFactory")
81+
@ConditionalOnMissingBean(name = "clientMessageStoreFactory", value = MessageStoreFactory.class)
8582
public MessageStoreFactory clientMessageStoreFactory() {
8683
return new MemoryStoreFactory();
8784
}
8885

8986
@Bean
90-
@ConditionalOnMissingBean(name = "clientLogFactory")
87+
@ConditionalOnMissingBean(name = "clientLogFactory", value = LogFactory.class)
9188
public LogFactory clientLogFactory(SessionSettings clientSessionSettings) {
9289
return new ScreenLogFactory(clientSessionSettings);
9390
}
9491

9592
@Bean
96-
@ConditionalOnMissingBean(name = "clientMessageFactory")
93+
@ConditionalOnMissingBean(name = "clientMessageFactory", value = MessageFactory.class)
9794
public MessageFactory clientMessageFactory() {
9895
return new DefaultMessageFactory();
9996
}
@@ -150,7 +147,7 @@ public ConnectorManager clientConnectionManager(Initiator clientInitiator, Quick
150147
@ConditionalOnProperty(prefix = "quickfixj.client", name = "jmx-enabled", havingValue = "true")
151148
@ConditionalOnClass(JmxExporter.class)
152149
@ConditionalOnSingleCandidate(Initiator.class)
153-
@ConditionalOnMissingBean(name = "clientInitiatorMBean")
150+
@ConditionalOnMissingBean(name = "clientInitiatorMBean", value = ObjectName.class)
154151
public ObjectName clientInitiatorMBean(Initiator clientInitiator) {
155152
try {
156153
JmxExporter exporter = new JmxExporter();
@@ -161,20 +158,8 @@ public ObjectName clientInitiatorMBean(Initiator clientInitiator) {
161158
}
162159

163160
@Bean
164-
@ConditionalOnMissingBean(name = "clientQuickFixJTemplate")
161+
@ConditionalOnMissingBean(name = "clientQuickFixJTemplate", value = QuickFixJTemplate.class)
165162
public QuickFixJTemplate clientQuickFixJTemplate() {
166163
return new QuickFixJTemplate();
167164
}
168-
169-
/**
170-
* {@link ClientConfigAvailableCondition} that checks if the client configuration file is defined in
171-
* {@code quickfixj.client.config} configuration key or in the default locations.
172-
*/
173-
static class ClientConfigAvailableCondition extends ResourceCondition {
174-
175-
ClientConfigAvailableCondition() {
176-
super("QuickFixJ Client", SYSTEM_VARIABLE_QUICKFIXJ_CLIENT_CONFIG,
177-
"file:./" + QUICKFIXJ_CLIENT_CONFIG, "classpath:/" + QUICKFIXJ_CLIENT_CONFIG);
178-
}
179-
}
180165
}

quickfixj-spring-boot-starter/src/main/java/io/allune/quickfixj/spring/boot/starter/autoconfigure/server/QuickFixJServerAutoConfiguration.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@
2424
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2525
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2626
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
27-
import org.springframework.boot.autoconfigure.condition.ResourceCondition;
2827
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2928
import org.springframework.context.ApplicationEventPublisher;
3029
import org.springframework.context.annotation.Bean;
31-
import org.springframework.context.annotation.Conditional;
3230
import org.springframework.context.annotation.Configuration;
3331

3432
import io.allune.quickfixj.spring.boot.starter.application.EventPublisherApplicationAdapter;
@@ -58,7 +56,6 @@
5856
@Configuration
5957
@EnableConfigurationProperties(QuickFixJBootProperties.class)
6058
@ConditionalOnBean(value = QuickFixJServerMarkerConfiguration.Marker.class)
61-
@Conditional(QuickFixJServerAutoConfiguration.ServerConfigAvailableCondition.class)
6259
public class QuickFixJServerAutoConfiguration {
6360

6461
private static final String SYSTEM_VARIABLE_QUICKFIXJ_SERVER_CONFIG = "quickfixj.server.config";
@@ -163,16 +160,4 @@ public ObjectName serverAcceptorMBean(Acceptor serverAcceptor) {
163160
public QuickFixJTemplate serverQuickFixJTemplate() {
164161
return new QuickFixJTemplate();
165162
}
166-
167-
/**
168-
* {@link ServerConfigAvailableCondition} that checks if the
169-
* {@code quickfixj.server.config} configuration key is defined.
170-
*/
171-
static class ServerConfigAvailableCondition extends ResourceCondition {
172-
173-
ServerConfigAvailableCondition() {
174-
super("QuickFixJ Server", SYSTEM_VARIABLE_QUICKFIXJ_SERVER_CONFIG,
175-
"file:./quickfixj-server.cfg", "classpath:/quickfixj-server.cfg");
176-
}
177-
}
178163
}

quickfixj-spring-boot-starter/src/test/java/io/allune/quickfixj/spring/boot/starter/autoconfigure/QuickFixJClientAutoConfigurationTest.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
import org.junit.Test;
2525
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2626
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
27+
import org.springframework.context.annotation.Bean;
2728
import org.springframework.context.annotation.Configuration;
2829
import org.springframework.context.annotation.PropertySource;
2930

3031
import io.allune.quickfixj.spring.boot.starter.EnableQuickFixJClient;
3132
import io.allune.quickfixj.spring.boot.starter.application.EventPublisherApplicationAdapter;
3233
import io.allune.quickfixj.spring.boot.starter.autoconfigure.client.QuickFixJClientAutoConfiguration;
3334
import io.allune.quickfixj.spring.boot.starter.connection.ConnectorManager;
35+
import io.allune.quickfixj.spring.boot.starter.connection.SessionSettingsLocator;
3436
import io.allune.quickfixj.spring.boot.starter.exception.ConfigurationException;
3537
import io.allune.quickfixj.spring.boot.starter.template.QuickFixJTemplate;
3638
import quickfix.Application;
@@ -52,7 +54,7 @@
5254
public class QuickFixJClientAutoConfigurationTest {
5355

5456
@Test
55-
public void testAutoConfiguredBeansSingleThreadedAcceptor() {
57+
public void testAutoConfiguredBeansSingleThreadedInitiator() {
5658
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SingleThreadedClientInitiatorConfiguration.class);
5759
ConnectorManager clientConnectionManager = ctx.getBean("clientConnectionManager", ConnectorManager.class);
5860
assertThat(clientConnectionManager.isRunning()).isFalse();
@@ -65,7 +67,7 @@ public void testAutoConfiguredBeansSingleThreadedAcceptor() {
6567
}
6668

6769
@Test
68-
public void testAutoConfiguredBeansMultiThreadedAcceptor() {
70+
public void testAutoConfiguredBeansMultiThreadedInitiator() {
6971
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MultiThreadedClientInitiatorConfiguration.class);
7072
ConnectorManager clientConnectionManager = ctx.getBean("clientConnectionManager", ConnectorManager.class);
7173
assertThat(clientConnectionManager.isRunning()).isFalse();
@@ -106,6 +108,13 @@ public void shouldThrowConfigurationExceptionCreatingClientInitiatorMBeanGivenNu
106108
.isThrownBy(() -> autoConfiguration.clientInitiatorMBean(null));
107109
}
108110

111+
@Test
112+
public void testAutoConfiguredBeansSingleThreadedInitiatorWithCustomClientSettings() {
113+
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SingleThreadedClientInitiatorConfigurationWithCustomClientSettings.class);
114+
SessionSettings customClientSessionSettings = ctx.getBean("clientSessionSettings", SessionSettings.class);
115+
assertThat(customClientSessionSettings.getDefaultProperties().getProperty("SenderCompID")).isEqualTo("CUSTOM-BANZAI");
116+
}
117+
109118
private void hasAutoConfiguredBeans(AnnotationConfigApplicationContext ctx) {
110119
Application clientApplication = ctx.getBean("clientApplication", Application.class);
111120
assertThat(clientApplication).isInstanceOf(EventPublisherApplicationAdapter.class);
@@ -144,4 +153,16 @@ static class SingleThreadedClientInitiatorConfiguration {
144153
static class MultiThreadedClientInitiatorConfiguration {
145154

146155
}
156+
157+
@Configuration
158+
@EnableAutoConfiguration
159+
@EnableQuickFixJClient
160+
@PropertySource("classpath:single-threaded-application-no-config-defined.properties")
161+
static class SingleThreadedClientInitiatorConfigurationWithCustomClientSettings {
162+
163+
@Bean(name = "clientSessionSettings")
164+
public SessionSettings customClientSessionSettings() {
165+
return SessionSettingsLocator.loadSettings("classpath:/quickfixj-client-extra.cfg");
166+
}
167+
}
147168
}

quickfixj-spring-boot-starter/src/test/java/io/allune/quickfixj/spring/boot/starter/autoconfigure/QuickFixJServerAutoConfigurationTest.java

Lines changed: 45 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
import org.junit.Test;
2525
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2626
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
27+
import org.springframework.context.annotation.Bean;
2728
import org.springframework.context.annotation.Configuration;
2829
import org.springframework.context.annotation.PropertySource;
2930

3031
import io.allune.quickfixj.spring.boot.starter.EnableQuickFixJServer;
3132
import io.allune.quickfixj.spring.boot.starter.application.EventPublisherApplicationAdapter;
3233
import io.allune.quickfixj.spring.boot.starter.autoconfigure.server.QuickFixJServerAutoConfiguration;
3334
import io.allune.quickfixj.spring.boot.starter.connection.ConnectorManager;
35+
import io.allune.quickfixj.spring.boot.starter.connection.SessionSettingsLocator;
3436
import io.allune.quickfixj.spring.boot.starter.exception.ConfigurationException;
3537
import io.allune.quickfixj.spring.boot.starter.template.QuickFixJTemplate;
3638
import quickfix.Acceptor;
@@ -77,29 +79,6 @@ public void testAutoConfiguredBeansMultiThreadedAcceptor() {
7779
hasAutoConfiguredBeans(ctx);
7880
}
7981

80-
private void hasAutoConfiguredBeans(AnnotationConfigApplicationContext ctx) {
81-
Application serverApplication = ctx.getBean("serverApplication", Application.class);
82-
assertThat(serverApplication).isInstanceOf(EventPublisherApplicationAdapter.class);
83-
84-
MessageStoreFactory serverMessageStoreFactory = ctx.getBean("serverMessageStoreFactory", MessageStoreFactory.class);
85-
assertThat(serverMessageStoreFactory).isInstanceOf(MemoryStoreFactory.class);
86-
87-
LogFactory serverLogFactory = ctx.getBean("serverLogFactory", LogFactory.class);
88-
assertThat(serverLogFactory).isInstanceOf(ScreenLogFactory.class);
89-
90-
MessageFactory serverMessageFactory = ctx.getBean("serverMessageFactory", MessageFactory.class);
91-
assertThat(serverMessageFactory).isInstanceOf(DefaultMessageFactory.class);
92-
93-
SessionSettings serverSessionSettings = ctx.getBean("serverSessionSettings", SessionSettings.class);
94-
assertThat(serverSessionSettings).isNotNull();
95-
96-
ObjectName serverInitiatorMBean = ctx.getBean("serverAcceptorMBean", ObjectName.class);
97-
assertThat(serverInitiatorMBean).isNotNull();
98-
99-
QuickFixJTemplate serverQuickFixJTemplate = ctx.getBean("serverQuickFixJTemplate", QuickFixJTemplate.class);
100-
assertThat(serverQuickFixJTemplate).isNotNull();
101-
}
102-
10382
@Test
10483
public void shouldCreateServerThreadedAcceptor() throws ConfigError {
10584
// Given
@@ -129,6 +108,36 @@ public void shouldThrowConfigurationExceptionCreatingServerAcceptorMBeanGivenNul
129108
.isThrownBy(() -> autoConfiguration.serverAcceptorMBean(null));
130109
}
131110

111+
@Test
112+
public void testAutoConfiguredBeansSingleThreadedAcceptorWithCustomServerSettings() {
113+
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SingleThreadedServerAcceptorConfigurationWithCustomClientSettings.class);
114+
SessionSettings customClientSessionSettings = ctx.getBean("serverSessionSettings", SessionSettings.class);
115+
assertThat(customClientSessionSettings.getDefaultProperties().getProperty("SenderCompID")).isEqualTo("CUSTOM-EXEC");
116+
}
117+
118+
private void hasAutoConfiguredBeans(AnnotationConfigApplicationContext ctx) {
119+
Application serverApplication = ctx.getBean("serverApplication", Application.class);
120+
assertThat(serverApplication).isInstanceOf(EventPublisherApplicationAdapter.class);
121+
122+
MessageStoreFactory serverMessageStoreFactory = ctx.getBean("serverMessageStoreFactory", MessageStoreFactory.class);
123+
assertThat(serverMessageStoreFactory).isInstanceOf(MemoryStoreFactory.class);
124+
125+
LogFactory serverLogFactory = ctx.getBean("serverLogFactory", LogFactory.class);
126+
assertThat(serverLogFactory).isInstanceOf(ScreenLogFactory.class);
127+
128+
MessageFactory serverMessageFactory = ctx.getBean("serverMessageFactory", MessageFactory.class);
129+
assertThat(serverMessageFactory).isInstanceOf(DefaultMessageFactory.class);
130+
131+
SessionSettings serverSessionSettings = ctx.getBean("serverSessionSettings", SessionSettings.class);
132+
assertThat(serverSessionSettings).isNotNull();
133+
134+
ObjectName serverInitiatorMBean = ctx.getBean("serverAcceptorMBean", ObjectName.class);
135+
assertThat(serverInitiatorMBean).isNotNull();
136+
137+
QuickFixJTemplate serverQuickFixJTemplate = ctx.getBean("serverQuickFixJTemplate", QuickFixJTemplate.class);
138+
assertThat(serverQuickFixJTemplate).isNotNull();
139+
}
140+
132141
@Configuration
133142
@EnableAutoConfiguration
134143
@EnableQuickFixJServer
@@ -144,4 +153,17 @@ static class SingleThreadedServerAcceptorConfiguration {
144153
static class MultiThreadedServerAcceptorConfiguration {
145154

146155
}
156+
157+
@Configuration
158+
@EnableAutoConfiguration
159+
@EnableQuickFixJServer
160+
@PropertySource("classpath:single-threaded-application-no-config-defined.properties")
161+
static class SingleThreadedServerAcceptorConfigurationWithCustomClientSettings {
162+
163+
@Bean(name = "serverSessionSettings")
164+
public SessionSettings serverSessionSettings() {
165+
return SessionSettingsLocator.loadSettings("classpath:/quickfixj-server-extra.cfg");
166+
}
167+
}
168+
147169
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
*/
3232
@RunWith(SpringJUnit4ClassRunner.class)
3333
@SpringBootTest(classes = QuickFixJServerClientITConfiguration.class)
34-
public class QuickFixJServerClientIT {
34+
public class QuickFixJServerClientIntegrationTest {
3535

3636
@Autowired
3737
private QuickFixJTemplate serverQuickFixJTemplate;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
[default]
2+
FileStorePath=target/data/some-other-path-client
3+
ConnectionType=initiator
4+
SenderCompID=CUSTOM-BANZAI
5+
TargetCompID=EXEC
6+
SocketConnectHost=localhost
7+
StartTime=00:00:00
8+
EndTime=00:00:00
9+
HeartBtInt=30
10+
ReconnectInterval=5
11+
FileLogPath=logs-client
12+
13+
[session]
14+
BeginString=FIX.4.0
15+
SocketConnectPort=9876
16+
17+
[session]
18+
BeginString=FIX.4.1
19+
SocketConnectPort=9877
20+
21+
[session]
22+
BeginString=FIX.4.2
23+
SocketConnectPort=9878
24+
25+
[session]
26+
BeginString=FIX.4.3
27+
SocketConnectPort=9879
28+
29+
[session]
30+
BeginString=FIX.4.4
31+
SocketConnectPort=9880
32+
33+
[session]
34+
BeginString=FIXT.1.1
35+
DefaultApplVerID=FIX.5.0
36+
SocketConnectPort=9881
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
[default]
2+
FileStorePath=target/data/some-other-path-server
3+
ConnectionType=acceptor
4+
StartTime=00:00:00
5+
EndTime=00:00:00
6+
HeartBtInt=30
7+
ValidOrderTypes=1,2,F
8+
SenderCompID=CUSTOM-EXEC
9+
TargetCompID=BANZAI
10+
UseDataDictionary=Y
11+
DefaultMarketPrice=12.30
12+
FileLogPath=logs-server
13+
14+
[session]
15+
BeginString=FIX.4.0
16+
SocketAcceptPort=9876
17+
18+
[session]
19+
BeginString=FIX.4.1
20+
SocketAcceptPort=9877
21+
22+
[session]
23+
BeginString=FIX.4.2
24+
SocketAcceptPort=9878
25+
26+
[session]
27+
BeginString=FIX.4.3
28+
SocketAcceptPort=9879
29+
30+
[session]
31+
BeginString=FIX.4.4
32+
SocketAcceptPort=9880
33+
34+
[session]
35+
BeginString=FIXT.1.1
36+
DefaultApplVerID=FIX.5.0
37+
SocketAcceptPort=9881
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
quickfixj.server.concurrent.enabled=false
2+
quickfixj.server.autoStartup=false
3+
quickfixj.server.jmx-enabled=true
4+
quickfixj.client.concurrent.enabled=false
5+
quickfixj.client.autoStartup=false
6+
quickfixj.client.jmx-enabled=true

0 commit comments

Comments
 (0)