You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2014/12/05 00:24:37 UTC

[45/53] [abbrv] incubator-ignite git commit: # gg-9470-rename

# gg-9470-rename


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/779ddfa5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/779ddfa5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/779ddfa5

Branch: refs/heads/master
Commit: 779ddfa56ee290d9ab688612f198dc282aa6e2cc
Parents: e04165b
Author: sboikov <sb...@gridgain.com>
Authored: Thu Dec 4 22:41:14 2014 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Dec 4 22:41:14 2014 +0300

----------------------------------------------------------------------
 .../src/main/java/org/apache/ignite/Ignite.java |   4 +-
 .../org/apache/ignite/cluster/ClusterNode.java  |   2 +-
 .../org/apache/ignite/product/GridProduct.java  |  58 ++++
 .../ignite/product/GridProductLicense.java      | 175 ++++++++++++
 .../product/GridProductLicenseException.java    |  62 ++++
 .../ignite/product/GridProductVersion.java      | 283 +++++++++++++++++++
 .../java/org/apache/ignite/product/package.html |  15 +
 .../org/gridgain/grid/kernal/GridKernal.java    |   2 +-
 .../gridgain/grid/kernal/GridKernalContext.java |   2 +-
 .../grid/kernal/GridKernalContextImpl.java      |   2 +-
 .../gridgain/grid/kernal/GridProductImpl.java   |   4 +-
 .../grid/kernal/GridUpdateNotifier.java         |   2 +-
 .../discovery/GridDiscoveryManager.java         |   2 +-
 .../dataload/IgniteDataLoaderImpl.java          |   2 +-
 .../kernal/processors/job/GridJobProcessor.java |   2 +-
 .../license/GridLicenseProcessor.java           |   2 +-
 .../license/os/GridOsLicenseProcessor.java      |   2 +-
 .../org/gridgain/grid/product/GridProduct.java  |  58 ----
 .../grid/product/GridProductLicense.java        | 175 ------------
 .../product/GridProductLicenseException.java    |  62 ----
 .../grid/product/GridProductVersion.java        | 283 -------------------
 .../java/org/gridgain/grid/product/package.html |  15 -
 .../tcp/GridTcpCommunicationSpi.java            |   2 +-
 .../grid/spi/discovery/GridDiscoverySpi.java    |   2 +-
 .../tcp/GridTcpDiscoverySpiAdapter.java         |   2 +-
 .../tcp/internal/GridTcpDiscoveryNode.java      |   2 +-
 .../java/org/gridgain/grid/util/GridUtils.java  |   2 +-
 .../grid/kernal/GridDiscoverySelfTest.java      |   4 +-
 .../grid/kernal/GridReleaseTypeSelfTest.java    |   2 +-
 .../GridTopologyBuildVersionSelfTest.java       |   2 +-
 .../grid/kernal/GridVersionSelfTest.java        |   2 +-
 ...unctionExcludeNeighborsAbstractSelfTest.java |   2 +-
 .../marshaller/GridMarshallerAbstractTest.java  |   2 +-
 .../grid/p2p/GridP2PClassLoadingSelfTest.java   |   4 +-
 .../product/GridProductVersionSelfTest.java     |   1 +
 .../GridAbstractDiscoverySelfTest.java          |   2 +-
 .../gridgain/testframework/GridTestNode.java    |   4 +-
 .../junits/spi/GridSpiAbstractTest.java         |   4 +-
 .../java/org/gridgain/grid/GridSpringBean.java  |   2 +-
 39 files changed, 628 insertions(+), 627 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/apache/ignite/Ignite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/Ignite.java b/modules/core/src/main/java/org/apache/ignite/Ignite.java
index d98c532..f0e4fa4 100644
--- a/modules/core/src/main/java/org/apache/ignite/Ignite.java
+++ b/modules/core/src/main/java/org/apache/ignite/Ignite.java
@@ -12,13 +12,13 @@ package org.apache.ignite;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.plugin.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.dr.*;
 import org.gridgain.grid.ggfs.*;
 import org.gridgain.grid.hadoop.*;
 import org.gridgain.grid.portables.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.security.*;
 import org.gridgain.grid.util.typedef.*;
 import org.jetbrains.annotations.*;
@@ -44,7 +44,7 @@ import java.util.concurrent.*;
  * <li>{@link IgniteFs} - functionality for distributed Hadoop-compliant in-memory file system and map-reduce.</li>
  * <li>{@link IgniteStreamer} - functionality for streaming events workflow with queries and indexes into rolling windows.</li>
  * <li>{@link IgniteScheduler} - functionality for scheduling jobs using UNIX Cron syntax.</li>
- * <li>{@link GridProduct} - functionality for licence management and update and product related information.</li>
+ * <li>{@link org.apache.ignite.product.GridProduct} - functionality for licence management and update and product related information.</li>
  * <li>{@link IgniteCompute} - functionality for executing tasks and closures on all grid nodes (inherited form {@link org.apache.ignite.cluster.ClusterGroup}).</li>
  * <li>{@link IgniteMessaging} - functionality for topic-based message exchange on all grid nodes (inherited form {@link org.apache.ignite.cluster.ClusterGroup}).</li>
  * <li>{@link IgniteEvents} - functionality for querying and listening to events on all grid nodes  (inherited form {@link org.apache.ignite.cluster.ClusterGroup}).</li>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java b/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java
index e66fb74..9ec1962 100644
--- a/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java
@@ -10,9 +10,9 @@
 package org.apache.ignite.cluster;
 
 import org.apache.ignite.IgniteCluster;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.kernal.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.spi.*;
 import org.gridgain.grid.spi.discovery.tcp.*;
 import org.jetbrains.annotations.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/apache/ignite/product/GridProduct.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/product/GridProduct.java b/modules/core/src/main/java/org/apache/ignite/product/GridProduct.java
new file mode 100644
index 0000000..51aac73
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/product/GridProduct.java
@@ -0,0 +1,58 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.apache.ignite.product;
+
+import org.jetbrains.annotations.*;
+
+/**
+ * Provides information about current release. Note that enterprise users are also
+ * able to renew license. Instance of {@code GridProduct} is obtained from grid as follows:
+ * <pre name="code" class="java">
+ * GridProduct p = GridGain.grid().product();
+ * </pre>
+ */
+public interface GridProduct {
+    /**
+     * Gets license descriptor for enterprise edition or {@code null} for open source edition.
+     *
+     * @return License descriptor.
+     */
+    @Nullable public GridProductLicense license();
+
+    /**
+     * Updates to a new license in enterprise edition. This method is no-op in open source edition.
+     *
+     * @param lic The content of the license.
+     * @throws GridProductLicenseException If license could not be updated.
+     */
+    public void updateLicense(String lic) throws GridProductLicenseException;
+
+    /**
+     * Gets product version for this release.
+     *
+     * @return Product version for this release.
+     */
+    public GridProductVersion version();
+
+    /**
+     * Copyright statement for GridGain code.
+     *
+     * @return Legal copyright statement for GridGain code.
+     */
+    public String copyright();
+
+    /**
+     * Gets latest version available for download or
+     * {@code null} if information is not available.
+     *
+     * @return Latest version string or {@code null} if information is not available.
+     */
+    @Nullable public String latestVersion();
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/apache/ignite/product/GridProductLicense.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/product/GridProductLicense.java b/modules/core/src/main/java/org/apache/ignite/product/GridProductLicense.java
new file mode 100644
index 0000000..a505a54
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/product/GridProductLicense.java
@@ -0,0 +1,175 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.apache.ignite.product;
+
+import org.jetbrains.annotations.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * GridGain license descriptor. GridGain license is available for
+ * information purposes and is checked automatically by GridGain software.
+ * License descriptor can be obtains by calling {@link GridProduct#license()} method.
+ * @see GridProduct#license()
+ */
+public interface GridProductLicense extends Serializable {
+    /**
+     * Gets a comma separated list of disabled subsystems.
+     *
+     * @return Comma separated list of disabled subsystems or {@code null}.
+     */
+    public String disabledSubsystems();
+
+    /**
+     * Gets license version.
+     *
+     * @return License version.
+     */
+    public String version();
+
+    /**
+     * Gets license ID.
+     *
+     * @return License ID.
+     */
+    public UUID id();
+
+    /**
+     * Version regular expression.
+     *
+     * @return Version regular expression.
+     */
+    public String versionRegexp();
+
+    /**
+     * Gets issue date.
+     *
+     * @return Issue date.
+     */
+    public Date issueDate();
+
+    /**
+     * Gets maintenance time in months. If zero - no restriction.
+     *
+     * @return Maintenance time.
+     */
+    public int maintenanceTime();
+
+    /**
+     * Gets issue organization.
+     *
+     * @return Issue organization.
+     */
+    public String issueOrganization();
+
+    /**
+     * Gets user organization.
+     *
+     * @return User organization.
+     */
+    public String userOrganization();
+
+    /**
+     * Gets license note. It may include textual description of license limitations such
+     * as as "Development Only" or "Load-Testing and Staging Only".
+     *
+     * @return License note.
+     */
+    public String licenseNote();
+
+    /**
+     * Gets user organization URL.
+     *
+     * @return User organization URL.
+     */
+    public String userWww();
+
+    /**
+     * Gets user organization e-mail.
+     *
+     * @return User organization e-mail.
+     */
+    public String userEmail();
+
+    /**
+     * Gets user organization contact name.
+     *
+     * @return User organization contact name.
+     */
+    public String userName();
+
+    /**
+     * Gets expire date.
+     *
+     * @return Expire date.
+     */
+    public Date expireDate();
+
+    /**
+     * Gets maximum number of nodes. If zero - no restriction.
+     *
+     * @return Maximum number of nodes.
+     */
+    public int maxNodes();
+
+    /**
+     * Gets maximum number of physical computers or virtual instances. If zero - no restriction.
+     * Note that individual physical computer or virtual instance is determined by number of enabled
+     * MACs on each computer or instance.
+     *
+     * @return Maximum number of computers or virtual instances.
+     */
+    public int maxComputers();
+
+    /**
+     * Gets maximum number of CPUs. If zero - no restriction.
+     *
+     * @return Maximum number of CPUs.
+     */
+    public int maxCpus();
+
+    /**
+     * Gets maximum up time in minutes. If zero - no restriction.
+     *
+     * @return Maximum up time in minutes.
+     */
+    public long maxUpTime();
+
+    /**
+     * Gets license violation grace period in minutes. If zero - no grace period.
+     *
+     * @return License violation grace period in minutes.
+     */
+    public long gracePeriod();
+
+    /**
+     * Gets license attribute name if any. Attributes in license will have to match
+     * attributes in the grid node.
+     *
+     * @return Attribute name.
+     */
+    @Nullable public String attributeName();
+
+    /**
+     * Gets value for the license attribute if any. Attributes in license will have to match
+     * attributes in the grid node.
+     *
+     * @return Attribute value.
+     */
+    @Nullable public String attributeValue();
+
+    /**
+     * Gets a comma separated list of allowed cache distribution modes.
+     *
+     * @return Allowed cache distribution modes or {@code null}.
+     */
+    @Nullable public String getCacheDistributionModes();
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/apache/ignite/product/GridProductLicenseException.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/product/GridProductLicenseException.java b/modules/core/src/main/java/org/apache/ignite/product/GridProductLicenseException.java
new file mode 100644
index 0000000..887106e
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/product/GridProductLicenseException.java
@@ -0,0 +1,62 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.apache.ignite.product;
+
+import org.gridgain.grid.*;
+import org.gridgain.grid.util.typedef.internal.*;
+import org.jetbrains.annotations.*;
+
+/**
+ * This exception is thrown when license violation is detected.
+ */
+public class GridProductLicenseException extends GridException {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Short message. */
+    private final String shortMsg;
+
+    /**
+     * Creates new license exception with given error message.
+     *
+     * @param msg Error message.
+     * @param shortMsg Short error message presentable to the user. Note it should contain just letter and dot.
+     */
+    public GridProductLicenseException(String msg, @Nullable String shortMsg) {
+        super(msg);
+
+        this.shortMsg = shortMsg;
+    }
+
+    /**
+     * Creates new license exception with given error message and optional nested exception.
+     *
+     * @param msg Error message.
+     * @param shortMsg Short error message presentable to the user. Note it should contain just letter and dot.
+     * @param cause Optional nested exception (can be {@code null}).
+     */
+    public GridProductLicenseException(String msg, @Nullable String shortMsg, @Nullable Throwable cause) {
+        super(msg, cause);
+
+        this.shortMsg = shortMsg;
+    }
+
+    /**
+     * @return shortMessage Short error message presentable to the user. Note it should contain just letter and dot.
+     */
+    public final String shortMessage() {
+        return shortMsg;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(GridProductLicenseException.class, this, "msg", getMessage(), "shortMsg", shortMsg);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/apache/ignite/product/GridProductVersion.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/product/GridProductVersion.java b/modules/core/src/main/java/org/apache/ignite/product/GridProductVersion.java
new file mode 100644
index 0000000..64d68c2
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/product/GridProductVersion.java
@@ -0,0 +1,283 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.apache.ignite.product;
+
+import org.gridgain.grid.*;
+import org.gridgain.grid.util.typedef.internal.*;
+import org.jetbrains.annotations.*;
+
+import java.io.*;
+import java.text.*;
+import java.util.*;
+import java.util.regex.*;
+
+/**
+ * Represents node version.
+ * <p>
+ * Node version can be acquired via {@link org.apache.ignite.cluster.ClusterNode#version()} method.
+ * <p>
+ * Two versions are compared in the following order: major number,
+ * minor number, maintenance number, revision timestamp.
+ */
+public class GridProductVersion implements Comparable<GridProductVersion>, Externalizable {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Regexp parse pattern. */
+    private static final Pattern VER_PATTERN =
+        Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)((?!-(os|ent))-([^-]+))?(-(os|ent))?(-(\\d+))?(-([\\da-f]+))?");
+
+    /** Major version number. */
+    private byte major;
+
+    /** Minor version number. */
+    private byte minor;
+
+    /** Maintenance version number. */
+    private byte maintenance;
+
+    /** Stage of development. */
+    private String stage;
+
+    /** Revision timestamp. */
+    private long revTs;
+
+    /** Revision hash. */
+    private byte[] revHash;
+
+    /**
+     * Empty constructor required by {@link Externalizable}.
+     */
+    public GridProductVersion() {
+        // No-op.
+    }
+
+    /**
+     * @param major Major version number.
+     * @param minor Minor version number.
+     * @param maintenance Maintenance version number.
+     * @param revTs Revision timestamp.
+     * @param revHash Revision hash.
+     */
+    public GridProductVersion(byte major, byte minor, byte maintenance, long revTs, byte[] revHash) {
+        this(major, minor, maintenance, "", revTs, revHash);
+    }
+
+    /**
+     * @param major Major version number.
+     * @param minor Minor version number.
+     * @param maintenance Maintenance version number.
+     * @param stage Stage of development.
+     * @param revTs Revision timestamp.
+     * @param revHash Revision hash.
+     */
+    public GridProductVersion(byte major, byte minor, byte maintenance, String stage, long revTs, byte[] revHash) {
+        if (revHash != null && revHash.length != 20)
+            throw new IllegalArgumentException("Invalid length for SHA1 hash (must be 20): " + revHash.length);
+
+        this.major = major;
+        this.minor = minor;
+        this.maintenance = maintenance;
+        this.stage = stage;
+        this.revTs = revTs;
+        this.revHash = revHash != null ? revHash : new byte[20];
+    }
+
+    /**
+     * Gets major version number.
+     *
+     * @return Major version number.
+     */
+    public byte major() {
+        return major;
+    }
+
+    /**
+     * Gets minor version number.
+     *
+     * @return Minor version number.
+     */
+    public byte minor() {
+        return minor;
+    }
+
+    /**
+     * Gets maintenance version number.
+     *
+     * @return Maintenance version number.
+     */
+    public byte maintenance() {
+        return maintenance;
+    }
+
+    /**
+     * @return Stage of development.
+     */
+    public String stage() {
+        return stage;
+    }
+
+    /**
+     * Gets revision timestamp.
+     *
+     * @return Revision timestamp.
+     */
+    public long revisionTimestamp() {
+        return revTs;
+    }
+
+    /**
+     * Gets revision hash.
+     *
+     * @return Revision hash.
+     */
+    public byte[] revisionHash() {
+        return revHash;
+    }
+
+    /**
+     * Gets release date.
+     *
+     * @return Release date.
+     */
+    public Date releaseDate() {
+        return new Date(revTs);
+    }
+
+    /**
+     * @param major Major version number.
+     * @param minor Minor version number.
+     * @param maintenance Maintenance version number.
+     * @return {@code True} if this version is greater or equal than the one passed in.
+     */
+    public boolean greaterThanEqual(int major, int minor, int maintenance) {
+        // NOTE: Unknown version is less than any other version.
+        if (major == this.major)
+            return minor == this.minor ? this.maintenance >= maintenance : this.minor > minor;
+        else
+            return this.major > major;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int compareTo(@NotNull GridProductVersion o) {
+        // NOTE: Unknown version is less than any other version.
+        if (major == o.major) {
+            if (minor == o.minor) {
+                if (maintenance == o.maintenance)
+                    return revTs != o.revTs ? revTs < o.revTs ? -1 : 1 : 0;
+                else
+                    return maintenance < o.maintenance ? -1 : 1;
+            }
+            else
+                return minor < o.minor ? -1 : 1;
+        }
+        else
+            return major < o.major ? -1 : 1;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean equals(Object o) {
+        if (this == o)
+            return true;
+
+        if (!(o instanceof GridProductVersion))
+            return false;
+
+        GridProductVersion that = (GridProductVersion)o;
+
+        return revTs == that.revTs && maintenance == that.maintenance && minor == that.minor && major == that.major;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int hashCode() {
+        int res = major;
+
+        res = 31 * res + minor;
+        res = 31 * res + maintenance;
+        res = 31 * res + (int)(revTs ^ (revTs >>> 32));
+
+        return res;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeByte(major);
+        out.writeByte(minor);
+        out.writeByte(maintenance);
+        out.writeLong(revTs);
+        U.writeByteArray(out, revHash);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        major = in.readByte();
+        minor = in.readByte();
+        maintenance = in.readByte();
+        revTs = in.readLong();
+        revHash = U.readByteArray(in);
+    }
+
+    /** {@inheritDoc} */
+    public String toString() {
+        String revTsStr = new SimpleDateFormat("yyyyMMdd").format(new Date(revTs * 1000));
+
+        String hash = U.byteArray2HexString(revHash).toLowerCase();
+
+        hash = hash.length() > 8 ? hash.substring(0, 8) : hash;
+
+        return major + "." + minor + "." + maintenance + "#" + revTsStr + "-sha1:" + hash;
+    }
+
+    /**
+     * Tries to parse product version from it's string representation.
+     *
+     * @param verStr String representation of version.
+     * @return Product version.
+     */
+    @SuppressWarnings({"MagicConstant", "TypeMayBeWeakened"})
+    public static GridProductVersion fromString(String verStr) {
+        assert verStr != null;
+
+        if (verStr.endsWith("-DEV")) // Development version, just cut it out.
+            verStr = verStr.substring(0, verStr.length() - 4);
+
+        Matcher match = VER_PATTERN.matcher(verStr);
+
+        if (match.matches()) {
+            try {
+                byte major = Byte.parseByte(match.group(1));
+                byte minor = Byte.parseByte(match.group(2));
+                byte maintenance = Byte.parseByte(match.group(3));
+
+                String stage = "";
+
+                if (match.group(4) != null)
+                    stage = match.group(6);
+
+                long revTs = 0;
+
+                if (match.group(9) != null)
+                    revTs = Long.parseLong(match.group(10));
+
+                byte[] revHash = null;
+
+                if (match.group(11) != null)
+                    revHash = U.decodeHex(match.group(12).toCharArray());
+
+                return new GridProductVersion(major, minor, maintenance, stage, revTs, revHash);
+            }
+            catch (IllegalStateException | IndexOutOfBoundsException | NumberFormatException | GridException e) {
+                throw new IllegalStateException("Failed to parse version: " + verStr, e);
+            }
+        }
+        else
+            throw new IllegalStateException("Failed to parse version: " + verStr);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/apache/ignite/product/package.html
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/product/package.html b/modules/core/src/main/java/org/apache/ignite/product/package.html
new file mode 100644
index 0000000..691561c
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/product/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+    @html.file.header
+    _________        _____ __________________        _____
+    __  ____/___________(_)______  /__  ____/______ ____(_)_______
+    _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+    / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+    \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+-->
+<html>
+<body>
+    <!-- Package description. -->
+    Contains <b>Product</b> and <b>License</b> related functionality.
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernal.java b/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernal.java
index 7846a4e..544255e 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernal.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernal.java
@@ -18,6 +18,7 @@ import org.apache.ignite.marshaller.*;
 import org.apache.ignite.marshaller.optimized.*;
 import org.apache.ignite.mbean.*;
 import org.apache.ignite.plugin.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.dr.*;
@@ -60,7 +61,6 @@ import org.gridgain.grid.kernal.processors.streamer.*;
 import org.gridgain.grid.kernal.processors.task.*;
 import org.gridgain.grid.kernal.processors.timeout.*;
 import org.gridgain.grid.portables.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.security.*;
 import org.gridgain.grid.spi.*;
 import org.gridgain.grid.spi.authentication.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernalContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernalContext.java b/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernalContext.java
index a3bc773..4ba5fe7 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernalContext.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernalContext.java
@@ -12,6 +12,7 @@ package org.gridgain.grid.kernal;
 import org.apache.ignite.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.plugin.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.kernal.managers.security.*;
 import org.gridgain.grid.kernal.managers.checkpoint.*;
@@ -51,7 +52,6 @@ import org.gridgain.grid.kernal.processors.session.*;
 import org.gridgain.grid.kernal.processors.streamer.*;
 import org.gridgain.grid.kernal.processors.task.*;
 import org.gridgain.grid.kernal.processors.timeout.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.util.direct.*;
 import org.gridgain.grid.util.tostring.*;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernalContextImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernalContextImpl.java b/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernalContextImpl.java
index 3cb3336..1111866 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernalContextImpl.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/GridKernalContextImpl.java
@@ -12,6 +12,7 @@ package org.gridgain.grid.kernal;
 import org.apache.ignite.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.plugin.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.kernal.managers.checkpoint.*;
 import org.gridgain.grid.kernal.managers.collision.*;
@@ -54,7 +55,6 @@ import org.gridgain.grid.kernal.processors.spring.*;
 import org.gridgain.grid.kernal.processors.streamer.*;
 import org.gridgain.grid.kernal.processors.task.*;
 import org.gridgain.grid.kernal.processors.timeout.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.util.direct.*;
 import org.gridgain.grid.util.lang.*;
 import org.gridgain.grid.util.tostring.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/kernal/GridProductImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/GridProductImpl.java b/modules/core/src/main/java/org/gridgain/grid/kernal/GridProductImpl.java
index ff7c2ac..0504e5a 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/GridProductImpl.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/GridProductImpl.java
@@ -9,7 +9,7 @@
 
 package org.gridgain.grid.kernal;
 
-import org.gridgain.grid.product.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.jetbrains.annotations.*;
 
@@ -18,7 +18,7 @@ import java.text.*;
 import java.util.*;
 
 /**
- * {@link GridProduct} implementation.
+ * {@link org.apache.ignite.product.GridProduct} implementation.
  */
 public class GridProductImpl implements GridProduct, Externalizable {
     /** */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/kernal/GridUpdateNotifier.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/GridUpdateNotifier.java b/modules/core/src/main/java/org/gridgain/grid/kernal/GridUpdateNotifier.java
index 51f2e59..ebde564 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/GridUpdateNotifier.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/GridUpdateNotifier.java
@@ -10,9 +10,9 @@
 package org.gridgain.grid.kernal;
 
 import org.apache.ignite.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.kernal.processors.license.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.gridgain.grid.util.worker.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/kernal/managers/discovery/GridDiscoveryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/managers/discovery/GridDiscoveryManager.java
index 86be35b..d964e90 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/managers/discovery/GridDiscoveryManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/managers/discovery/GridDiscoveryManager.java
@@ -13,6 +13,7 @@ import org.apache.ignite.cluster.*;
 import org.apache.ignite.events.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.plugin.extensions.discovery.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.kernal.*;
 import org.gridgain.grid.kernal.managers.*;
@@ -22,7 +23,6 @@ import org.gridgain.grid.kernal.managers.security.*;
 import org.gridgain.grid.kernal.processors.cache.*;
 import org.gridgain.grid.kernal.processors.jobmetrics.*;
 import org.gridgain.grid.kernal.processors.service.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.security.*;
 import org.gridgain.grid.segmentation.*;
 import org.gridgain.grid.spi.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/kernal/processors/dataload/IgniteDataLoaderImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/dataload/IgniteDataLoaderImpl.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/dataload/IgniteDataLoaderImpl.java
index 4742476..1c5ab8e 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/dataload/IgniteDataLoaderImpl.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/dataload/IgniteDataLoaderImpl.java
@@ -14,6 +14,7 @@ import org.apache.ignite.cluster.*;
 import org.apache.ignite.dataload.*;
 import org.apache.ignite.events.*;
 import org.apache.ignite.lang.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.*;
@@ -22,7 +23,6 @@ import org.gridgain.grid.kernal.managers.deployment.*;
 import org.gridgain.grid.kernal.managers.eventstorage.*;
 import org.gridgain.grid.kernal.processors.cache.*;
 import org.gridgain.grid.kernal.processors.portable.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.util.*;
 import org.gridgain.grid.util.future.*;
 import org.gridgain.grid.util.lang.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/kernal/processors/job/GridJobProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/job/GridJobProcessor.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/job/GridJobProcessor.java
index a6914d7..55ebefd 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/job/GridJobProcessor.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/job/GridJobProcessor.java
@@ -14,6 +14,7 @@ import org.apache.ignite.compute.*;
 import org.apache.ignite.events.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.marshaller.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.kernal.*;
 import org.gridgain.grid.kernal.managers.collision.*;
@@ -22,7 +23,6 @@ import org.gridgain.grid.kernal.managers.deployment.*;
 import org.gridgain.grid.kernal.managers.eventstorage.*;
 import org.gridgain.grid.kernal.processors.*;
 import org.gridgain.grid.kernal.processors.jobmetrics.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.spi.collision.*;
 import org.gridgain.grid.util.*;
 import org.gridgain.grid.util.typedef.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/kernal/processors/license/GridLicenseProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/license/GridLicenseProcessor.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/license/GridLicenseProcessor.java
index cf9fba9..da76424 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/license/GridLicenseProcessor.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/license/GridLicenseProcessor.java
@@ -9,8 +9,8 @@
 
 package org.gridgain.grid.kernal.processors.license;
 
+import org.apache.ignite.product.*;
 import org.gridgain.grid.kernal.processors.*;
-import org.gridgain.grid.product.*;
 import org.jetbrains.annotations.*;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/kernal/processors/license/os/GridOsLicenseProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/license/os/GridOsLicenseProcessor.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/license/os/GridOsLicenseProcessor.java
index 8632c77..c06aca0 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/license/os/GridOsLicenseProcessor.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/license/os/GridOsLicenseProcessor.java
@@ -9,10 +9,10 @@
 
 package org.gridgain.grid.kernal.processors.license.os;
 
+import org.apache.ignite.product.*;
 import org.gridgain.grid.kernal.*;
 import org.gridgain.grid.kernal.processors.*;
 import org.gridgain.grid.kernal.processors.license.*;
-import org.gridgain.grid.product.*;
 import org.jetbrains.annotations.*;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/product/GridProduct.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/product/GridProduct.java b/modules/core/src/main/java/org/gridgain/grid/product/GridProduct.java
deleted file mode 100644
index 47d7f5e..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/product/GridProduct.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/* @java.file.header */
-
-/*  _________        _____ __________________        _____
- *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
- *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
- *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
- *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
- */
-
-package org.gridgain.grid.product;
-
-import org.jetbrains.annotations.*;
-
-/**
- * Provides information about current release. Note that enterprise users are also
- * able to renew license. Instance of {@code GridProduct} is obtained from grid as follows:
- * <pre name="code" class="java">
- * GridProduct p = GridGain.grid().product();
- * </pre>
- */
-public interface GridProduct {
-    /**
-     * Gets license descriptor for enterprise edition or {@code null} for open source edition.
-     *
-     * @return License descriptor.
-     */
-    @Nullable public GridProductLicense license();
-
-    /**
-     * Updates to a new license in enterprise edition. This method is no-op in open source edition.
-     *
-     * @param lic The content of the license.
-     * @throws GridProductLicenseException If license could not be updated.
-     */
-    public void updateLicense(String lic) throws GridProductLicenseException;
-
-    /**
-     * Gets product version for this release.
-     *
-     * @return Product version for this release.
-     */
-    public GridProductVersion version();
-
-    /**
-     * Copyright statement for GridGain code.
-     *
-     * @return Legal copyright statement for GridGain code.
-     */
-    public String copyright();
-
-    /**
-     * Gets latest version available for download or
-     * {@code null} if information is not available.
-     *
-     * @return Latest version string or {@code null} if information is not available.
-     */
-    @Nullable public String latestVersion();
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/product/GridProductLicense.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/product/GridProductLicense.java b/modules/core/src/main/java/org/gridgain/grid/product/GridProductLicense.java
deleted file mode 100644
index e9aa72d..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/product/GridProductLicense.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/* @java.file.header */
-
-/*  _________        _____ __________________        _____
- *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
- *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
- *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
- *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
- */
-
-package org.gridgain.grid.product;
-
-import org.jetbrains.annotations.*;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * GridGain license descriptor. GridGain license is available for
- * information purposes and is checked automatically by GridGain software.
- * License descriptor can be obtains by calling {@link GridProduct#license()} method.
- * @see GridProduct#license()
- */
-public interface GridProductLicense extends Serializable {
-    /**
-     * Gets a comma separated list of disabled subsystems.
-     *
-     * @return Comma separated list of disabled subsystems or {@code null}.
-     */
-    public String disabledSubsystems();
-
-    /**
-     * Gets license version.
-     *
-     * @return License version.
-     */
-    public String version();
-
-    /**
-     * Gets license ID.
-     *
-     * @return License ID.
-     */
-    public UUID id();
-
-    /**
-     * Version regular expression.
-     *
-     * @return Version regular expression.
-     */
-    public String versionRegexp();
-
-    /**
-     * Gets issue date.
-     *
-     * @return Issue date.
-     */
-    public Date issueDate();
-
-    /**
-     * Gets maintenance time in months. If zero - no restriction.
-     *
-     * @return Maintenance time.
-     */
-    public int maintenanceTime();
-
-    /**
-     * Gets issue organization.
-     *
-     * @return Issue organization.
-     */
-    public String issueOrganization();
-
-    /**
-     * Gets user organization.
-     *
-     * @return User organization.
-     */
-    public String userOrganization();
-
-    /**
-     * Gets license note. It may include textual description of license limitations such
-     * as as "Development Only" or "Load-Testing and Staging Only".
-     *
-     * @return License note.
-     */
-    public String licenseNote();
-
-    /**
-     * Gets user organization URL.
-     *
-     * @return User organization URL.
-     */
-    public String userWww();
-
-    /**
-     * Gets user organization e-mail.
-     *
-     * @return User organization e-mail.
-     */
-    public String userEmail();
-
-    /**
-     * Gets user organization contact name.
-     *
-     * @return User organization contact name.
-     */
-    public String userName();
-
-    /**
-     * Gets expire date.
-     *
-     * @return Expire date.
-     */
-    public Date expireDate();
-
-    /**
-     * Gets maximum number of nodes. If zero - no restriction.
-     *
-     * @return Maximum number of nodes.
-     */
-    public int maxNodes();
-
-    /**
-     * Gets maximum number of physical computers or virtual instances. If zero - no restriction.
-     * Note that individual physical computer or virtual instance is determined by number of enabled
-     * MACs on each computer or instance.
-     *
-     * @return Maximum number of computers or virtual instances.
-     */
-    public int maxComputers();
-
-    /**
-     * Gets maximum number of CPUs. If zero - no restriction.
-     *
-     * @return Maximum number of CPUs.
-     */
-    public int maxCpus();
-
-    /**
-     * Gets maximum up time in minutes. If zero - no restriction.
-     *
-     * @return Maximum up time in minutes.
-     */
-    public long maxUpTime();
-
-    /**
-     * Gets license violation grace period in minutes. If zero - no grace period.
-     *
-     * @return License violation grace period in minutes.
-     */
-    public long gracePeriod();
-
-    /**
-     * Gets license attribute name if any. Attributes in license will have to match
-     * attributes in the grid node.
-     *
-     * @return Attribute name.
-     */
-    @Nullable public String attributeName();
-
-    /**
-     * Gets value for the license attribute if any. Attributes in license will have to match
-     * attributes in the grid node.
-     *
-     * @return Attribute value.
-     */
-    @Nullable public String attributeValue();
-
-    /**
-     * Gets a comma separated list of allowed cache distribution modes.
-     *
-     * @return Allowed cache distribution modes or {@code null}.
-     */
-    @Nullable public String getCacheDistributionModes();
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/product/GridProductLicenseException.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/product/GridProductLicenseException.java b/modules/core/src/main/java/org/gridgain/grid/product/GridProductLicenseException.java
deleted file mode 100644
index 281ec6b..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/product/GridProductLicenseException.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/* @java.file.header */
-
-/*  _________        _____ __________________        _____
- *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
- *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
- *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
- *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
- */
-
-package org.gridgain.grid.product;
-
-import org.gridgain.grid.*;
-import org.gridgain.grid.util.typedef.internal.*;
-import org.jetbrains.annotations.*;
-
-/**
- * This exception is thrown when license violation is detected.
- */
-public class GridProductLicenseException extends GridException {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** Short message. */
-    private final String shortMsg;
-
-    /**
-     * Creates new license exception with given error message.
-     *
-     * @param msg Error message.
-     * @param shortMsg Short error message presentable to the user. Note it should contain just letter and dot.
-     */
-    public GridProductLicenseException(String msg, @Nullable String shortMsg) {
-        super(msg);
-
-        this.shortMsg = shortMsg;
-    }
-
-    /**
-     * Creates new license exception with given error message and optional nested exception.
-     *
-     * @param msg Error message.
-     * @param shortMsg Short error message presentable to the user. Note it should contain just letter and dot.
-     * @param cause Optional nested exception (can be {@code null}).
-     */
-    public GridProductLicenseException(String msg, @Nullable String shortMsg, @Nullable Throwable cause) {
-        super(msg, cause);
-
-        this.shortMsg = shortMsg;
-    }
-
-    /**
-     * @return shortMessage Short error message presentable to the user. Note it should contain just letter and dot.
-     */
-    public final String shortMessage() {
-        return shortMsg;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(GridProductLicenseException.class, this, "msg", getMessage(), "shortMsg", shortMsg);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/product/GridProductVersion.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/product/GridProductVersion.java b/modules/core/src/main/java/org/gridgain/grid/product/GridProductVersion.java
deleted file mode 100644
index 1f328d4..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/product/GridProductVersion.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/* @java.file.header */
-
-/*  _________        _____ __________________        _____
- *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
- *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
- *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
- *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
- */
-
-package org.gridgain.grid.product;
-
-import org.gridgain.grid.*;
-import org.gridgain.grid.util.typedef.internal.*;
-import org.jetbrains.annotations.*;
-
-import java.io.*;
-import java.text.*;
-import java.util.*;
-import java.util.regex.*;
-
-/**
- * Represents node version.
- * <p>
- * Node version can be acquired via {@link org.apache.ignite.cluster.ClusterNode#version()} method.
- * <p>
- * Two versions are compared in the following order: major number,
- * minor number, maintenance number, revision timestamp.
- */
-public class GridProductVersion implements Comparable<GridProductVersion>, Externalizable {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** Regexp parse pattern. */
-    private static final Pattern VER_PATTERN =
-        Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)((?!-(os|ent))-([^-]+))?(-(os|ent))?(-(\\d+))?(-([\\da-f]+))?");
-
-    /** Major version number. */
-    private byte major;
-
-    /** Minor version number. */
-    private byte minor;
-
-    /** Maintenance version number. */
-    private byte maintenance;
-
-    /** Stage of development. */
-    private String stage;
-
-    /** Revision timestamp. */
-    private long revTs;
-
-    /** Revision hash. */
-    private byte[] revHash;
-
-    /**
-     * Empty constructor required by {@link Externalizable}.
-     */
-    public GridProductVersion() {
-        // No-op.
-    }
-
-    /**
-     * @param major Major version number.
-     * @param minor Minor version number.
-     * @param maintenance Maintenance version number.
-     * @param revTs Revision timestamp.
-     * @param revHash Revision hash.
-     */
-    public GridProductVersion(byte major, byte minor, byte maintenance, long revTs, byte[] revHash) {
-        this(major, minor, maintenance, "", revTs, revHash);
-    }
-
-    /**
-     * @param major Major version number.
-     * @param minor Minor version number.
-     * @param maintenance Maintenance version number.
-     * @param stage Stage of development.
-     * @param revTs Revision timestamp.
-     * @param revHash Revision hash.
-     */
-    public GridProductVersion(byte major, byte minor, byte maintenance, String stage, long revTs, byte[] revHash) {
-        if (revHash != null && revHash.length != 20)
-            throw new IllegalArgumentException("Invalid length for SHA1 hash (must be 20): " + revHash.length);
-
-        this.major = major;
-        this.minor = minor;
-        this.maintenance = maintenance;
-        this.stage = stage;
-        this.revTs = revTs;
-        this.revHash = revHash != null ? revHash : new byte[20];
-    }
-
-    /**
-     * Gets major version number.
-     *
-     * @return Major version number.
-     */
-    public byte major() {
-        return major;
-    }
-
-    /**
-     * Gets minor version number.
-     *
-     * @return Minor version number.
-     */
-    public byte minor() {
-        return minor;
-    }
-
-    /**
-     * Gets maintenance version number.
-     *
-     * @return Maintenance version number.
-     */
-    public byte maintenance() {
-        return maintenance;
-    }
-
-    /**
-     * @return Stage of development.
-     */
-    public String stage() {
-        return stage;
-    }
-
-    /**
-     * Gets revision timestamp.
-     *
-     * @return Revision timestamp.
-     */
-    public long revisionTimestamp() {
-        return revTs;
-    }
-
-    /**
-     * Gets revision hash.
-     *
-     * @return Revision hash.
-     */
-    public byte[] revisionHash() {
-        return revHash;
-    }
-
-    /**
-     * Gets release date.
-     *
-     * @return Release date.
-     */
-    public Date releaseDate() {
-        return new Date(revTs);
-    }
-
-    /**
-     * @param major Major version number.
-     * @param minor Minor version number.
-     * @param maintenance Maintenance version number.
-     * @return {@code True} if this version is greater or equal than the one passed in.
-     */
-    public boolean greaterThanEqual(int major, int minor, int maintenance) {
-        // NOTE: Unknown version is less than any other version.
-        if (major == this.major)
-            return minor == this.minor ? this.maintenance >= maintenance : this.minor > minor;
-        else
-            return this.major > major;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int compareTo(@NotNull GridProductVersion o) {
-        // NOTE: Unknown version is less than any other version.
-        if (major == o.major) {
-            if (minor == o.minor) {
-                if (maintenance == o.maintenance)
-                    return revTs != o.revTs ? revTs < o.revTs ? -1 : 1 : 0;
-                else
-                    return maintenance < o.maintenance ? -1 : 1;
-            }
-            else
-                return minor < o.minor ? -1 : 1;
-        }
-        else
-            return major < o.major ? -1 : 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-
-        if (!(o instanceof GridProductVersion))
-            return false;
-
-        GridProductVersion that = (GridProductVersion)o;
-
-        return revTs == that.revTs && maintenance == that.maintenance && minor == that.minor && major == that.major;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = major;
-
-        res = 31 * res + minor;
-        res = 31 * res + maintenance;
-        res = 31 * res + (int)(revTs ^ (revTs >>> 32));
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeByte(major);
-        out.writeByte(minor);
-        out.writeByte(maintenance);
-        out.writeLong(revTs);
-        U.writeByteArray(out, revHash);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        major = in.readByte();
-        minor = in.readByte();
-        maintenance = in.readByte();
-        revTs = in.readLong();
-        revHash = U.readByteArray(in);
-    }
-
-    /** {@inheritDoc} */
-    public String toString() {
-        String revTsStr = new SimpleDateFormat("yyyyMMdd").format(new Date(revTs * 1000));
-
-        String hash = U.byteArray2HexString(revHash).toLowerCase();
-
-        hash = hash.length() > 8 ? hash.substring(0, 8) : hash;
-
-        return major + "." + minor + "." + maintenance + "#" + revTsStr + "-sha1:" + hash;
-    }
-
-    /**
-     * Tries to parse product version from it's string representation.
-     *
-     * @param verStr String representation of version.
-     * @return Product version.
-     */
-    @SuppressWarnings({"MagicConstant", "TypeMayBeWeakened"})
-    public static GridProductVersion fromString(String verStr) {
-        assert verStr != null;
-
-        if (verStr.endsWith("-DEV")) // Development version, just cut it out.
-            verStr = verStr.substring(0, verStr.length() - 4);
-
-        Matcher match = VER_PATTERN.matcher(verStr);
-
-        if (match.matches()) {
-            try {
-                byte major = Byte.parseByte(match.group(1));
-                byte minor = Byte.parseByte(match.group(2));
-                byte maintenance = Byte.parseByte(match.group(3));
-
-                String stage = "";
-
-                if (match.group(4) != null)
-                    stage = match.group(6);
-
-                long revTs = 0;
-
-                if (match.group(9) != null)
-                    revTs = Long.parseLong(match.group(10));
-
-                byte[] revHash = null;
-
-                if (match.group(11) != null)
-                    revHash = U.decodeHex(match.group(12).toCharArray());
-
-                return new GridProductVersion(major, minor, maintenance, stage, revTs, revHash);
-            }
-            catch (IllegalStateException | IndexOutOfBoundsException | NumberFormatException | GridException e) {
-                throw new IllegalStateException("Failed to parse version: " + verStr, e);
-            }
-        }
-        else
-            throw new IllegalStateException("Failed to parse version: " + verStr);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/product/package.html
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/product/package.html b/modules/core/src/main/java/org/gridgain/grid/product/package.html
deleted file mode 100644
index 691561c..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/product/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--
-    @html.file.header
-    _________        _____ __________________        _____
-    __  ____/___________(_)______  /__  ____/______ ____(_)_______
-    _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
-    / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
-    \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
--->
-<html>
-<body>
-    <!-- Package description. -->
-    Contains <b>Product</b> and <b>License</b> related functionality.
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/spi/communication/tcp/GridTcpCommunicationSpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/spi/communication/tcp/GridTcpCommunicationSpi.java b/modules/core/src/main/java/org/gridgain/grid/spi/communication/tcp/GridTcpCommunicationSpi.java
index 12ea6c0..20e7569 100644
--- a/modules/core/src/main/java/org/gridgain/grid/spi/communication/tcp/GridTcpCommunicationSpi.java
+++ b/modules/core/src/main/java/org/gridgain/grid/spi/communication/tcp/GridTcpCommunicationSpi.java
@@ -14,10 +14,10 @@ import org.apache.ignite.cluster.*;
 import org.apache.ignite.events.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.marshaller.*;
+import org.apache.ignite.product.*;
 import org.apache.ignite.resources.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.kernal.managers.eventstorage.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.spi.*;
 import org.gridgain.grid.spi.communication.*;
 import org.gridgain.grid.thread.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/spi/discovery/GridDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/spi/discovery/GridDiscoverySpi.java b/modules/core/src/main/java/org/gridgain/grid/spi/discovery/GridDiscoverySpi.java
index a2e9278..3fc5e2f 100644
--- a/modules/core/src/main/java/org/gridgain/grid/spi/discovery/GridDiscoverySpi.java
+++ b/modules/core/src/main/java/org/gridgain/grid/spi/discovery/GridDiscoverySpi.java
@@ -10,7 +10,7 @@
 package org.gridgain.grid.spi.discovery;
 
 import org.apache.ignite.cluster.*;
-import org.gridgain.grid.product.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.spi.*;
 import org.gridgain.grid.spi.discovery.tcp.*;
 import org.jetbrains.annotations.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/spi/discovery/tcp/GridTcpDiscoverySpiAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/spi/discovery/tcp/GridTcpDiscoverySpiAdapter.java b/modules/core/src/main/java/org/gridgain/grid/spi/discovery/tcp/GridTcpDiscoverySpiAdapter.java
index 89dfa0e..70d5d89 100644
--- a/modules/core/src/main/java/org/gridgain/grid/spi/discovery/tcp/GridTcpDiscoverySpiAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/spi/discovery/tcp/GridTcpDiscoverySpiAdapter.java
@@ -13,9 +13,9 @@ import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.marshaller.*;
 import org.apache.ignite.marshaller.jdk.*;
+import org.apache.ignite.product.*;
 import org.apache.ignite.resources.*;
 import org.gridgain.grid.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.spi.*;
 import org.gridgain.grid.spi.discovery.*;
 import org.gridgain.grid.spi.discovery.tcp.internal.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/spi/discovery/tcp/internal/GridTcpDiscoveryNode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/spi/discovery/tcp/internal/GridTcpDiscoveryNode.java b/modules/core/src/main/java/org/gridgain/grid/spi/discovery/tcp/internal/GridTcpDiscoveryNode.java
index 4969b97..14973cf 100644
--- a/modules/core/src/main/java/org/gridgain/grid/spi/discovery/tcp/internal/GridTcpDiscoveryNode.java
+++ b/modules/core/src/main/java/org/gridgain/grid/spi/discovery/tcp/internal/GridTcpDiscoveryNode.java
@@ -11,8 +11,8 @@ package org.gridgain.grid.spi.discovery.tcp.internal;
 
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.lang.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.kernal.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.spi.discovery.*;
 import org.gridgain.grid.spi.discovery.tcp.*;
 import org.gridgain.grid.util.lang.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/main/java/org/gridgain/grid/util/GridUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/util/GridUtils.java b/modules/core/src/main/java/org/gridgain/grid/util/GridUtils.java
index 47d115d..37642c4 100644
--- a/modules/core/src/main/java/org/gridgain/grid/util/GridUtils.java
+++ b/modules/core/src/main/java/org/gridgain/grid/util/GridUtils.java
@@ -18,13 +18,13 @@ import org.apache.ignite.lang.*;
 import org.apache.ignite.lifecycle.*;
 import org.apache.ignite.mbean.*;
 import org.apache.ignite.portables.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.*;
 import org.gridgain.grid.kernal.managers.deployment.*;
 import org.gridgain.grid.kernal.processors.cache.*;
 import org.gridgain.grid.kernal.processors.streamer.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.spi.*;
 import org.gridgain.grid.spi.discovery.*;
 import org.gridgain.grid.util.io.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/test/java/org/gridgain/grid/kernal/GridDiscoverySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/GridDiscoverySelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/GridDiscoverySelfTest.java
index 5e299db..a2381e6 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/GridDiscoverySelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/GridDiscoverySelfTest.java
@@ -14,9 +14,9 @@ import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.events.*;
 import org.apache.ignite.lang.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.managers.discovery.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.spi.discovery.tcp.*;
 import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
 import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
@@ -30,7 +30,7 @@ import java.util.concurrent.*;
 import java.util.concurrent.atomic.*;
 
 import static java.util.concurrent.TimeUnit.*;
-import static org.gridgain.grid.product.GridProductVersion.*;
+import static org.apache.ignite.product.GridProductVersion.*;
 import static org.apache.ignite.events.IgniteEventType.*;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/test/java/org/gridgain/grid/kernal/GridReleaseTypeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/GridReleaseTypeSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/GridReleaseTypeSelfTest.java
index d43ed4e..dbbf2d8 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/GridReleaseTypeSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/GridReleaseTypeSelfTest.java
@@ -10,8 +10,8 @@
 package org.gridgain.grid.kernal;
 
 import org.apache.ignite.configuration.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.spi.discovery.tcp.*;
 import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
 import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/test/java/org/gridgain/grid/kernal/GridTopologyBuildVersionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/GridTopologyBuildVersionSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/GridTopologyBuildVersionSelfTest.java
index 606f85c..de0de36 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/GridTopologyBuildVersionSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/GridTopologyBuildVersionSelfTest.java
@@ -11,7 +11,7 @@ package org.gridgain.grid.kernal;
 
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
-import org.gridgain.grid.product.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.spi.discovery.tcp.*;
 import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
 import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/test/java/org/gridgain/grid/kernal/GridVersionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/GridVersionSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/GridVersionSelfTest.java
index 06a29bb..60ce11f 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/GridVersionSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/GridVersionSelfTest.java
@@ -10,7 +10,7 @@
 package org.gridgain.grid.kernal;
 
 import org.apache.ignite.*;
-import org.gridgain.grid.product.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.gridgain.testframework.junits.common.*;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheAffinityFunctionExcludeNeighborsAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheAffinityFunctionExcludeNeighborsAbstractSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheAffinityFunctionExcludeNeighborsAbstractSelfTest.java
index 6020c79..6189598 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheAffinityFunctionExcludeNeighborsAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheAffinityFunctionExcludeNeighborsAbstractSelfTest.java
@@ -12,10 +12,10 @@ package org.gridgain.grid.kernal.processors.cache.distributed.near;
 import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.affinity.*;
 import org.gridgain.grid.kernal.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.spi.discovery.tcp.*;
 import org.gridgain.grid.spi.discovery.tcp.internal.*;
 import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/test/java/org/gridgain/grid/marshaller/GridMarshallerAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/marshaller/GridMarshallerAbstractTest.java b/modules/core/src/test/java/org/gridgain/grid/marshaller/GridMarshallerAbstractTest.java
index e6fb1b4..d638c91 100644
--- a/modules/core/src/test/java/org/gridgain/grid/marshaller/GridMarshallerAbstractTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/marshaller/GridMarshallerAbstractTest.java
@@ -17,6 +17,7 @@ import org.apache.ignite.events.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.marshaller.*;
 import org.apache.ignite.marshaller.optimized.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.affinity.*;
@@ -29,7 +30,6 @@ import org.gridgain.grid.kernal.processors.cache.datastructures.*;
 import org.gridgain.grid.kernal.processors.service.*;
 import org.gridgain.grid.kernal.processors.streamer.*;
 import org.gridgain.grid.p2p.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.streamer.*;
 import org.gridgain.grid.streamer.window.*;
 import org.gridgain.grid.util.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/test/java/org/gridgain/grid/p2p/GridP2PClassLoadingSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/p2p/GridP2PClassLoadingSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/p2p/GridP2PClassLoadingSelfTest.java
index e31c0ca..455067e 100644
--- a/modules/core/src/test/java/org/gridgain/grid/p2p/GridP2PClassLoadingSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/p2p/GridP2PClassLoadingSelfTest.java
@@ -11,8 +11,8 @@ package org.gridgain.grid.p2p;
 
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.compute.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.lang.*;
 import org.gridgain.testframework.*;
@@ -22,7 +22,7 @@ import org.jetbrains.annotations.*;
 import java.util.*;
 import java.util.concurrent.atomic.*;
 
-import static org.gridgain.grid.product.GridProductVersion.*;
+import static org.apache.ignite.product.GridProductVersion.*;
 
 /**
  * P2P test.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/test/java/org/gridgain/grid/product/GridProductVersionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/product/GridProductVersionSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/product/GridProductVersionSelfTest.java
index 26305ab..0fd1ff6 100644
--- a/modules/core/src/test/java/org/gridgain/grid/product/GridProductVersionSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/product/GridProductVersionSelfTest.java
@@ -9,6 +9,7 @@
 
 package org.gridgain.grid.product;
 
+import org.apache.ignite.product.*;
 import org.gridgain.testframework.junits.common.*;
 
 import static org.junit.Assert.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/test/java/org/gridgain/grid/spi/discovery/GridAbstractDiscoverySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/spi/discovery/GridAbstractDiscoverySelfTest.java b/modules/core/src/test/java/org/gridgain/grid/spi/discovery/GridAbstractDiscoverySelfTest.java
index dde721c..7e34b08 100644
--- a/modules/core/src/test/java/org/gridgain/grid/spi/discovery/GridAbstractDiscoverySelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/spi/discovery/GridAbstractDiscoverySelfTest.java
@@ -26,7 +26,7 @@ import java.util.*;
 import java.util.concurrent.atomic.*;
 
 import static org.apache.ignite.events.IgniteEventType.*;
-import static org.gridgain.grid.product.GridProductVersion.*;
+import static org.apache.ignite.product.GridProductVersion.*;
 
 /**
  * Base discovery self-test class.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/test/java/org/gridgain/testframework/GridTestNode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/testframework/GridTestNode.java b/modules/core/src/test/java/org/gridgain/testframework/GridTestNode.java
index 20de5dc..55a0106 100644
--- a/modules/core/src/test/java/org/gridgain/testframework/GridTestNode.java
+++ b/modules/core/src/test/java/org/gridgain/testframework/GridTestNode.java
@@ -10,14 +10,14 @@
 package org.gridgain.testframework;
 
 import org.apache.ignite.cluster.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.kernal.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.util.lang.*;
 
 import java.util.*;
 import java.util.concurrent.atomic.*;
 
-import static org.gridgain.grid.product.GridProductVersion.*;
+import static org.apache.ignite.product.GridProductVersion.*;
 
 /**
  * Test node.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/core/src/test/java/org/gridgain/testframework/junits/spi/GridSpiAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/testframework/junits/spi/GridSpiAbstractTest.java b/modules/core/src/test/java/org/gridgain/testframework/junits/spi/GridSpiAbstractTest.java
index 51540cf..4255f3e 100644
--- a/modules/core/src/test/java/org/gridgain/testframework/junits/spi/GridSpiAbstractTest.java
+++ b/modules/core/src/test/java/org/gridgain/testframework/junits/spi/GridSpiAbstractTest.java
@@ -10,9 +10,9 @@
 package org.gridgain.testframework.junits.spi;
 
 import org.apache.ignite.cluster.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.kernal.*;
 import org.gridgain.grid.kernal.managers.security.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.security.*;
 import org.gridgain.grid.spi.*;
 import org.gridgain.grid.spi.communication.*;
@@ -33,7 +33,7 @@ import java.lang.reflect.*;
 import java.util.*;
 import java.util.concurrent.*;
 
-import static org.gridgain.grid.product.GridProductVersion.*;
+import static org.apache.ignite.product.GridProductVersion.*;
 
 /**
  * Base SPI test class.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/779ddfa5/modules/spring/src/main/java/org/gridgain/grid/GridSpringBean.java
----------------------------------------------------------------------
diff --git a/modules/spring/src/main/java/org/gridgain/grid/GridSpringBean.java b/modules/spring/src/main/java/org/gridgain/grid/GridSpringBean.java
index bf5e245..c164c03 100644
--- a/modules/spring/src/main/java/org/gridgain/grid/GridSpringBean.java
+++ b/modules/spring/src/main/java/org/gridgain/grid/GridSpringBean.java
@@ -13,11 +13,11 @@ import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.plugin.*;
+import org.apache.ignite.product.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.dr.*;
 import org.gridgain.grid.hadoop.*;
 import org.gridgain.grid.portables.*;
-import org.gridgain.grid.product.*;
 import org.gridgain.grid.security.*;
 import org.gridgain.grid.util.lang.*;
 import org.gridgain.grid.util.typedef.*;