Skip to content

Commit 19c0737

Browse files
committed
almost got it
1 parent 4a56fd2 commit 19c0737

File tree

12 files changed

+374
-73
lines changed

12 files changed

+374
-73
lines changed

embedded/deployment/src/main/java/org/infinispan/quarkus/embedded/deployment/InfinispanEmbeddedProcessor.java

+31-9
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import org.infinispan.configuration.cache.StoreConfiguration;
1616
import org.infinispan.configuration.cache.StoreConfigurationBuilder;
1717
import org.infinispan.configuration.parsing.ConfigurationParser;
18+
import org.infinispan.configuration.serializing.ConfigurationSerializer;
19+
import org.infinispan.configuration.serializing.SerializedWith;
1820
import org.infinispan.distribution.ch.ConsistentHashFactory;
1921
import org.infinispan.distribution.ch.impl.HashFunctionPartitioner;
2022
import org.infinispan.factories.impl.ModuleMetadataBuilder;
@@ -30,6 +32,7 @@
3032
import org.infinispan.notifications.cachelistener.annotation.CacheEntryRemoved;
3133
import org.infinispan.persistence.spi.CacheLoader;
3234
import org.infinispan.persistence.spi.CacheWriter;
35+
import org.infinispan.persistence.spi.NonBlockingStore;
3336
import org.infinispan.quarkus.embedded.runtime.InfinispanEmbeddedProducer;
3437
import org.infinispan.quarkus.embedded.runtime.InfinispanEmbeddedRuntimeConfig;
3538
import org.infinispan.quarkus.embedded.runtime.InfinispanRecorder;
@@ -102,7 +105,12 @@ void setup(BuildProducer<FeatureBuildItem> feature, BuildProducer<ReflectiveClas
102105
"default-configs/default-jgroups-kubernetes.xml",
103106
"default-configs/default-jgroups-ec2.xml",
104107
"default-configs/default-jgroups-google.xml",
105-
"default-configs/default-jgroups-azure.xml"));
108+
"default-configs/default-jgroups-azure.xml",
109+
"stacks/udp.xml",
110+
"stacks/tcp.xml",
111+
"stacks/tcp_mping/tcp1.xml",
112+
"stacks/tcp_mping/tcp2.xml"
113+
));
106114

107115
reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, HashFunctionPartitioner.class));
108116
reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, JGroupsTransport.class));
@@ -148,6 +156,8 @@ void setup(BuildProducer<FeatureBuildItem> feature, BuildProducer<ReflectiveClas
148156
addReflectionForClass(CacheLoader.class, true, combinedIndex, reflectiveClass, excludedClasses);
149157
addReflectionForClass(CacheWriter.class, true, combinedIndex, reflectiveClass, excludedClasses);
150158

159+
addReflectionForClass(NonBlockingStore.class, true, combinedIndex, reflectiveClass, excludedClasses);
160+
151161
// We have to include all of our interceptors - technically a custom one is installed before or after ISPN ones
152162
// If we don't want to support custom interceptors this should be removable
153163
// We use reflection to set fields from the properties so those must be exposed as well
@@ -161,6 +171,9 @@ void setup(BuildProducer<FeatureBuildItem> feature, BuildProducer<ReflectiveClas
161171
addReflectionForName(StoreConfiguration.class.getName(), true, combinedIndex, reflectiveClass, true, false,
162172
excludedClasses);
163173

174+
// We use reflection to find various configuration serializers
175+
addReflectionForClass(ConfigurationSerializer.class, true, combinedIndex, reflectiveClass, excludedClasses);
176+
164177
reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, Util.AddressScope.class));
165178

166179
// Add Infinispan and user listeners to reflection list
@@ -186,14 +199,11 @@ void setup(BuildProducer<FeatureBuildItem> feature, BuildProducer<ReflectiveClas
186199
// it would be nice to not have this required for Infinispan classes
187200
Collection<AnnotationInstance> serializeWith = combinedIndex
188201
.getAnnotations(DotName.createSimple(SerializeWith.class.getName()));
189-
for (AnnotationInstance instance : serializeWith) {
190-
AnnotationValue withValue = instance.value();
191-
String withValueString = withValue.asString();
192-
DotName targetSerializer = DotName.createSimple(withValueString);
193-
if (!excludedClasses.contains(targetSerializer)) {
194-
reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, withValueString));
195-
}
196-
}
202+
registerSerializeWith(serializeWith, reflectiveClass, excludedClasses);
203+
204+
// Configuration serializes with classes loaded via serialization
205+
serializeWith = combinedIndex.getAnnotations(DotName.createSimple(SerializedWith.class.getName()));
206+
registerSerializeWith(serializeWith, reflectiveClass, excludedClasses);
197207

198208
// This contains parts from the index from the app itself
199209
Index appOnlyIndex = applicationIndexBuildItem.getIndex();
@@ -205,6 +215,18 @@ void setup(BuildProducer<FeatureBuildItem> feature, BuildProducer<ReflectiveClas
205215
addReflectionForClass(AbstractExternalizer.class, false, appOnlyIndex, reflectiveClass, Collections.emptySet());
206216
}
207217

218+
private void registerSerializeWith(Collection<AnnotationInstance> serializeWith,
219+
BuildProducer<ReflectiveClassBuildItem> reflectiveClass, Set<DotName> excludedClasses) {
220+
for (AnnotationInstance instance : serializeWith) {
221+
AnnotationValue withValue = instance.value();
222+
String withValueString = withValue.asString();
223+
DotName targetSerializer = DotName.createSimple(withValueString);
224+
if (!excludedClasses.contains(targetSerializer)) {
225+
reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, withValueString));
226+
}
227+
}
228+
}
229+
208230
private void addReflectionForClass(Class<?> classToUse, boolean isInterface, IndexView indexView,
209231
BuildProducer<ReflectiveClassBuildItem> reflectiveClass, Set<DotName> excludedClasses) {
210232
addReflectionForName(classToUse.getName(), isInterface, indexView, reflectiveClass, false, false,

embedded/runtime/src/main/java/org/infinispan/quarkus/embedded/runtime/graal/SubstituteJGroups.java

+10
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package org.infinispan.quarkus.embedded.runtime.graal;
22

33
import java.security.SecureRandom;
4+
import java.util.Random;
45

56
import org.jgroups.JChannel;
7+
import org.jgroups.protocols.DELAY;
68
import org.jgroups.util.UUID;
79
import org.jgroups.util.Util;
810

@@ -22,6 +24,14 @@ final class SubstituteUUID {
2224
protected static volatile SecureRandom numberGenerator;
2325
}
2426

27+
@TargetClass(DELAY.class)
28+
final class SubstitueDELAY {
29+
@Alias
30+
// Force it to null - so it can be reinitialized
31+
@RecomputeFieldValue(kind = RecomputeFieldValue.Kind.Reset)
32+
protected static volatile Random randomNumberGenerator;
33+
}
34+
2535
// DISCARD protocol uses swing classes
2636
@TargetClass(className = "org.jgroups.protocols.DISCARD")
2737
final class SubstituteDiscardProtocol {

integration-tests/embedded/pom.xml

+7-26
Original file line numberDiff line numberDiff line change
@@ -97,16 +97,18 @@
9797

9898
<profiles>
9999
<profile>
100-
<id>native-image</id>
100+
<id>native</id>
101101
<activation>
102102
<property>
103103
<name>native</name>
104104
</property>
105105
</activation>
106+
<properties>
107+
<quarkus.package.type>native</quarkus.package.type>
108+
</properties>
106109
<build>
107110
<plugins>
108111
<plugin>
109-
<groupId>org.apache.maven.plugins</groupId>
110112
<artifactId>maven-failsafe-plugin</artifactId>
111113
<executions>
112114
<execution>
@@ -115,31 +117,10 @@
115117
<goal>verify</goal>
116118
</goals>
117119
<configuration>
118-
<systemProperties>
120+
<systemPropertyVariables>
119121
<native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
120-
</systemProperties>
121-
</configuration>
122-
</execution>
123-
</executions>
124-
</plugin>
125-
<plugin>
126-
<groupId>io.quarkus</groupId>
127-
<artifactId>quarkus-maven-plugin</artifactId>
128-
<version>${quarkus.version}</version>
129-
<executions>
130-
<execution>
131-
<id>native-image</id>
132-
<goals>
133-
<goal>native-image</goal>
134-
</goals>
135-
<configuration>
136-
<cleanupServer>true</cleanupServer>
137-
<enableHttpUrlHandler>true</enableHttpUrlHandler>
138-
<!-- We have some example stack files we want to use -->
139-
<additionalBuildArgs>
140-
<additionalBuildArg>-H:ResourceConfigurationFiles=resources-config.json</additionalBuildArg>
141-
</additionalBuildArgs>
142-
<graalvmHome>${graalvmHome}</graalvmHome>
122+
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
123+
</systemPropertyVariables>
143124
</configuration>
144125
</execution>
145126
</executions>

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<packaging>pom</packaging>
1717

1818
<properties>
19-
<quarkus.version>1.11.0.Final</quarkus.version>
19+
<quarkus.version>2.2.3.Final</quarkus.version>
2020
</properties>
2121

2222
<modules>

server-runner/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@
115115
<executions>
116116
<execution>
117117
<goals>
118-
<goal>native-image</goal>
118+
<goal>build</goal>
119119
</goals>
120120
<configuration>
121121
<!-- Required for cluster communication -->
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
<infinispan
22
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3-
xsi:schemaLocation="urn:infinispan:config:10.0 http://www.infinispan.org/schemas/infinispan-config-10.0.xsd
4-
urn:infinispan:server:10.0 http://www.infinispan.org/schemas/infinispan-server-10.0.xsd"
5-
xmlns="urn:infinispan:config:10.0"
6-
xmlns:server="urn:infinispan:server:10.0">
3+
xsi:schemaLocation="urn:infinispan:config:13.0 https://infinispan.org/schemas/infinispan-config-13.0.xsd
4+
urn:infinispan:server:13.0 https://infinispan.org/schemas/infinispan-server-13.0.xsd"
5+
xmlns="urn:infinispan:config:13.0"
6+
xmlns:server="urn:infinispan:server:13.0">
77

8-
<cache-container>
8+
<cache-container name="default" statistics="true">
99
<local-cache name="quarkus-infinispan-server"/>
1010
</cache-container>
1111

12-
<server xmlns="urn:infinispan:server:10.0">
12+
<server xmlns="urn:infinispan:server:13.0">
1313
<interfaces>
1414
<interface name="public">
1515
<inet-address value="${infinispan.bind.address:127.0.0.1}"/>
@@ -21,30 +21,17 @@
2121
<socket-binding name="memcached" port="11221"/>
2222
</socket-bindings>
2323

24-
<security>
25-
<security-realms>
26-
<security-realm name="default">
27-
<!-- Uncomment to enable TLS on the realm -->
28-
<!-- server-identities>
29-
<ssl>
30-
<keystore path="application.keystore" relative-to="infinispan.server.config.path"
31-
keystore-password="password" alias="server" key-password="password"
32-
generate-self-signed-certificate-host="localhost"/>
33-
</ssl>
34-
</server-identities-->
35-
<properties-realm groups-attribute="Roles">
36-
<user-properties path="users.properties" relative-to="infinispan.server.config.path" plain-text="true"/>
37-
<group-properties path="groups.properties" relative-to="infinispan.server.config.path" />
38-
</properties-realm>
39-
</security-realm>
40-
</security-realms>
41-
</security>
42-
43-
<endpoints socket-binding="default" security-realm="default">
44-
<hotrod-connector name="hotrod"/>
45-
<rest-connector name="rest"/>
46-
<!-- Uncomment to enable the memcached connector -->
47-
<!-- memcached-connector socket-binding="memcached" / -->
24+
<endpoints>
25+
<endpoint socket-binding="default">
26+
<ip-filter>
27+
<reject from="172.16.0.0/16"/>
28+
<accept from="127.0.0.0/8"/>
29+
</ip-filter>
30+
<hotrod-connector name="hotrod"/>
31+
<rest-connector name="rest"/>
32+
<!-- Uncomment to enable the memcached connector -->
33+
<!-- memcached-connector socket-binding="memcached" / -->
34+
</endpoint>
4835
</endpoints>
4936
</server>
5037
</infinispan>

server/deployment/src/main/java/org/infinispan/quarkus/server/deployment/InfinispanServerProcessor.java

-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ void extensionFeatureStuff(BuildProducer<FeatureBuildItem> feature, BuildProduce
8181
"infinispan-cachestore-jdbc",
8282
"infinispan-cachestore-rocksdb",
8383
"infinispan-cachestore-remote",
84-
"infinispan-persistence-soft-index",
8584
"infinispan-clustered-counter",
8685
"infinispan-clustered-lock"
8786
)) {

0 commit comments

Comments
 (0)