ignite-2065: rename "portable" packages to "binary"
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/1dbf20e0 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/1dbf20e0 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/1dbf20e0 Branch: refs/heads/ignite-1.5 Commit: 1dbf20e0e13f8af83e6ff0a4299f0e1ac335c8de Parents: 9d478ae Author: ashutak <[email protected]> Authored: Fri Dec 11 12:35:04 2015 +0300 Committer: ashutak <[email protected]> Committed: Fri Dec 11 12:35:05 2015 +0300 ---------------------------------------------------------------------- modules/core/pom.xml | 4 +- .../java/org/apache/ignite/IgniteBinary.java | 2 +- .../java/org/apache/ignite/IgniteCache.java | 2 +- .../store/jdbc/CacheAbstractJdbcStore.java | 2 +- .../cache/store/jdbc/CacheJdbcPojoStore.java | 2 +- .../ignite/internal/GridKernalContextImpl.java | 2 +- .../apache/ignite/internal/IgniteKernal.java | 6 +- .../org/apache/ignite/internal/IgnitionEx.java | 2 +- .../binary/BinaryCachingMetadataHandler.java | 70 + .../ignite/internal/binary/BinaryEnumCache.java | 69 + .../internal/binary/BinaryEnumObjectImpl.java | 311 ++ .../internal/binary/BinaryFieldAccessor.java | 856 ++++ .../ignite/internal/binary/BinaryFieldImpl.java | 116 + .../internal/binary/BinaryInternalIdMapper.java | 161 + .../internal/binary/BinaryMarshaller.java | 142 + .../ignite/internal/binary/BinaryMetadata.java | 180 + .../binary/BinaryMetadataCollector.java | 277 ++ .../internal/binary/BinaryMetadataHandler.java | 44 + .../binary/BinaryNoopMetadataHandler.java | 53 + .../ignite/internal/binary/BinaryObjectEx.java | 30 + .../internal/binary/BinaryObjectExImpl.java | 251 ++ .../internal/binary/BinaryObjectImpl.java | 570 +++ .../binary/BinaryObjectOffheapImpl.java | 430 ++ .../internal/binary/BinaryRawReaderEx.java | 33 + .../internal/binary/BinaryRawWriterEx.java | 60 + .../internal/binary/BinaryReaderExImpl.java | 2028 +++++++++ .../internal/binary/BinaryReaderHandles.java | 108 + .../binary/BinaryReaderHandlesHolder.java | 46 + .../binary/BinaryReaderHandlesHolderImpl.java | 44 + .../binary/BinaryThreadLocalContext.java | 70 + .../ignite/internal/binary/BinaryTypeImpl.java | 93 + .../ignite/internal/binary/BinaryWriteMode.java | 178 + .../internal/binary/BinaryWriterExImpl.java | 1808 ++++++++ .../internal/binary/BinaryWriterHandles.java | 101 + .../binary/BinaryWriterSchemaHolder.java | 149 + .../internal/binary/GridPortableMarshaller.java | 289 ++ .../binary/PortableClassDescriptor.java | 813 ++++ .../ignite/internal/binary/PortableContext.java | 1102 +++++ .../binary/PortablePositionReadable.java | 47 + .../internal/binary/PortablePrimitives.java | 382 ++ .../ignite/internal/binary/PortableSchema.java | 466 ++ .../internal/binary/PortableSchemaRegistry.java | 172 + .../ignite/internal/binary/PortableUtils.java | 1909 ++++++++ .../binary/builder/BinaryObjectBuilderImpl.java | 587 +++ .../builder/PortableAbstractLazyValue.java | 57 + .../binary/builder/PortableBuilderEnum.java | 116 + .../binary/builder/PortableBuilderReader.java | 856 ++++ .../PortableBuilderSerializationAware.java | 31 + .../builder/PortableBuilderSerializer.java | 217 + .../builder/PortableEnumArrayLazyValue.java | 116 + .../binary/builder/PortableLazyArrayList.java | 167 + .../binary/builder/PortableLazyLinkedList.java | 218 + .../binary/builder/PortableLazyMap.java | 221 + .../binary/builder/PortableLazySet.java | 94 + .../binary/builder/PortableLazyValue.java | 28 + .../builder/PortableModifiableLazyValue.java | 52 + .../builder/PortableObjectArrayLazyValue.java | 91 + .../binary/builder/PortablePlainLazyValue.java | 49 + .../builder/PortablePlainPortableObject.java | 56 + .../binary/builder/PortableValueWithType.java | 77 + .../internal/binary/builder/package-info.java | 22 + .../ignite/internal/binary/package-info.java | 22 + .../streams/PortableAbstractInputStream.java | 379 ++ .../streams/PortableAbstractOutputStream.java | 347 ++ .../binary/streams/PortableAbstractStream.java | 80 + .../binary/streams/PortableHeapInputStream.java | 166 + .../streams/PortableHeapOutputStream.java | 176 + .../binary/streams/PortableInputStream.java | 163 + .../binary/streams/PortableMemoryAllocator.java | 57 + .../streams/PortableMemoryAllocatorChunk.java | 117 + .../streams/PortableOffheapInputStream.java | 144 + .../streams/PortableOffheapOutputStream.java | 222 + .../binary/streams/PortableOutputStream.java | 259 ++ .../internal/binary/streams/PortableStream.java | 53 + .../internal/binary/streams/package-info.java | 22 + .../communication/GridIoMessageFactory.java | 4 +- .../portable/BinaryCachingMetadataHandler.java | 70 - .../internal/portable/BinaryEnumCache.java | 69 - .../internal/portable/BinaryEnumObjectImpl.java | 311 -- .../internal/portable/BinaryFieldAccessor.java | 856 ---- .../internal/portable/BinaryFieldImpl.java | 116 - .../portable/BinaryInternalIdMapper.java | 161 - .../internal/portable/BinaryMarshaller.java | 142 - .../internal/portable/BinaryMetadata.java | 180 - .../portable/BinaryMetadataCollector.java | 277 -- .../portable/BinaryMetadataHandler.java | 44 - .../portable/BinaryNoopMetadataHandler.java | 53 - .../internal/portable/BinaryObjectEx.java | 30 - .../internal/portable/BinaryObjectExImpl.java | 251 -- .../internal/portable/BinaryObjectImpl.java | 584 --- .../portable/BinaryObjectOffheapImpl.java | 429 -- .../internal/portable/BinaryRawReaderEx.java | 33 - .../internal/portable/BinaryRawWriterEx.java | 60 - .../internal/portable/BinaryReaderExImpl.java | 2028 --------- .../internal/portable/BinaryReaderHandles.java | 108 - .../portable/BinaryReaderHandlesHolder.java | 46 - .../portable/BinaryReaderHandlesHolderImpl.java | 44 - .../portable/BinaryThreadLocalContext.java | 69 - .../internal/portable/BinaryTypeImpl.java | 93 - .../internal/portable/BinaryWriteMode.java | 178 - .../internal/portable/BinaryWriterExImpl.java | 1807 -------- .../internal/portable/BinaryWriterHandles.java | 101 - .../portable/BinaryWriterSchemaHolder.java | 148 - .../portable/GridPortableMarshaller.java | 286 -- .../portable/PortableClassDescriptor.java | 813 ---- .../internal/portable/PortableContext.java | 1102 ----- .../portable/PortablePositionReadable.java | 47 - .../internal/portable/PortablePrimitives.java | 382 -- .../internal/portable/PortableSchema.java | 466 -- .../portable/PortableSchemaRegistry.java | 172 - .../ignite/internal/portable/PortableUtils.java | 1907 -------- .../builder/BinaryObjectBuilderImpl.java | 580 --- .../builder/PortableAbstractLazyValue.java | 57 - .../portable/builder/PortableBuilderEnum.java | 116 - .../portable/builder/PortableBuilderReader.java | 847 ---- .../PortableBuilderSerializationAware.java | 31 - .../builder/PortableBuilderSerializer.java | 217 - .../builder/PortableEnumArrayLazyValue.java | 114 - .../portable/builder/PortableLazyArrayList.java | 166 - .../builder/PortableLazyLinkedList.java | 217 - .../portable/builder/PortableLazyMap.java | 220 - .../portable/builder/PortableLazySet.java | 92 - .../portable/builder/PortableLazyValue.java | 28 - .../builder/PortableModifiableLazyValue.java | 52 - .../builder/PortableObjectArrayLazyValue.java | 91 - .../builder/PortablePlainLazyValue.java | 49 - .../builder/PortablePlainPortableObject.java | 53 - .../portable/builder/PortableValueWithType.java | 76 - .../internal/portable/builder/package-info.java | 22 - .../ignite/internal/portable/package-info.java | 22 - .../streams/PortableAbstractInputStream.java | 379 -- .../streams/PortableAbstractOutputStream.java | 347 -- .../streams/PortableAbstractStream.java | 80 - .../streams/PortableHeapInputStream.java | 166 - .../streams/PortableHeapOutputStream.java | 176 - .../portable/streams/PortableInputStream.java | 162 - .../streams/PortableMemoryAllocator.java | 57 - .../streams/PortableMemoryAllocatorChunk.java | 117 - .../streams/PortableOffheapInputStream.java | 144 - .../streams/PortableOffheapOutputStream.java | 222 - .../portable/streams/PortableOutputStream.java | 259 -- .../portable/streams/PortableStream.java | 53 - .../internal/portable/streams/package-info.java | 22 - .../CacheDefaultBinaryAffinityKeyMapper.java | 4 +- .../processors/cache/CacheObjectContext.java | 2 +- .../processors/cache/GridCacheContext.java | 2 +- .../processors/cache/GridCacheProcessor.java | 2 +- .../CacheDefaultPortableAffinityKeyMapper.java | 51 + .../binary/CacheObjectBinaryProcessor.java | 106 + .../binary/CacheObjectBinaryProcessorImpl.java | 895 ++++ .../binary/CacheObjectPortableContext.java | 56 + .../cache/binary/IgniteBinaryImpl.java | 178 + .../cache/binary/PortableMetadataKey.java | 82 + .../processors/cache/binary/package-info.java | 22 + .../CacheDefaultPortableAffinityKeyMapper.java | 51 - .../portable/CacheObjectBinaryProcessor.java | 106 - .../CacheObjectBinaryProcessorImpl.java | 895 ---- .../portable/CacheObjectPortableContext.java | 56 - .../cache/portable/IgniteBinaryImpl.java | 178 - .../cache/portable/PortableMetadataKey.java | 82 - .../processors/cache/portable/package-info.java | 22 - .../cache/store/CacheOsStoreManager.java | 4 +- .../platform/PlatformAbstractTarget.java | 6 +- .../processors/platform/PlatformContext.java | 6 +- .../platform/PlatformContextImpl.java | 12 +- .../platform/PlatformExtendedException.java | 4 +- .../platform/PlatformProcessorImpl.java | 4 +- .../platform/cache/PlatformCache.java | 6 +- .../cache/PlatformCacheEntryFilterImpl.java | 4 +- .../cache/PlatformCacheEntryProcessorImpl.java | 6 +- .../platform/cache/PlatformCacheIterator.java | 4 +- .../PlatformCachePartialUpdateException.java | 4 +- .../cache/affinity/PlatformAffinity.java | 6 +- .../query/PlatformAbstractQueryCursor.java | 4 +- .../PlatformContinuousQueryRemoteFilter.java | 4 +- .../cache/query/PlatformFieldsQueryCursor.java | 4 +- .../cache/query/PlatformQueryCursor.java | 4 +- .../cache/store/PlatformCacheStoreCallback.java | 4 +- .../platform/cluster/PlatformClusterGroup.java | 6 +- .../cluster/PlatformClusterNodeFilterImpl.java | 4 +- .../platform/compute/PlatformAbstractJob.java | 4 +- .../platform/compute/PlatformAbstractTask.java | 4 +- .../platform/compute/PlatformClosureJob.java | 4 +- .../platform/compute/PlatformCompute.java | 8 +- .../platform/compute/PlatformFullJob.java | 4 +- .../platform/compute/PlatformFullTask.java | 6 +- .../cpp/PlatformCppConfigurationClosure.java | 4 +- .../datastreamer/PlatformDataStreamer.java | 5 +- .../PlatformStreamReceiverImpl.java | 4 +- .../dotnet/PlatformDotNetCacheStore.java | 6 +- .../PlatformDotNetConfigurationClosure.java | 12 +- .../events/PlatformEventFilterListenerImpl.java | 4 +- .../platform/events/PlatformEvents.java | 4 +- .../platform/memory/PlatformInputStream.java | 4 +- .../platform/memory/PlatformOutputStream.java | 4 +- .../messaging/PlatformMessageFilterImpl.java | 4 +- .../messaging/PlatformMessageLocalFilter.java | 2 +- .../platform/messaging/PlatformMessaging.java | 6 +- .../services/PlatformAbstractService.java | 6 +- .../platform/services/PlatformServices.java | 6 +- .../transactions/PlatformTransactions.java | 4 +- .../platform/utils/PlatformFutureUtils.java | 4 +- .../platform/utils/PlatformReaderBiClosure.java | 4 +- .../platform/utils/PlatformReaderClosure.java | 4 +- .../platform/utils/PlatformUtils.java | 6 +- .../platform/utils/PlatformWriterBiClosure.java | 4 +- .../platform/utils/PlatformWriterClosure.java | 4 +- .../sharedfs/SharedFsCheckpointSpi.java | 4 +- .../resources/META-INF/classnames.properties | 36 +- ...heJdbcPojoStoreBinaryMarshallerSelfTest.java | 2 +- .../internal/binary/BinaryEnumsSelfTest.java | 446 ++ .../binary/BinaryFieldsAbstractSelfTest.java | 718 +++ .../binary/BinaryFieldsHeapSelfTest.java | 30 + .../binary/BinaryFieldsOffheapSelfTest.java | 60 + .../BinaryFooterOffsetsAbstractSelfTest.java | 205 + .../binary/BinaryFooterOffsetsHeapSelfTest.java | 30 + .../BinaryFooterOffsetsOffheapSelfTest.java | 60 + .../binary/BinaryMarshallerSelfTest.java | 4209 +++++++++++++++++ .../BinaryObjectBuilderAdditionalSelfTest.java | 1264 ++++++ .../binary/BinaryObjectBuilderSelfTest.java | 1100 +++++ .../binary/GridPortableAffinityKeySelfTest.java | 234 + ...idPortableMarshallerCtxDisabledSelfTest.java | 247 + .../binary/GridPortableMetaDataSelfTest.java | 371 ++ .../binary/GridPortableWildcardsSelfTest.java | 464 ++ .../binary/TestCachingMetadataHandler.java | 45 + .../GridBinaryMarshalerAwareTestClass.java | 67 + .../mutabletest/GridPortableTestClasses.java | 484 ++ .../binary/mutabletest/package-info.java | 22 + .../BinaryFieldsHeapNonCompactSelfTest.java | 30 + .../BinaryFieldsOffheapNonCompactSelfTest.java | 30 + ...naryFooterOffsetsHeapNonCompactSelfTest.java | 30 + ...yFooterOffsetsOffheapNonCompactSelfTest.java | 30 + .../BinaryMarshallerNonCompactSelfTest.java | 30 + ...jectBuilderAdditionalNonCompactSelfTest.java | 30 + .../BinaryObjectBuilderNonCompactSelfTest.java | 30 + .../ignite/internal/binary/package-info.java | 22 + .../binary/test/GridPortableTestClass1.java | 28 + .../binary/test/GridPortableTestClass2.java | 24 + .../internal/binary/test/package-info.java | 22 + .../test/subpackage/GridPortableTestClass3.java | 24 + .../binary/test/subpackage/package-info.java | 22 + .../internal/portable/BinaryEnumsSelfTest.java | 446 -- .../portable/BinaryFieldsAbstractSelfTest.java | 718 --- .../portable/BinaryFieldsHeapSelfTest.java | 30 - .../portable/BinaryFieldsOffheapSelfTest.java | 60 - .../BinaryFooterOffsetsAbstractSelfTest.java | 205 - .../BinaryFooterOffsetsHeapSelfTest.java | 30 - .../BinaryFooterOffsetsOffheapSelfTest.java | 60 - .../portable/BinaryMarshallerSelfTest.java | 4210 ------------------ .../BinaryObjectBuilderAdditionalSelfTest.java | 1272 ------ .../portable/BinaryObjectBuilderSelfTest.java | 1103 ----- .../GridPortableAffinityKeySelfTest.java | 234 - ...idPortableMarshallerCtxDisabledSelfTest.java | 247 - .../portable/GridPortableMetaDataSelfTest.java | 371 -- .../portable/GridPortableWildcardsSelfTest.java | 464 -- .../portable/TestCachingMetadataHandler.java | 45 - .../GridBinaryMarshalerAwareTestClass.java | 67 - .../mutabletest/GridPortableTestClasses.java | 484 -- .../portable/mutabletest/package-info.java | 22 - .../BinaryFieldsHeapNonCompactSelfTest.java | 30 - .../BinaryFieldsOffheapNonCompactSelfTest.java | 30 - ...naryFooterOffsetsHeapNonCompactSelfTest.java | 30 - ...yFooterOffsetsOffheapNonCompactSelfTest.java | 30 - .../BinaryMarshallerNonCompactSelfTest.java | 30 - ...jectBuilderAdditionalNonCompactSelfTest.java | 30 - .../BinaryObjectBuilderNonCompactSelfTest.java | 30 - .../ignite/internal/portable/package-info.java | 22 - .../portable/test/GridPortableTestClass1.java | 28 - .../portable/test/GridPortableTestClass2.java | 24 - .../internal/portable/test/package-info.java | 22 - .../test/subpackage/GridPortableTestClass3.java | 24 - .../portable/test/subpackage/package-info.java | 22 - .../GridCacheConditionalDeploymentSelfTest.java | 2 +- .../cache/GridCacheDeploymentSelfTest.java | 2 +- .../IgniteCacheStoreValueAbstractTest.java | 6 +- ...yAtomicEntryProcessorDeploymentSelfTest.java | 129 + ...naryObjectsAbstractDataStreamerSelfTest.java | 192 + ...aryObjectsAbstractMultiThreadedSelfTest.java | 241 + .../GridCacheBinaryObjectsAbstractSelfTest.java | 981 ++++ ...ctionalEntryProcessorDeploymentSelfTest.java | 31 + ...ntNodeBinaryObjectMetadataMultinodeTest.java | 295 ++ ...CacheClientNodeBinaryObjectMetadataTest.java | 221 + .../GridCachePortableStoreAbstractSelfTest.java | 300 ++ .../GridCachePortableStoreObjectsSelfTest.java | 55 + ...GridCachePortableStorePortablesSelfTest.java | 66 + ...ridPortableCacheEntryMemorySizeSelfTest.java | 48 + ...leDuplicateIndexObjectsAbstractSelfTest.java | 161 + .../DataStreamProcessorPortableSelfTest.java | 71 + .../GridDataStreamerImplSelfTest.java | 345 ++ ...ridCacheAffinityRoutingPortableSelfTest.java | 54 + ...lyPortableDataStreamerMultiNodeSelfTest.java | 29 + ...rtableDataStreamerMultithreadedSelfTest.java | 47 + ...artitionedOnlyPortableMultiNodeSelfTest.java | 28 + ...tionedOnlyPortableMultithreadedSelfTest.java | 47 + ...AtomicNearDisabledOffheapTieredSelfTest.java | 29 + ...BinaryObjectsAtomicNearDisabledSelfTest.java | 51 + ...inaryObjectsAtomicOffheapTieredSelfTest.java | 29 + .../GridCacheBinaryObjectsAtomicSelfTest.java | 51 + ...tionedNearDisabledOffheapTieredSelfTest.java | 30 + ...yObjectsPartitionedNearDisabledSelfTest.java | 51 + ...ObjectsPartitionedOffheapTieredSelfTest.java | 30 + ...idCacheBinaryObjectsPartitionedSelfTest.java | 51 + .../GridCacheMemoryModePortableSelfTest.java | 36 + ...acheOffHeapTieredAtomicPortableSelfTest.java | 48 + ...eapTieredEvictionAtomicPortableSelfTest.java | 96 + ...heOffHeapTieredEvictionPortableSelfTest.java | 96 + .../GridCacheOffHeapTieredPortableSelfTest.java | 48 + ...ateIndexObjectPartitionedAtomicSelfTest.java | 38 + ...xObjectPartitionedTransactionalSelfTest.java | 41 + ...sNearPartitionedByteArrayValuesSelfTest.java | 41 + ...sPartitionedOnlyByteArrayValuesSelfTest.java | 42 + ...ridCacheBinaryObjectsReplicatedSelfTest.java | 51 + ...idCacheBinaryObjectsAtomicLocalSelfTest.java | 32 + ...BinaryObjectsLocalOffheapTieredSelfTest.java | 29 + .../GridCacheBinaryObjectsLocalSelfTest.java | 51 + ...IgniteCacheAbstractExecutionContextTest.java | 4 +- ...eRebalancingUnmarshallingFailedSelfTest.java | 2 +- ...idCacheReplicatedUnswapAdvancedSelfTest.java | 4 +- .../GridCacheReplicatedPreloadSelfTest.java | 2 +- ...yAtomicEntryProcessorDeploymentSelfTest.java | 129 - ...naryObjectsAbstractDataStreamerSelfTest.java | 192 - ...aryObjectsAbstractMultiThreadedSelfTest.java | 241 - .../GridCacheBinaryObjectsAbstractSelfTest.java | 981 ---- ...ctionalEntryProcessorDeploymentSelfTest.java | 31 - ...ntNodeBinaryObjectMetadataMultinodeTest.java | 295 -- ...CacheClientNodeBinaryObjectMetadataTest.java | 221 - .../GridCachePortableStoreAbstractSelfTest.java | 300 -- .../GridCachePortableStoreObjectsSelfTest.java | 55 - ...GridCachePortableStorePortablesSelfTest.java | 66 - ...ridPortableCacheEntryMemorySizeSelfTest.java | 48 - ...leDuplicateIndexObjectsAbstractSelfTest.java | 161 - .../DataStreamProcessorPortableSelfTest.java | 71 - .../GridDataStreamerImplSelfTest.java | 345 -- ...ridCacheAffinityRoutingPortableSelfTest.java | 54 - ...lyPortableDataStreamerMultiNodeSelfTest.java | 29 - ...rtableDataStreamerMultithreadedSelfTest.java | 47 - ...artitionedOnlyPortableMultiNodeSelfTest.java | 28 - ...tionedOnlyPortableMultithreadedSelfTest.java | 47 - ...AtomicNearDisabledOffheapTieredSelfTest.java | 29 - ...BinaryObjectsAtomicNearDisabledSelfTest.java | 51 - ...inaryObjectsAtomicOffheapTieredSelfTest.java | 29 - .../GridCacheBinaryObjectsAtomicSelfTest.java | 51 - ...tionedNearDisabledOffheapTieredSelfTest.java | 30 - ...yObjectsPartitionedNearDisabledSelfTest.java | 51 - ...ObjectsPartitionedOffheapTieredSelfTest.java | 30 - ...idCacheBinaryObjectsPartitionedSelfTest.java | 51 - .../GridCacheMemoryModePortableSelfTest.java | 36 - ...acheOffHeapTieredAtomicPortableSelfTest.java | 48 - ...eapTieredEvictionAtomicPortableSelfTest.java | 96 - ...heOffHeapTieredEvictionPortableSelfTest.java | 96 - .../GridCacheOffHeapTieredPortableSelfTest.java | 48 - ...ateIndexObjectPartitionedAtomicSelfTest.java | 38 - ...xObjectPartitionedTransactionalSelfTest.java | 41 - ...sNearPartitionedByteArrayValuesSelfTest.java | 41 - ...sPartitionedOnlyByteArrayValuesSelfTest.java | 42 - ...ridCacheBinaryObjectsReplicatedSelfTest.java | 51 - ...idCacheBinaryObjectsAtomicLocalSelfTest.java | 32 - ...BinaryObjectsLocalOffheapTieredSelfTest.java | 29 - .../GridCacheBinaryObjectsLocalSelfTest.java | 51 - .../PlatformComputeBinarizableArgTask.java | 4 +- .../platform/PlatformEventsWriteEventTask.java | 4 +- .../session/GridSessionCheckpointSelfTest.java | 8 +- .../testframework/junits/GridAbstractTest.java | 4 +- .../ignite/testframework/junits/IgniteMock.java | 6 +- .../junits/IgniteTestResources.java | 8 +- ...ObjectsCacheDataStructuresSelfTestSuite.java | 2 +- ...BinaryObjectsCacheExpiryPolicyTestSuite.java | 2 +- ...gniteBinaryObjectsCacheRestartTestSuite.java | 2 +- .../IgniteBinaryObjectsCacheTestSuite2.java | 2 +- .../IgniteBinaryObjectsCacheTestSuite3.java | 6 +- .../IgniteBinaryObjectsCacheTestSuite4.java | 2 +- ...IgniteBinaryObjectsComputeGridTestSuite.java | 2 +- .../IgnitePortableCacheFullApiTestSuite.java | 4 +- .../IgnitePortableCacheTestSuite.java | 34 +- .../IgnitePortableObjectsTestSuite.java | 70 +- .../ignite/portable/test1/1.1/test1-1.1.pom | 2 +- .../portable/test1/maven-metadata-local.xml | 2 +- .../ignite/portable/test2/1.1/test2-1.1.pom | 2 +- .../portable/test2/maven-metadata-local.xml | 2 +- .../IgnitePortableCacheQueryTestSuite.java | 8 +- .../Config/marshaller-explicit.xml | 2 +- .../ignite-int-max-values-offheap-config.xml | 2 +- .../ignite-int-max-values-onheap-config.xml | 2 +- .../ignite-int-max-values-swap-config.xml | 2 +- 384 files changed, 35085 insertions(+), 35075 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/pom.xml ---------------------------------------------------------------------- diff --git a/modules/core/pom.xml b/modules/core/pom.xml index c3d34ef..e4e975e 100644 --- a/modules/core/pom.xml +++ b/modules/core/pom.xml @@ -194,14 +194,14 @@ </dependency> <dependency> - <groupId>org.apache.ignite.portable</groupId> + <groupId>org.apache.ignite.binary</groupId> <artifactId>test1</artifactId> <version>1.1</version> <scope>test</scope> </dependency> <dependency> - <groupId>org.apache.ignite.portable</groupId> + <groupId>org.apache.ignite.binary</groupId> <artifactId>test2</artifactId> <version>1.1</version> <scope>test</scope> http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/IgniteBinary.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteBinary.java b/modules/core/src/main/java/org/apache/ignite/IgniteBinary.java index a1c656b..2f68e7a 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteBinary.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteBinary.java @@ -198,7 +198,7 @@ import org.jetbrains.annotations.Nullable; * ... * <property name="typeConfigurations"> * <list> - * <bean class="org.apache.ignite.portable.PortableTypeConfiguration"> + * <bean class="org.apache.ignite.binary.PortableTypeConfiguration"> * <property name="className" value="org.apache.ignite.examples.client.portable.EmployeeKey"/> * <property name="affinityKeyFieldName" value="organizationId"/> * </bean> http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/IgniteCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteCache.java b/modules/core/src/main/java/org/apache/ignite/IgniteCache.java index 3903d02..3376abc 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteCache.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteCache.java @@ -138,7 +138,7 @@ public interface IgniteCache<K, V> extends javax.cache.Cache<K, V>, IgniteAsyncS * so keys and values will be returned from cache API methods without changes. Therefore, * signature of the cache can contain only following types: * <ul> - * <li><code>org.apache.ignite.portable.PortableObject</code> for portable classes</li> + * <li><code>org.apache.ignite.binary.PortableObject</code> for portable classes</li> * <li>All primitives (byte, int, ...) and there boxed versions (Byte, Integer, ...)</li> * <li>Arrays of primitives (byte[], int[], ...)</li> * <li>{@link String} and array of {@link String}s</li> http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java index 060ab89..07e9c9b 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java @@ -62,7 +62,7 @@ import org.apache.ignite.cache.store.jdbc.dialect.MySQLDialect; import org.apache.ignite.cache.store.jdbc.dialect.OracleDialect; import org.apache.ignite.cache.store.jdbc.dialect.SQLServerDialect; import org.apache.ignite.configuration.CacheConfiguration; -import org.apache.ignite.internal.portable.BinaryMarshaller; +import org.apache.ignite.internal.binary.BinaryMarshaller; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.C1; import org.apache.ignite.internal.util.typedef.F; http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.java b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.java index a25df04..200aa0f 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.java @@ -34,7 +34,7 @@ import org.apache.ignite.binary.BinaryObject; import org.apache.ignite.binary.BinaryObjectBuilder; import org.apache.ignite.cache.store.CacheStore; import org.apache.ignite.configuration.CacheConfiguration; -import org.apache.ignite.internal.portable.BinaryObjectEx; +import org.apache.ignite.internal.binary.BinaryObjectEx; import org.apache.ignite.internal.util.typedef.internal.U; import org.jetbrains.annotations.Nullable; http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java index 4990dc7..22fd96c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java @@ -49,7 +49,7 @@ import org.apache.ignite.internal.managers.swapspace.GridSwapSpaceManager; import org.apache.ignite.internal.processors.affinity.GridAffinityProcessor; import org.apache.ignite.internal.processors.cache.CacheConflictResolutionManager; import org.apache.ignite.internal.processors.cache.GridCacheProcessor; -import org.apache.ignite.internal.processors.cache.portable.CacheObjectBinaryProcessorImpl; +import org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl; import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor; import org.apache.ignite.internal.processors.clock.GridClockSource; import org.apache.ignite.internal.processors.clock.GridClockSyncProcessor; http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java index d231ad3..4fb5d4a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java @@ -96,8 +96,8 @@ import org.apache.ignite.internal.managers.failover.GridFailoverManager; import org.apache.ignite.internal.managers.indexing.GridIndexingManager; import org.apache.ignite.internal.managers.loadbalancer.GridLoadBalancerManager; import org.apache.ignite.internal.managers.swapspace.GridSwapSpaceManager; -import org.apache.ignite.internal.portable.BinaryEnumCache; -import org.apache.ignite.internal.portable.BinaryMarshaller; +import org.apache.ignite.internal.binary.BinaryEnumCache; +import org.apache.ignite.internal.binary.BinaryMarshaller; import org.apache.ignite.internal.processors.GridProcessor; import org.apache.ignite.internal.processors.affinity.GridAffinityProcessor; import org.apache.ignite.internal.processors.cache.GridCacheAdapter; @@ -106,7 +106,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheProcessor; import org.apache.ignite.internal.processors.cache.GridCacheUtilityKey; import org.apache.ignite.internal.processors.cache.IgniteCacheProxy; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; -import org.apache.ignite.internal.processors.cache.portable.CacheObjectBinaryProcessorImpl; +import org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl; import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor; import org.apache.ignite.internal.processors.clock.GridClockSyncProcessor; import org.apache.ignite.internal.processors.closure.GridClosureProcessor; http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java index 9b886e8..4f6c6d9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java @@ -61,7 +61,7 @@ import org.apache.ignite.configuration.DeploymentMode; import org.apache.ignite.configuration.FileSystemConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.configuration.TransactionConfiguration; -import org.apache.ignite.internal.portable.BinaryMarshaller; +import org.apache.ignite.internal.binary.BinaryMarshaller; import org.apache.ignite.internal.processors.resource.GridSpringResourceContext; import org.apache.ignite.internal.util.GridConcurrentHashSet; import org.apache.ignite.internal.util.IgniteUtils; http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryCachingMetadataHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryCachingMetadataHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryCachingMetadataHandler.java new file mode 100644 index 0000000..584b683 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryCachingMetadataHandler.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.ignite.internal.binary; + +import org.apache.ignite.binary.BinaryObjectException; +import org.apache.ignite.binary.BinaryType; + +import java.util.HashMap; + +/** + * Simple caching metadata handler. Used mainly in tests. + */ +public class BinaryCachingMetadataHandler implements BinaryMetadataHandler { + /** Cached metadatas. */ + private final HashMap<Integer, BinaryType> metas = new HashMap<>(); + + /** + * Create new handler instance. + * + * @return New handler. + */ + public static BinaryCachingMetadataHandler create() { + return new BinaryCachingMetadataHandler(); + } + + /** + * Private constructor. + */ + private BinaryCachingMetadataHandler() { + // No-op. + } + + /** {@inheritDoc} */ + @Override public synchronized void addMeta(int typeId, BinaryType type) throws BinaryObjectException { + synchronized (this) { + BinaryType oldType = metas.put(typeId, type); + + if (oldType != null) { + BinaryMetadata oldMeta = ((BinaryTypeImpl)oldType).metadata(); + BinaryMetadata newMeta = ((BinaryTypeImpl)type).metadata(); + + BinaryMetadata mergedMeta = PortableUtils.mergeMetadata(oldMeta, newMeta); + + BinaryType mergedType = mergedMeta.wrap(((BinaryTypeImpl)oldType).context()); + + metas.put(typeId, mergedType); + } + } + } + + /** {@inheritDoc} */ + @Override public synchronized BinaryType metadata(int typeId) throws BinaryObjectException { + return metas.get(typeId); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java new file mode 100644 index 0000000..6089cfd --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.ignite.internal.binary; + +import org.apache.ignite.binary.BinaryObjectException; +import org.jsr166.ConcurrentHashMap8; + +import java.util.concurrent.ConcurrentMap; + +/** + * Cache for enum constants. + */ +public class BinaryEnumCache { + /** Cache for enum constants. */ + private static final ConcurrentMap<Class<?>, Object[]> ENUM_CACHE = new ConcurrentHashMap8<>(); + + /** + * Get value for the given class and ordinal. + * + * @param cls Class. + * @param ord Ordinal. + * @return Value. + * @throws BinaryObjectException In case of invalid ordinal. + */ + @SuppressWarnings("unchecked") + public static <T> T get(Class<?> cls, int ord) throws BinaryObjectException { + assert cls != null; + + if (ord >= 0) { + Object[] vals = ENUM_CACHE.get(cls); + + if (vals == null) { + vals = cls.getEnumConstants(); + + ENUM_CACHE.putIfAbsent(cls, vals); + } + + if (ord < vals.length) + return (T) vals[ord]; + else + throw new BinaryObjectException("Failed to get enum value for ordinal (do you have correct class " + + "version?) [cls=" + cls.getName() + ", ordinal=" + ord + ", totalValues=" + vals.length + ']'); + } + else + return null; + } + + /** + * Clears cache. + */ + public static void clear() { + ENUM_CACHE.clear(); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java new file mode 100644 index 0000000..15e42e3 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java @@ -0,0 +1,311 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.ignite.internal.binary; + +import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.binary.BinaryObject; +import org.apache.ignite.binary.BinaryObjectException; +import org.apache.ignite.binary.BinaryType; +import org.apache.ignite.internal.GridDirectTransient; +import org.apache.ignite.internal.processors.cache.CacheObject; +import org.apache.ignite.internal.processors.cache.CacheObjectContext; +import org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl; +import org.apache.ignite.internal.util.typedef.internal.SB; +import org.apache.ignite.plugin.extensions.communication.MessageReader; +import org.apache.ignite.plugin.extensions.communication.MessageWriter; +import org.jetbrains.annotations.Nullable; + +import java.io.Externalizable; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; +import java.nio.ByteBuffer; + +/** + * Binary enum object. + */ +public class BinaryEnumObjectImpl implements BinaryObjectEx, Externalizable, CacheObject { + /** */ + private static final long serialVersionUID = 0L; + + /** Context. */ + @GridDirectTransient + private PortableContext ctx; + + /** Type ID. */ + private int typeId; + + /** Raw data. */ + private String clsName; + + /** Ordinal. */ + private int ord; + + /** + * {@link Externalizable} support. + */ + public BinaryEnumObjectImpl() { + // No-op. + } + + /** + * Constructor. + * + * @param ctx Context. + * @param typeId Type ID. + * @param clsName Class name. + * @param ord Ordinal. + */ + public BinaryEnumObjectImpl(PortableContext ctx, int typeId, @Nullable String clsName, int ord) { + assert ctx != null; + + this.ctx = ctx; + this.typeId = typeId; + this.clsName = clsName; + this.ord = ord; + } + + /** + * @return Class name. + */ + @Nullable public String className() { + return clsName; + } + + /** {@inheritDoc} */ + @Override public int typeId() { + return typeId; + } + + /** {@inheritDoc} */ + @Override public BinaryType type() throws BinaryObjectException { + return ctx.metadata(typeId()); + } + + /** {@inheritDoc} */ + @Override public <F> F field(String fieldName) throws BinaryObjectException { + return null; + } + + /** {@inheritDoc} */ + @Override public boolean hasField(String fieldName) { + return false; + } + + /** {@inheritDoc} */ + @SuppressWarnings("unchecked") + @Override public <T> T deserialize() throws BinaryObjectException { + Class cls = PortableUtils.resolveClass(ctx, typeId, clsName, null, true); + + return BinaryEnumCache.get(cls, ord); + } + + /** {@inheritDoc} */ + @Override public BinaryObject clone() throws CloneNotSupportedException { + return (BinaryObject)super.clone(); + } + + /** {@inheritDoc} */ + @Override public int enumOrdinal() throws BinaryObjectException { + return ord; + } + + /** {@inheritDoc} */ + @Override public int hashCode() { + return 31 * typeId + ord; + } + + /** {@inheritDoc} */ + @Override public boolean equals(Object obj) { + if (obj != null && (obj instanceof BinaryEnumObjectImpl)) { + BinaryEnumObjectImpl other = (BinaryEnumObjectImpl)obj; + + return typeId == other.typeId && ord == other.ord; + } + + return false; + } + + /** {@inheritDoc} */ + @Override public String toString() { + // 1. Try deserializing the object. + try { + Object val = deserialize(); + + return new SB().a(val).toString(); + } + catch (Exception e) { + // No-op. + } + + // 2. Try getting meta. + BinaryType type; + + try { + type = type(); + } + catch (Exception e) { + type = null; + } + + if (type != null) { + return type.typeName() + "[ordinal=" + ord + ']'; + } + else { + if (typeId == GridPortableMarshaller.UNREGISTERED_TYPE_ID) + return "BinaryEnum[clsName=" + clsName + ", ordinal=" + ord + ']'; + else + return "BinaryEnum[typeId=" + typeId + ", ordinal=" + ord + ']'; + } + } + + /** {@inheritDoc} */ + @Override public void writeExternal(ObjectOutput out) throws IOException { + out.writeObject(ctx); + + out.writeInt(typeId); + out.writeObject(clsName); + out.writeInt(ord); + } + + /** {@inheritDoc} */ + @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + ctx = (PortableContext)in.readObject(); + + typeId = in.readInt(); + clsName = (String)in.readObject(); + ord = in.readInt(); + } + + /** {@inheritDoc} */ + @Nullable @Override public <T> T value(CacheObjectContext ctx, boolean cpy) { + return deserialize(); + } + + /** {@inheritDoc} */ + @Override public byte[] valueBytes(CacheObjectContext cacheCtx) throws IgniteCheckedException { + return ctx.marshaller().marshal(this); + } + + /** {@inheritDoc} */ + @Override public byte cacheObjectType() { + return TYPE_BINARY; + } + + /** {@inheritDoc} */ + @Override public boolean isPlatformType() { + return false; + } + + /** {@inheritDoc} */ + @Override public CacheObject prepareForCache(CacheObjectContext ctx) { + return this; + } + + /** {@inheritDoc} */ + @Override public void finishUnmarshal(CacheObjectContext ctx, ClassLoader ldr) throws IgniteCheckedException { + this.ctx = ((CacheObjectBinaryProcessorImpl)ctx.processor()).portableContext(); + } + + /** {@inheritDoc} */ + @Override public void prepareMarshal(CacheObjectContext ctx) throws IgniteCheckedException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public byte directType() { + return 119; + } + + /** {@inheritDoc} */ + @Override public byte fieldsCount() { + return 3; + } + + /** {@inheritDoc} */ + @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) { + writer.setBuffer(buf); + + if (!writer.isHeaderWritten()) { + if (!writer.writeHeader(directType(), fieldsCount())) + return false; + + writer.onHeaderWritten(); + } + + switch (writer.state()) { + case 0: + if (!writer.writeString("clsName", clsName)) + return false; + + writer.incrementState(); + + case 1: + if (!writer.writeInt("ord", ord)) + return false; + + writer.incrementState(); + + case 2: + if (!writer.writeInt("typeId", typeId)) + return false; + + writer.incrementState(); + + } + + return true; + } + + /** {@inheritDoc} */ + @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) { + reader.setBuffer(buf); + + if (!reader.beforeMessageRead()) + return false; + + switch (reader.state()) { + case 0: + clsName = reader.readString("clsName"); + + if (!reader.isLastRead()) + return false; + + reader.incrementState(); + + case 1: + ord = reader.readInt("ord"); + + if (!reader.isLastRead()) + return false; + + reader.incrementState(); + + case 2: + typeId = reader.readInt("typeId"); + + if (!reader.isLastRead()) + return false; + + reader.incrementState(); + + } + + return reader.afterMessageRead(BinaryEnumObjectImpl.class); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java new file mode 100644 index 0000000..962805d --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java @@ -0,0 +1,856 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.ignite.internal.binary; + +import org.apache.ignite.binary.BinaryObjectException; +import org.apache.ignite.internal.util.GridUnsafe; +import org.apache.ignite.internal.util.typedef.internal.U; +import sun.misc.Unsafe; + +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.util.Collection; +import java.util.Date; +import java.util.Map; +import java.util.UUID; + +/** + * Field accessor to speedup access. + */ +public abstract class BinaryFieldAccessor { + /** Field ID. */ + protected final int id; + + /** Mode. */ + protected final BinaryWriteMode mode; + + /** + * Create accessor for the field. + * + * @param field Field. + * @param id FIeld ID. + * @return Accessor. + */ + public static BinaryFieldAccessor create(Field field, int id) { + BinaryWriteMode mode = PortableUtils.mode(field.getType()); + + switch (mode) { + case P_BYTE: + return new BytePrimitiveAccessor(field, id); + + case P_BOOLEAN: + return new BooleanPrimitiveAccessor(field, id); + + case P_SHORT: + return new ShortPrimitiveAccessor(field, id); + + case P_CHAR: + return new CharPrimitiveAccessor(field, id); + + case P_INT: + return new IntPrimitiveAccessor(field, id); + + case P_LONG: + return new LongPrimitiveAccessor(field, id); + + case P_FLOAT: + return new FloatPrimitiveAccessor(field, id); + + case P_DOUBLE: + return new DoublePrimitiveAccessor(field, id); + + case BYTE: + case BOOLEAN: + case SHORT: + case CHAR: + case INT: + case LONG: + case FLOAT: + case DOUBLE: + case DECIMAL: + case STRING: + case UUID: + case DATE: + case TIMESTAMP: + case BYTE_ARR: + case SHORT_ARR: + case INT_ARR: + case LONG_ARR: + case FLOAT_ARR: + case DOUBLE_ARR: + case CHAR_ARR: + case BOOLEAN_ARR: + case DECIMAL_ARR: + case STRING_ARR: + case UUID_ARR: + case DATE_ARR: + case TIMESTAMP_ARR: + case ENUM_ARR: + case OBJECT_ARR: + case PORTABLE_OBJ: + case PORTABLE: + case EXTERNALIZABLE: + return new DefaultFinalClassAccessor(field, id, mode, false); + + default: + return new DefaultFinalClassAccessor(field, id, mode, !U.isFinal(field.getType())); + } + } + + /** + * Protected constructor. + * + * @param id Field ID. + * @param mode Mode; + */ + protected BinaryFieldAccessor(int id, BinaryWriteMode mode) { + assert id != 0; + assert mode != null; + + this.id = id; + this.mode = mode; + } + + /** + * Get mode. + * + * @return Mode. + */ + public BinaryWriteMode mode() { + return mode; + } + + /** + * Write field. + * + * @param obj Object. + * @param writer Writer. + * @throws BinaryObjectException If failed. + */ + public abstract void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException; + + /** + * Read field. + * + * @param obj Object. + * @param reader Reader. + * @throws BinaryObjectException If failed. + */ + public abstract void read(Object obj, BinaryReaderExImpl reader) throws BinaryObjectException; + + /** + * Base primitive field accessor. + */ + private static abstract class AbstractPrimitiveAccessor extends BinaryFieldAccessor { + /** Unsafe instance. */ + protected static final Unsafe UNSAFE = GridUnsafe.unsafe(); + + /** Offset. */ + protected final long offset; + + /** + * Constructor. + * + * @param field Field. + * @param id Field ID. + * @param mode Mode. + */ + protected AbstractPrimitiveAccessor(Field field, int id, BinaryWriteMode mode) { + super(id, mode); + + assert field != null; + + offset = UNSAFE.objectFieldOffset(field); + } + } + + /** + * Byte field accessor. + */ + private static class BytePrimitiveAccessor extends AbstractPrimitiveAccessor { + /** + * Constructor. + * + * @param field Field. + */ + public BytePrimitiveAccessor(Field field, int id) { + super(field, id, BinaryWriteMode.P_BYTE); + } + + /** {@inheritDoc} */ + @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { + writer.writeFieldIdNoSchemaUpdate(id); + + byte val = UNSAFE.getByte(obj, offset); + + writer.writeByteFieldPrimitive(val); + } + + /** {@inheritDoc} */ + @Override public void read(Object obj, BinaryReaderExImpl reader) throws BinaryObjectException { + byte val = reader.readByte(id); + + UNSAFE.putByte(obj, offset, val); + } + } + + /** + * Boolean field accessor. + */ + private static class BooleanPrimitiveAccessor extends AbstractPrimitiveAccessor { + /** + * Constructor. + * + * @param field Field. + */ + public BooleanPrimitiveAccessor(Field field, int id) { + super(field, id, BinaryWriteMode.P_BOOLEAN); + } + + /** {@inheritDoc} */ + @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { + writer.writeFieldIdNoSchemaUpdate(id); + + boolean val = UNSAFE.getBoolean(obj, offset); + + writer.writeBooleanFieldPrimitive(val); + } + + /** {@inheritDoc} */ + @Override public void read(Object obj, BinaryReaderExImpl reader) throws BinaryObjectException { + boolean val = reader.readBoolean(id); + + UNSAFE.putBoolean(obj, offset, val); + } + } + + /** + * Short field accessor. + */ + private static class ShortPrimitiveAccessor extends AbstractPrimitiveAccessor { + /** + * Constructor. + * + * @param field Field. + */ + public ShortPrimitiveAccessor(Field field, int id) { + super(field, id, BinaryWriteMode.P_SHORT); + } + + /** {@inheritDoc} */ + @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { + writer.writeFieldIdNoSchemaUpdate(id); + + short val = UNSAFE.getShort(obj, offset); + + writer.writeShortFieldPrimitive(val); + } + + /** {@inheritDoc} */ + @Override public void read(Object obj, BinaryReaderExImpl reader) throws BinaryObjectException { + short val = reader.readShort(id); + + UNSAFE.putShort(obj, offset, val); + } + } + + /** + * Char field accessor. + */ + private static class CharPrimitiveAccessor extends AbstractPrimitiveAccessor { + /** + * Constructor. + * + * @param field Field. + */ + public CharPrimitiveAccessor(Field field, int id) { + super(field, id, BinaryWriteMode.P_CHAR); + } + + /** {@inheritDoc} */ + @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { + writer.writeFieldIdNoSchemaUpdate(id); + + char val = UNSAFE.getChar(obj, offset); + + writer.writeCharFieldPrimitive(val); + } + + /** {@inheritDoc} */ + @Override public void read(Object obj, BinaryReaderExImpl reader) throws BinaryObjectException { + char val = reader.readChar(id); + + UNSAFE.putChar(obj, offset, val); + } + } + + /** + * Int field accessor. + */ + private static class IntPrimitiveAccessor extends AbstractPrimitiveAccessor { + /** + * Constructor. + * + * @param field Field. + */ + public IntPrimitiveAccessor(Field field, int id) { + super(field, id, BinaryWriteMode.P_INT); + } + + /** {@inheritDoc} */ + @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { + writer.writeFieldIdNoSchemaUpdate(id); + + int val = UNSAFE.getInt(obj, offset); + + writer.writeIntFieldPrimitive(val); + } + + /** {@inheritDoc} */ + @Override public void read(Object obj, BinaryReaderExImpl reader) throws BinaryObjectException { + int val = reader.readInt(id); + + UNSAFE.putInt(obj, offset, val); + } + } + + /** + * Long field accessor. + */ + private static class LongPrimitiveAccessor extends AbstractPrimitiveAccessor { + /** + * Constructor. + * + * @param field Field. + */ + public LongPrimitiveAccessor(Field field, int id) { + super(field, id, BinaryWriteMode.P_LONG); + } + + /** {@inheritDoc} */ + @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { + writer.writeFieldIdNoSchemaUpdate(id); + + long val = UNSAFE.getLong(obj, offset); + + writer.writeLongFieldPrimitive(val); + } + + /** {@inheritDoc} */ + @Override public void read(Object obj, BinaryReaderExImpl reader) throws BinaryObjectException { + long val = reader.readLong(id); + + UNSAFE.putLong(obj, offset, val); + } + } + + /** + * Float field accessor. + */ + private static class FloatPrimitiveAccessor extends AbstractPrimitiveAccessor { + /** + * Constructor. + * + * @param field Field. + */ + public FloatPrimitiveAccessor(Field field, int id) { + super(field, id, BinaryWriteMode.P_FLOAT); + } + + /** {@inheritDoc} */ + @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { + writer.writeFieldIdNoSchemaUpdate(id); + + float val = UNSAFE.getFloat(obj, offset); + + writer.writeFloatFieldPrimitive(val); + } + + /** {@inheritDoc} */ + @Override public void read(Object obj, BinaryReaderExImpl reader) throws BinaryObjectException { + float val = reader.readFloat(id); + + UNSAFE.putFloat(obj, offset, val); + } + } + + /** + * Double field accessor. + */ + private static class DoublePrimitiveAccessor extends AbstractPrimitiveAccessor { + /** + * Constructor. + * + * @param field Field. + */ + public DoublePrimitiveAccessor(Field field, int id) { + super(field, id, BinaryWriteMode.P_DOUBLE); + } + + /** {@inheritDoc} */ + @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { + writer.writeFieldIdNoSchemaUpdate(id); + + double val = UNSAFE.getDouble(obj, offset); + + writer.writeDoubleFieldPrimitive(val); + } + + /** {@inheritDoc} */ + @Override public void read(Object obj, BinaryReaderExImpl reader) throws BinaryObjectException { + double val = reader.readDouble(id); + + UNSAFE.putDouble(obj, offset, val); + } + } + + /** + * Default accessor. + */ + private static class DefaultFinalClassAccessor extends BinaryFieldAccessor { + /** Target field. */ + private final Field field; + + /** Dynamic accessor flag. */ + private final boolean dynamic; + + /** + * Constructor. + * + * @param field Field. + * @param id Field ID. + * @param mode Mode. + */ + DefaultFinalClassAccessor(Field field, int id, BinaryWriteMode mode, boolean dynamic) { + super(id, mode); + + assert field != null; + + this.field = field; + this.dynamic = dynamic; + } + + /** {@inheritDoc} */ + @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { + assert obj != null; + assert writer != null; + + writer.writeFieldIdNoSchemaUpdate(id); + + Object val; + + try { + val = field.get(obj); + } + catch (IllegalAccessException e) { + throw new BinaryObjectException("Failed to get value for field: " + field, e); + } + + switch (mode(val)) { + case BYTE: + writer.writeByteField((Byte) val); + + break; + + case SHORT: + writer.writeShortField((Short) val); + + break; + + case INT: + writer.writeIntField((Integer) val); + + break; + + case LONG: + writer.writeLongField((Long)val); + + break; + + case FLOAT: + writer.writeFloatField((Float)val); + + break; + + case DOUBLE: + writer.writeDoubleField((Double)val); + + break; + + case CHAR: + writer.writeCharField((Character)val); + + break; + + case BOOLEAN: + writer.writeBooleanField((Boolean)val); + + break; + + case DECIMAL: + writer.writeDecimalField((BigDecimal)val); + + break; + + case STRING: + writer.writeStringField((String)val); + + break; + + case UUID: + writer.writeUuidField((UUID)val); + + break; + + case DATE: + writer.writeDateField((Date)val); + + break; + + case TIMESTAMP: + writer.writeTimestampField((Timestamp)val); + + break; + + case BYTE_ARR: + writer.writeByteArrayField((byte[])val); + + break; + + case SHORT_ARR: + writer.writeShortArrayField((short[])val); + + break; + + case INT_ARR: + writer.writeIntArrayField((int[])val); + + break; + + case LONG_ARR: + writer.writeLongArrayField((long[])val); + + break; + + case FLOAT_ARR: + writer.writeFloatArrayField((float[])val); + + break; + + case DOUBLE_ARR: + writer.writeDoubleArrayField((double[])val); + + break; + + case CHAR_ARR: + writer.writeCharArrayField((char[])val); + + break; + + case BOOLEAN_ARR: + writer.writeBooleanArrayField((boolean[])val); + + break; + + case DECIMAL_ARR: + writer.writeDecimalArrayField((BigDecimal[])val); + + break; + + case STRING_ARR: + writer.writeStringArrayField((String[])val); + + break; + + case UUID_ARR: + writer.writeUuidArrayField((UUID[])val); + + break; + + case DATE_ARR: + writer.writeDateArrayField((Date[])val); + + break; + + case TIMESTAMP_ARR: + writer.writeTimestampArrayField((Timestamp[])val); + + break; + + case OBJECT_ARR: + writer.writeObjectArrayField((Object[])val); + + break; + + case COL: + writer.writeCollectionField((Collection<?>)val); + + break; + + case MAP: + writer.writeMapField((Map<?, ?>)val); + + break; + + case PORTABLE_OBJ: + writer.writePortableObjectField((BinaryObjectImpl)val); + + break; + + case ENUM: + writer.writeEnumField((Enum<?>)val); + + break; + + case ENUM_ARR: + writer.writeEnumArrayField((Object[])val); + + break; + + case PORTABLE: + case EXTERNALIZABLE: + case OBJECT: + writer.writeObjectField(val); + + break; + + case CLASS: + writer.writeClassField((Class)val); + + break; + + default: + assert false : "Invalid mode: " + mode; + } + } + + /** {@inheritDoc} */ + @Override public void read(Object obj, BinaryReaderExImpl reader) throws BinaryObjectException { + Object val = dynamic ? reader.readField(id) : readFixedType(reader); + + try { + if (val != null || !field.getType().isPrimitive()) + field.set(obj, val); + } + catch (IllegalAccessException e) { + throw new BinaryObjectException("Failed to set value for field: " + field, e); + } + } + + /** + * Reads fixed type from the given reader with flags validation. + * + * @param reader Reader to read from. + * @return Read value. + * @throws BinaryObjectException If failed to read value from the stream. + */ + protected Object readFixedType(BinaryReaderExImpl reader) throws BinaryObjectException { + Object val = null; + + switch (mode) { + case BYTE: + val = reader.readByteNullable(id); + + break; + + case SHORT: + val = reader.readShortNullable(id); + + break; + + case INT: + val = reader.readIntNullable(id); + + break; + + case LONG: + val = reader.readLongNullable(id); + + break; + + case FLOAT: + val = reader.readFloatNullable(id); + + break; + + case DOUBLE: + val = reader.readDoubleNullable(id); + + break; + + case CHAR: + val = reader.readCharNullable(id); + + break; + + case BOOLEAN: + val = reader.readBooleanNullable(id); + + break; + + case DECIMAL: + val = reader.readDecimal(id); + + break; + + case STRING: + val = reader.readString(id); + + break; + + case UUID: + val = reader.readUuid(id); + + break; + + case DATE: + val = reader.readDate(id); + + break; + + case TIMESTAMP: + val = reader.readTimestamp(id); + + break; + + case BYTE_ARR: + val = reader.readByteArray(id); + + break; + + case SHORT_ARR: + val = reader.readShortArray(id); + + break; + + case INT_ARR: + val = reader.readIntArray(id); + + break; + + case LONG_ARR: + val = reader.readLongArray(id); + + break; + + case FLOAT_ARR: + val = reader.readFloatArray(id); + + break; + + case DOUBLE_ARR: + val = reader.readDoubleArray(id); + + break; + + case CHAR_ARR: + val = reader.readCharArray(id); + + break; + + case BOOLEAN_ARR: + val = reader.readBooleanArray(id); + + break; + + case DECIMAL_ARR: + val = reader.readDecimalArray(id); + + break; + + case STRING_ARR: + val = reader.readStringArray(id); + + break; + + case UUID_ARR: + val = reader.readUuidArray(id); + + break; + + case DATE_ARR: + val = reader.readDateArray(id); + + break; + + case TIMESTAMP_ARR: + val = reader.readTimestampArray(id); + + break; + + case OBJECT_ARR: + val = reader.readObjectArray(id); + + break; + + case COL: + val = reader.readCollection(id, null); + + break; + + case MAP: + val = reader.readMap(id, null); + + break; + + case PORTABLE_OBJ: + val = reader.readPortableObject(id); + + break; + + case ENUM: + val = reader.readEnum(id, field.getType()); + + break; + + case ENUM_ARR: + val = reader.readEnumArray(id, field.getType().getComponentType()); + + break; + + case PORTABLE: + case EXTERNALIZABLE: + case OBJECT: + val = reader.readObject(id); + + break; + + case CLASS: + val = reader.readClass(id); + + break; + + default: + assert false : "Invalid mode: " + mode; + } + + return val; + } + + /** + * @param val Val to get write mode for. + * @return Write mode. + */ + protected BinaryWriteMode mode(Object val) { + return dynamic ? + val == null ? BinaryWriteMode.OBJECT : PortableUtils.mode(val.getClass()) : + mode; + } + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldImpl.java new file mode 100644 index 0000000..36fde02 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldImpl.java @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.ignite.internal.binary; + +import org.apache.ignite.binary.BinaryObjectException; +import org.apache.ignite.internal.util.tostring.GridToStringExclude; +import org.apache.ignite.internal.util.typedef.internal.S; +import org.apache.ignite.binary.BinaryObject; +import org.apache.ignite.binary.BinaryField; + +/** + * Implementation of portable field descriptor. + */ +public class BinaryFieldImpl implements BinaryField { + /** Type ID. */ + private final int typeId; + + /** Well-known object schemas. */ + @GridToStringExclude + private final PortableSchemaRegistry schemas; + + /** Field name. */ + private final String fieldName; + + /** Pre-calculated field ID. */ + private final int fieldId; + + /** + * Constructor. + * + * @param schemas Schemas. + * @param fieldName Field name. + * @param fieldId Field ID. + */ + public BinaryFieldImpl(int typeId, PortableSchemaRegistry schemas, String fieldName, int fieldId) { + assert typeId != 0; + assert schemas != null; + assert fieldName != null; + assert fieldId != 0; + + this.typeId = typeId; + this.schemas = schemas; + this.fieldName = fieldName; + this.fieldId = fieldId; + } + + /** {@inheritDoc} */ + @Override public String name() { + return fieldName; + } + + /** {@inheritDoc} */ + @Override public boolean exists(BinaryObject obj) { + BinaryObjectExImpl obj0 = (BinaryObjectExImpl)obj; + + return fieldOrder(obj0) != PortableSchema.ORDER_NOT_FOUND; + } + + /** {@inheritDoc} */ + @SuppressWarnings("unchecked") + @Override public <T> T value(BinaryObject obj) { + BinaryObjectExImpl obj0 = (BinaryObjectExImpl)obj; + + int order = fieldOrder(obj0); + + return order != PortableSchema.ORDER_NOT_FOUND ? (T)obj0.fieldByOrder(order) : null; + } + + /** + * Get relative field offset. + * + * @param obj Object. + * @return Field offset. + */ + private int fieldOrder(BinaryObjectExImpl obj) { + if (typeId != obj.typeId()) { + throw new BinaryObjectException("Failed to get field because type ID of passed object differs" + + " from type ID this " + BinaryField.class.getSimpleName() + " belongs to [expected=" + typeId + + ", actual=" + obj.typeId() + ']'); + } + + int schemaId = obj.schemaId(); + + PortableSchema schema = schemas.schema(schemaId); + + if (schema == null) { + schema = obj.createSchema(); + + schemas.addSchema(schemaId, schema); + } + + assert schema != null; + + return schema.order(fieldId); + } + + /** {@inheritDoc} */ + @Override public String toString() { + return S.toString(BinaryFieldImpl.class, this); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryInternalIdMapper.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryInternalIdMapper.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryInternalIdMapper.java new file mode 100644 index 0000000..14d7d6f --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryInternalIdMapper.java @@ -0,0 +1,161 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.ignite.internal.binary; + +import org.apache.ignite.binary.BinaryIdMapper; +import org.apache.ignite.binary.BinaryObjectException; +import org.jetbrains.annotations.Nullable; + +/** + * Internal ID mapper. Mimics ID mapper interface, but provides default implementation and offers slightly better + * performance on micro-level in default case because it doesn't need virtual calls. + */ +public class BinaryInternalIdMapper implements BinaryIdMapper { + /** Maximum lower-case character. */ + private static final char MAX_LOWER_CASE_CHAR = 0x7e; + + /** Cached lower-case characters. */ + private static final char[] LOWER_CASE_CHARS; + + /** Default implementation. */ + private static final BinaryInternalIdMapper DFLT = new BinaryInternalIdMapper(); + + /** + * Static initializer. + */ + static { + LOWER_CASE_CHARS = new char[MAX_LOWER_CASE_CHAR + 1]; + + for (char c = 0; c <= MAX_LOWER_CASE_CHAR; c++) + LOWER_CASE_CHARS[c] = Character.toLowerCase(c); + } + + /** + * Get default instance. + * + * @return Default instance. + */ + public static BinaryInternalIdMapper defaultInstance() { + return DFLT; + } + + /** + * Create internal mapper. + * + * @param mapper Public mapper. + * @return Internal mapper. + */ + public static BinaryInternalIdMapper create(@Nullable BinaryIdMapper mapper) { + return mapper == null ? DFLT : new Wrapper(mapper); + } + + /** + * Private constructor. + */ + protected BinaryInternalIdMapper() { + // No-op. + } + + /** + * Get type ID. + * + * @param typeName Type name. + * @return Type ID. + */ + public int typeId(String typeName) { + assert typeName != null; + + return lowerCaseHashCode(typeName, true); + } + + /** + * Get field ID. + * + * @param typeId Type ID. + * @param fieldName Field name. + * @return Field ID. + */ + public int fieldId(int typeId, String fieldName) { + assert fieldName != null; + + return lowerCaseHashCode(fieldName, false); + } + + /** + * Routine to calculate string hash code an + * + * @param str String. + * @param type {@code True} if this is type name, false otherwise. + * @return Hash code for given string converted to lower case. + */ + private static int lowerCaseHashCode(String str, boolean type) { + int len = str.length(); + + int h = 0; + + for (int i = 0; i < len; i++) { + int c = str.charAt(i); + + c = c <= MAX_LOWER_CASE_CHAR ? LOWER_CASE_CHARS[c] : Character.toLowerCase(c); + + h = 31 * h + c; + } + + if (h != 0) + return h; + else { + String what = type ? "type" : "field"; + + throw new BinaryObjectException("Default binary ID mapper resolved " + what + " ID to zero " + + "(either change " + what + "'s name or use custom ID mapper) [name=" + str + ']'); + } + } + + /** + * Wrapping ID mapper. + */ + private static class Wrapper extends BinaryInternalIdMapper { + /** Delegate. */ + private final BinaryIdMapper mapper; + + /** + * Constructor. + * + * @param mapper Delegate. + */ + private Wrapper(BinaryIdMapper mapper) { + assert mapper != null; + + this.mapper = mapper; + } + + /** {@inheritDoc} */ + @Override public int typeId(String typeName) { + int id = mapper.typeId(typeName); + + return id != 0 ? id : super.typeId(typeName); + } + + /** {@inheritDoc} */ + @Override public int fieldId(int typeId, String fieldName) { + int id = mapper.fieldId(typeId, fieldName); + + return id != 0 ? id : super.fieldId(typeId, fieldName); + } + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryMarshaller.java new file mode 100644 index 0000000..13435e6 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryMarshaller.java @@ -0,0 +1,142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.ignite.internal.binary; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.binary.BinaryObjectException; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.util.GridUnsafe; +import org.apache.ignite.marshaller.AbstractMarshaller; +import org.apache.ignite.marshaller.MarshallerContext; +import org.jetbrains.annotations.Nullable; +import sun.misc.Unsafe; + +/** + * Implementation of {@link org.apache.ignite.marshaller.Marshaller} that lets to serialize and deserialize all objects + * in the binary format. + */ +public class BinaryMarshaller extends AbstractMarshaller { + /** */ + private GridPortableMarshaller impl; + + /** + * Checks whether {@code BinaryMarshaller} is able to work on the current JVM. + * <p> + * As long as {@code BinaryMarshaller} uses JVM-private API, which is not guaranteed + * to be available on all JVM, this method should be called to ensure marshaller could work properly. + * <p> + * Result of this method is automatically checked in constructor. + * + * @return {@code true} if {@code BinaryMarshaller} can work on the current JVM or + * {@code false} if it can't. + */ + @SuppressWarnings({"TypeParameterExtendsFinalClass", "ErrorNotRethrown"}) + public static boolean available() { + try { + Unsafe unsafe = GridUnsafe.unsafe(); + + Class<? extends Unsafe> unsafeCls = unsafe.getClass(); + + unsafeCls.getMethod("allocateInstance", Class.class); + unsafeCls.getMethod("copyMemory", Object.class, long.class, Object.class, long.class, long.class); + + return true; + } + catch (Exception ignored) { + return false; + } + catch (NoClassDefFoundError ignored) { + return false; + } + } + + /** + * Returns currently set {@link MarshallerContext}. + * + * @return Marshaller context. + */ + public MarshallerContext getContext() { + return ctx; + } + + /** + * Sets {@link PortableContext}. + * <p/> + * @param ctx Portable context. + */ + @SuppressWarnings("UnusedDeclaration") + private void setPortableContext(PortableContext ctx, IgniteConfiguration cfg) { + ctx.configure(this, cfg); + + impl = new GridPortableMarshaller(ctx); + } + + /** {@inheritDoc} */ + @Override public byte[] marshal(@Nullable Object obj) throws IgniteCheckedException { + return impl.marshal(obj); + } + + /** {@inheritDoc} */ + @Override public void marshal(@Nullable Object obj, OutputStream out) throws IgniteCheckedException { + byte[] arr = marshal(obj); + + try { + out.write(arr); + } + catch (IOException e) { + throw new BinaryObjectException("Failed to marshal the object: " + obj, e); + } + } + + /** {@inheritDoc} */ + @Override public <T> T unmarshal(byte[] bytes, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { + return impl.deserialize(bytes, clsLdr); + } + + /** {@inheritDoc} */ + @Override public <T> T unmarshal(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { + ByteArrayOutputStream buf = new ByteArrayOutputStream(); + + // we have to fully read the InputStream because GridPortableMarshaller requires support of a method that + // returns number of bytes remaining. + try { + byte[] arr = new byte[4096]; + + int cnt; + + while ((cnt = in.read(arr)) != -1) + buf.write(arr, 0, cnt); + + buf.flush(); + + return impl.deserialize(buf.toByteArray(), clsLdr); + } + catch (IOException e) { + throw new BinaryObjectException("Failed to unmarshal the object from InputStream", e); + } + } + + /** {@inheritDoc} */ + @Override public void onUndeploy(ClassLoader ldr) { + impl.context().onUndeploy(ldr); + } +}
