All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hazelcast.cache.HazelcastExpiryPolicy Maven / Gradle / Ivy

There is a newer version: 5.5.0
Show newest version
/*
 * Copyright (c) 2008-2016, Hazelcast, Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.hazelcast.cache;

import com.hazelcast.cache.impl.CacheDataSerializerHook;
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.serialization.IdentifiedDataSerializable;

import javax.cache.expiry.Duration;
import javax.cache.expiry.ExpiryPolicy;
import java.io.IOException;
import java.io.Serializable;
import java.util.concurrent.TimeUnit;

/**
 * 

Hazelcast provides overloads of the typical cache operations with a custom * {@link javax.cache.expiry.ExpiryPolicy} parameter.
* This class provides a custom implementation of an {@link javax.cache.expiry.ExpiryPolicy} to * react on all three types of policies: *

    *
  • Create
  • *
  • Access
  • *
  • Update
  • *
*

* Sample usage: *

 *   ICache<Key, Value> unwrappedCache =  cache.unwrap( ICache.class );
 *   HazelcastExpiryPolicy customExpiry = new HazelcastExpiryPolicy(20, 30, 40, TimeUnit.SECONDS);
 *   unwrappedCache.put("key1", value, customExpiry );
 * 
*

* * @since 3.3.1 */ public class HazelcastExpiryPolicy implements ExpiryPolicy, IdentifiedDataSerializable, Serializable { private Duration create; private Duration access; private Duration update; /** * Default constructor to serialize/deserialize */ public HazelcastExpiryPolicy() { } /** * Constructs an expiry policy with provided values for creation, access and update in milliseconds. * * @param createMillis expiry time in milliseconds after creation * @param accessMillis expiry time in milliseconds after last access * @param updateMillis expiry time in milliseconds after last update */ public HazelcastExpiryPolicy(long createMillis, long accessMillis, long updateMillis) { this(new Duration(TimeUnit.MILLISECONDS, createMillis), new Duration(TimeUnit.MILLISECONDS, accessMillis), new Duration(TimeUnit.MILLISECONDS, updateMillis)); } /** * Constructs an expiry policy with provided values for creation, access and update as well as a * {@link java.util.concurrent.TimeUnit} to convert those values to internally used time unites. * * @param createDurationAmount expiry time after creation * @param accessDurationAmount expiry time after last access * @param updateDurationAmount expiry time after last update * @param timeUnit time unit of the previous value parameters */ public HazelcastExpiryPolicy(long createDurationAmount, long accessDurationAmount, long updateDurationAmount, TimeUnit timeUnit) { this(new Duration(timeUnit, createDurationAmount), new Duration(timeUnit, accessDurationAmount), new Duration(timeUnit, updateDurationAmount)); } /** * Copy Constructor for an already existing {@link javax.cache.expiry.ExpiryPolicy}. Values are * copied to the internal state as is. * * @param expiryPolicy expiry policy to copy */ public HazelcastExpiryPolicy(ExpiryPolicy expiryPolicy) { if (expiryPolicy != null) { this.create = expiryPolicy.getExpiryForCreation(); this.access = expiryPolicy.getExpiryForAccess(); this.update = expiryPolicy.getExpiryForUpdate(); } } /** * Constructs an expiry policy with provided values for creation, access and update by providing * instances of the {@link javax.cache.expiry.Duration} class. * * @param create expiry duration after creation * @param access expiry duration after last access * @param update expiry duration after last update */ public HazelcastExpiryPolicy(Duration create, Duration access, Duration update) { this.create = create; this.access = access; this.update = update; } @Override public Duration getExpiryForCreation() { return create; } @Override public Duration getExpiryForAccess() { return access; } @Override public Duration getExpiryForUpdate() { return update; } @Override public int getFactoryId() { return CacheDataSerializerHook.F_ID; } @Override public int getId() { return CacheDataSerializerHook.EXPIRY_POLICY; } @Override public void writeData(ObjectDataOutput out) throws IOException { writeDuration(out, create); writeDuration(out, access); writeDuration(out, update); } @Override public void readData(ObjectDataInput in) throws IOException { create = readDuration(in); access = readDuration(in); update = readDuration(in); } private void writeDuration(ObjectDataOutput out, Duration duration) throws IOException { if (duration != null) { out.writeLong(duration.getDurationAmount()); out.writeInt(duration.getTimeUnit().ordinal()); } } private Duration readDuration(ObjectDataInput in) throws IOException { long da = in.readLong(); if (da > -1) { TimeUnit tu = TimeUnit.values()[in.readInt()]; return new Duration(tu, da); } return null; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } HazelcastExpiryPolicy that = (HazelcastExpiryPolicy) o; if (create != null ? !create.equals(that.create) : that.create != null) { return false; } if (access != null ? !access.equals(that.access) : that.access != null) { return false; } if (update != null ? !update.equals(that.update) : that.update != null) { return false; } return true; } @Override public int hashCode() { int result = create != null ? create.hashCode() : 0; result = 31 * result + (access != null ? access.hashCode() : 0); result = 31 * result + (update != null ? update.hashCode() : 0); return result; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy