package org.jfaster.mango.plugin.stats; import com.google.common.collect.Lists; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.jfaster.mango.annotation.*; import org.jfaster.mango.operator.Mango; import org.jfaster.mango.operator.cache.Day; import org.jfaster.mango.operator.cache.LocalCacheHandler; import org.jfaster.mango.sharding.ModTenTableShardingStrategy; import org.jfaster.mango.support.DataSourceConfig; import org.jfaster.mango.support.Randoms; import org.jfaster.mango.support.Table; import org.jfaster.mango.support.model4table.Msg; import org.jfaster.mango.support.model4table.User; import javax.sql.DataSource; import java.util.*; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * @author ash */ public class HttpServer { private final static int PORT = 8080; public static void main(String[] args) throws Exception { init(); Server server = new Server(PORT); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); server.setHandler(context); ServletHolder servlet = new ServletHolder(new MangoStatServlet()); //servlet.setInitParameter("key", "9527"); context.addServlet(servlet, "/mango-stat"); server.start(); server.join(); } private static void init() throws Exception { DataSource ds = DataSourceConfig.getDataSource(); Table.USER.load(ds); Table.MSG_PARTITION.load(ds); Mango mango = Mango.newInstance(ds); mango.setLazyInit(true); mango.setCacheHandler(new LocalCacheHandler() { void sleep() { try { Thread.sleep(10); } catch (InterruptedException e) { } } @Override public Object get(String key) { sleep(); return super.get(key); } @Override public Map<String, Object> getBulk(Set<String> keys) { sleep(); return super.getBulk(keys); } @Override public void set(String key, Object value, int expires) { sleep(); super.set(key, value, expires); } @Override public void add(String key, Object value, int expires) { sleep(); super.add(key, value, expires); } @Override public void batchDelete(Set<String> keys) { sleep(); super.batchDelete(keys); } @Override public void delete(String key) { sleep(); super.delete(key); } }); final UserDao userDao = mango.create(UserDao.class); final MsgDao msgDao = mango.create(MsgDao.class); int id = 1; userDao.getIntegerId(id); userDao.getName(id); userDao.getBoolObjGender(id); int id1 = userDao.insertUser(createRandomUser()); int id2 = userDao.insertUser(createRandomUser()); List<Integer> ids = Lists.newArrayList(id1, id2); userDao.getUser(id1); userDao.getUser(id1); userDao.getUsers(ids); userDao.getUsers(ids); userDao.delete(id1); userDao.getUser(id1); userDao.delete(id1); userDao.getUsers(ids); userDao.deletes(ids); userDao.deletes2(ids); ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); executor.scheduleAtFixedRate(new Runnable() { @Override public void run() { int id = 1; userDao.getIntegerId(id); userDao.getName(id); userDao.getBoolObjGender(id); for (int i = 0; i < 1500; i++) { userDao.getLongObjMoney(id, null, null); msgDao.getMsgs(id); } } }, 0, 10, TimeUnit.SECONDS); } @DB(table = "user") @Sharding @Cache(prefix = "user", expire = Day.class, cacheNullObject = true) static interface UserDao { @CacheIgnored @SQL("select id from #table where id = :1") public Integer getIntegerId(int id); @CacheIgnored @SQL("select name from #table where id = :1") public String getName(int id); @CacheIgnored @SQL("select gender from #table where id = :1") public Boolean getBoolObjGender(int id); @CacheIgnored @SQL("select money from #table where id = :1") public Long getLongObjMoney(int id, String str, List<User> users); @SQL("delete from #table where id = :1") public boolean delete(@CacheBy int id); @SQL("delete from #table where id = :1") public void deletes(@CacheBy List<Integer> ids); @SQL("delete from #table where id in (:1)") public void deletes2(@CacheBy List<Integer> ids); @SQL("select id, name, age, gender, money, update_time from #table where id = :1") public User getUser(@CacheBy int id); @SQL("select id, name, age, gender, money, update_time from #table where id in (:1)") public List<User> getUsers(@CacheBy List<Integer> ids); @ReturnGeneratedId @CacheIgnored @SQL("insert into user(name, age, gender, money, update_time) " + "values(:1.name, :1.age, :1.gender, :1.money, :1.updateTime)") public int insertUser(User user); } @DB(table = "msg") @Sharding(tableShardingStrategy = ModTenTableShardingStrategy.class) interface MsgDao { @SQL("select id, uid, content from #table where uid=:1") public List<Msg> getMsgs(@ShardingBy int uid); } private static User createRandomUser() { Random r = new Random(); String name = Randoms.randomString(20); int age = r.nextInt(200); boolean gender = r.nextBoolean(); long money = r.nextInt(1000000); Date date = new Date(); User user = new User(name, age, gender, money, date); return user; } }