/* * @(#)ShardedUUIDGenerator.java 2012-8-1 下午10:00:00 * * Copyright (c) 2011-2012 Makersoft.org all rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * */ package org.makersoft.shards.id.uuid; import java.io.Serializable; import org.apache.ibatis.session.SqlSession; import org.makersoft.shards.ShardId; import org.makersoft.shards.id.IdGenerator; import org.makersoft.shards.session.impl.ShardedSqlSessionImpl; import org.makersoft.shards.utils.Assert; /** * 32位UUID */ public class ShardedUUIDGenerator extends UUIDHexGenerator implements IdGenerator { // private static String ZERO_STRING = "00000000000000000000000000000000"; // private static String ID_TYPE_PROPERTY = "sharded-uuid-type"; private int getShardId() { ShardId shardId = ShardedSqlSessionImpl.getCurrentSubgraphShardId(); Assert.notNull(shardId); return Integer.valueOf(shardId.getId()); } @Override public Serializable generate(SqlSession session, Object object) { String id = new StringBuilder(32).append(format((short) getShardId())) .append(format(getIP())) .append(format((short) (getJVM() >>> 16))) .append(format(getHiTime())) .append(format(getLoTime())) .append(format(getCount())).toString(); return id; } @Override public ShardId extractShardId(Serializable identifier) { String hexId = (String) identifier; return new ShardId(Integer.decode("0x" + hexId.substring(0, 4))); } public static void main(String[] args) throws Exception { ShardedSqlSessionImpl.setCurrentSubgraphShardId(new ShardId(0)); IdGenerator gen = new ShardedUUIDGenerator(); IdGenerator gen2 = new ShardedUUIDGenerator(); for (int i = 0; i < Integer.MAX_VALUE; i++) { String id = (String) gen.generate(null, null); System.out.println(id); String id2 = (String) gen2.generate(null, null); System.out.println(id2); } } }