Насколько мне известно, нет возможности обновлять отдельные столбцы с помощью запроса в gemfire. Чтобы обновить отдельный столбец, я в настоящее время получаю весь старый объект, изменяю измененное значение и сохраняю его. Если кто что-то реализовал по обновлению отдельных столбцов, поделитесь пожалуйста.
@Region("tracking")
public class Tracking implements Serializable {
public String id;
public String status;
public String program;
}
@Region("tracking")
public interface TrackingQueryRepository extends CrudRepository<Tracking, String> {
}
Я новичок в реализации Delta Propagation. Я прочитал руководство пользователя, попытался реализовать и получил исключение, указанное ниже. Не могли бы вы поделиться своими мыслями по этому поводу.
Другой.java - класс домена
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.Serializable;
import org.springframework.data.annotation.Id;
import org.springframework.data.gemfire.mapping.Region;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.gemstone.gemfire.Delta;
import com.gemstone.gemfire.InvalidDeltaException;
@Region("delta")
public class Another implements Delta, Serializable {
private static final long serialVersionUID = 1L;
@Id
private String anotherId;
@JsonProperty("anotherProgramId")
private String anotherProgramId;
public Another() {
}
public Another(String anotherId, String anotherProgramId) {
this.anotherId = anotherId;
this.anotherProgramId = anotherProgramId;
}
public String getAnotherId() {
return anotherId;
}
public void setAnotherId(String anotherId) {
this.anotherIdChd = true;
this.anotherId = anotherId;
}
public String getAnotherProgramId() {
return anotherProgramId;
}
public void setAnotherProgramId(String anotherProgramId) {
this.anotherProgramIdChd = true;
this.anotherProgramId = anotherProgramId;
}
private transient boolean anotherIdChd = false;
private transient boolean anotherProgramIdChd = false;
@Override
public String toString() {
return "Another [anotherId=" + anotherId + ", anotherProgramId=" + anotherProgramId + "]";
}
@Override
public void fromDelta(DataInput in) throws IOException, InvalidDeltaException {
if (in.readBoolean()) {
// Read the change and apply it to the object
this.anotherId = in.toString();
System.out.println(" Applied delta to field 'anotherId' = " + this.anotherId);
}
if (in.readBoolean()) {
this.anotherProgramId = in.toString();
System.out.println(" Applied delta to field 'anotherProgramId' = " + this.anotherProgramId);
}
}
@Override
public boolean hasDelta() {
return this.anotherIdChd || this.anotherProgramIdChd;
}
@Override
public void toDelta(DataOutput out) throws IOException {
System.out.println("Extracting delta from " + this.toString());
out.writeBoolean(anotherIdChd);
if (anotherIdChd) {
// Write just the changes into the data stream
out.writeUTF(this.anotherId);
// Once the delta information is written, reset the delta status
// field
this.anotherIdChd = false;
System.out.println(" Extracted delta from field 'anotherId' = " + this.anotherId);
}
out.writeBoolean(anotherProgramIdChd);
if (anotherProgramIdChd) {
out.writeUTF(this.anotherProgramId);
this.anotherProgramIdChd = false;
System.out.println(" Extracted delta from field 'anotherProgramId' = " + this.anotherProgramId);
}
}
}
Client-cache.xml
<pdx>
<pdx-serializer>
<class-name>com.gemstone.gemfire.pdx.ReflectionBasedAutoSerializer</class-name>
<parameter name="classes">
<string>com\.rs\.main\..+</string>
</parameter>
</pdx-serializer>
</pdx>
Пространство имен Spring XML
<util:properties id="gemfire-props">
<prop key="delta-propagation">true</prop>
</util:properties>
<gfe:client-cache pool-name="serverPool" cache-xml-location="classpath:client-cache.xml" properties-ref="gemfire-props"/>
<gfe:client-region id="delta" pool-name="serverPool" shortcut="PROXY" cloning-enabled="true">
Версия локального экземпляра gemfire - pivotal-gemfire-9.0.1
Создание региона Создать регион –name = delta –type = REPLICATE
Исключение:
2017-05-08 22:17:12.370 ERROR 14696 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: remote server on 10.148.210.249(:loner):53784:e10627eb: com.gemstone.gemfire.pdx.PdxSerializationException: Could not create an instance of a class com.rs.main.Another; nested exception is com.gemstone.gemfire.cache.client.ServerOperationException: remote server on 10.148.210.249(:loner):53784:e10627eb: com.gemstone.gemfire.pdx.PdxSerializationException: Could not create an instance of a class com.rs.main.Another] with root cause
java.lang.ClassNotFoundException: com.rs.main.Another
at org.apache.geode.internal.ClassPathLoader.forName(ClassPathLoader.java:437) ~[na:na]
at org.apache.geode.internal.InternalDataSerializer.getCachedClass(InternalDataSerializer.java:4010) ~[na:na]
at org.apache.geode.pdx.internal.PdxType.getPdxClass(PdxType.java:235) ~[na:na]
at org.apache.geode.pdx.internal.PdxReaderImpl.basicGetObject(PdxReaderImpl.java:687) ~[na:na]
at org.apache.geode.pdx.internal.PdxReaderImpl.getObject(PdxReaderImpl.java:682) ~[na:na]
at org.apache.geode.internal.InternalDataSerializer.readPdxSerializable(InternalDataSerializer.java:3218) ~[na:na]
at org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:3005) ~[na:na]
at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2897) ~[na:na]
at org.apache.geode.internal.util.BlobHelper.deserializeBlob(BlobHelper.java:90) ~[na:na]
at org.apache.geode.internal.cache.EntryEventImpl.deserialize(EntryEventImpl.java:1891) ~[na:na]
at org.apache.geode.internal.cache.EntryEventImpl.deserialize(EntryEventImpl.java:1884) ~[na:na]
at org.apache.geode.internal.cache.VMCachedDeserializable.getDeserializedValue(VMCachedDeserializable.java:134) ~[na:na]
at org.apache.geode.internal.cache.EntryEventImpl.processDeltaBytes(EntryEventImpl.java:1687) ~[na:na]
at org.apache.geode.internal.cache.EntryEventImpl.setNewValueInRegion(EntryEventImpl.java:1558) ~[na:na]
at org.apache.geode.internal.cache.EntryEventImpl.putExistingEntry(EntryEventImpl.java:1504) ~[na:na]
at org.apache.geode.internal.cache.AbstractRegionMap.updateEntry(AbstractRegionMap.java:2959) ~[na:na]
at org.apache.geode.internal.cache.AbstractRegionMap.basicPut(AbstractRegionMap.java:2782) ~[na:na]
at org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5750) ~[na:na]
at org.apache.geode.internal.cache.DistributedRegion.virtualPut(DistributedRegion.java:337) ~[na:na]
at org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:151) ~[na:na]
at org.apache.geode.internal.cache.LocalRegion.basicUpdate(LocalRegion.java:5730) ~[na:na]
at org.apache.geode.internal.cache.LocalRegion.basicBridgePut(LocalRegion.java:5374) ~[na:na]
at org.apache.geode.internal.cache.tier.sockets.command.Put65.cmdExecute(Put65.java:381) ~[na:na]
at org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:141) ~[na:na]
at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:776) ~[na:na]
at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:904) ~[na:na]
at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1160) ~[na:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_121]
at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:519) ~[na:na]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_121]