Merge pull request #909 from minwoo-jung/issue-762

Issue 762
This commit is contained in:
Minwoo Jung
2015-09-02 15:49:34 +09:00
15 changed files with 483 additions and 79 deletions
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="com.navercorp.pinpoint.web.dao.memory" />
</beans>
@@ -24,6 +24,8 @@ import com.navercorp.pinpoint.web.vo.User;
*/
public interface UserDao {
void dropAndCreateUserTable();
void insertUser(User user);
void inserUserList(List<User> users);
@@ -42,4 +44,5 @@ public interface UserDao {
}
@@ -0,0 +1,91 @@
/*
* Copyright 2014 NAVER Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.navercorp.pinpoint.web.dao.memory;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.stereotype.Repository;
import com.navercorp.pinpoint.web.alarm.vo.Rule;
import com.navercorp.pinpoint.web.dao.AlarmDao;
/**
* @author minwoo.jung
*/
@Repository
public class MemoryAlarmDao implements AlarmDao {
private final Map<String, Rule> alarmRule = new ConcurrentHashMap<String, Rule>();
private final AtomicInteger ruleIdGenerator = new AtomicInteger();
@Override
public String insertRule(Rule rule) {
String ruleId = String.valueOf(ruleIdGenerator.getAndIncrement());
rule.setRuleId(ruleId);
alarmRule.put(ruleId, rule);
return rule.getRuleId();
}
@Override
public void deleteRule(Rule rule) {
alarmRule.remove(rule.getRuleId());
}
@Override
public void deleteRuleByUserGroupId(String userGroupId) {
for (Entry<String, Rule> entry : alarmRule.entrySet()) {
if (entry.getValue().getUserGroupId().equals(userGroupId)) {
alarmRule.remove(entry.getKey());
}
}
}
@Override
public List<Rule> selectRuleByUserGroupId(String userGroupId) {
List<Rule> ruleList = new LinkedList<>();
for (Entry<String, Rule> entry : alarmRule.entrySet()) {
if (entry.getValue().getUserGroupId().equals(userGroupId)) {
ruleList.add(entry.getValue());
}
}
return ruleList;
}
@Override
public List<Rule> selectRuleByApplicationId(String applicationId) {
List<Rule> ruleList = new LinkedList<>();
for (Entry<String, Rule> entry : alarmRule.entrySet()) {
if (entry.getValue().getApplicationId().equals(applicationId)) {
alarmRule.remove(entry.getKey());
}
}
return ruleList;
}
@Override
public void updateRule(Rule rule) {
alarmRule.put(rule.getRuleId(), rule);
}
}
@@ -0,0 +1,106 @@
/*
* Copyright 2014 NAVER Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.navercorp.pinpoint.web.dao.memory;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.stereotype.Repository;
import com.navercorp.pinpoint.web.dao.UserDao;
import com.navercorp.pinpoint.web.vo.User;
/**
* @author minwoo.jung
*/
@Repository
public class MemoryUserDao implements UserDao {
private final Map<String, User> users = new ConcurrentHashMap<String, User>();
private final AtomicInteger userNumGenerator = new AtomicInteger();
@Override
public void insertUser(User user) {
String userNumber = String.valueOf(userNumGenerator.getAndIncrement());
user.setNumber(userNumber);
users.put(user.getUserId(), user);
}
@Override
public void inserUserList(List<User> users) {
for (User user : users) {
String userNumber = String.valueOf(userNumGenerator.getAndIncrement());
user.setNumber(userNumber);
this.users.put(user.getUserId(), user);
}
}
@Override
public void deleteUser(User user) {
users.remove(user.getUserId());
}
@Override
public List<User> selectUser() {
return new ArrayList<>(users.values());
}
@Override
public void updateUser(User user) {
users.put(user.getUserId(), user);
}
@Override
public User selectUserByUserId(String userId) {
return users.get(userId);
}
@Override
public List<User> selectUserByDepartment(String department) {
List<User> userList = new LinkedList<>();
for (User user : users.values()) {
if (department.equals(user.getDepartment())) {
userList.add(user);
}
}
return userList;
}
@Override
public List<User> selectUserByUserName(String userName) {
List<User> userList = new LinkedList<>();
for (User user : users.values()) {
if (userName.equals(user.getName())) {
userList.add(user);
}
}
return userList;
}
@Override
public void dropAndCreateUserTable() {
users.clear();
userNumGenerator.lazySet(1);
}
}
@@ -0,0 +1,173 @@
/*
* Copyright 2014 NAVER Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.navercorp.pinpoint.web.dao.memory;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.navercorp.pinpoint.web.dao.UserDao;
import com.navercorp.pinpoint.web.dao.UserGroupDao;
import com.navercorp.pinpoint.web.vo.User;
import com.navercorp.pinpoint.web.vo.UserGroup;
import com.navercorp.pinpoint.web.vo.UserGroupMember;
/**
* @author minwoo.jung
*/
@Repository
public class MemoryUserGroupDao implements UserGroupDao {
private final Map<String, UserGroup> userGroups = new ConcurrentHashMap<String, UserGroup>();
private final Map<String, UserGroupMember> userGroupMembers = new ConcurrentHashMap<String, UserGroupMember>();
private final AtomicInteger userGroupNumGenerator = new AtomicInteger();
private final AtomicInteger userGroupMemNumGenerator = new AtomicInteger();
@Autowired
UserDao userDao;
@Override
public String createUserGroup(UserGroup userGroup) {
String userGroupNumber = String.valueOf(userGroupNumGenerator.getAndIncrement());
userGroup.setNumber(userGroupNumber);
userGroups.put(userGroupNumber, userGroup);
return userGroup.getNumber();
}
@Override
public List<UserGroup> selectUserGroup() {
return new ArrayList<>(userGroups.values());
}
@Override
public void updateUserGroup(UserGroup userGroup) {
userGroups.put(userGroup.getNumber(), userGroup);
}
@Override
public void deleteUserGroup(UserGroup userGroup) {
for(UserGroup ug : userGroups.values()) {
if (ug.getId().equals(userGroup.getId())) {
userGroups.remove(ug.getNumber());
break;
}
}
}
@Override
public void insertMember(UserGroupMember userGroupMember) {
String memberNum = String.valueOf(userGroupMemNumGenerator.getAndIncrement());
userGroupMember.setNumber(memberNum);
userGroupMembers.put(memberNum, userGroupMember);
}
@Override
public void deleteMember(UserGroupMember userGroupMember) {
for (UserGroupMember member : userGroupMembers.values()) {
if (member.getUserGroupId().equals(userGroupMember.getUserGroupId()) && member.getMemberId().equals(userGroupMember.getMemberId())) {
userGroupMembers.remove(member.getNumber());
break;
}
}
}
@Override
public List<UserGroupMember> selectMember(String userGroupId) {
List<UserGroupMember> userGroupMemberList = new LinkedList<>();
for (UserGroupMember member : userGroupMembers.values()) {
if (member.getUserGroupId().equals(userGroupId)) {
userGroupMemberList.add(member);
}
}
return userGroupMemberList;
}
@Override
public void updateMember(UserGroupMember userGroupMember) {
userGroupMembers.put(userGroupMember.getNumber(), userGroupMember);
}
@Override
public void deleteMemberByUserGroupId(String userGroupId) {
for (UserGroupMember member : userGroupMembers.values()) {
if (member.getUserGroupId().equals(userGroupId)) {
userGroupMembers.remove(userGroupId);
}
}
}
@Override
public List<String> selectPhoneNumberOfMember(String userGroupId) {
List<UserGroupMember> userGroupMemberList = new LinkedList<>();
for (UserGroupMember member : userGroupMembers.values()) {
if (member.getUserGroupId().equals(userGroupId)) {
userGroupMemberList.add(member);
}
}
List<String> phoneNumbers = new LinkedList<>();
for (UserGroupMember member : userGroupMemberList) {
User user = userDao.selectUserByUserId(member.getMemberId());
phoneNumbers.add(user.getPhoneNumber());
}
return phoneNumbers;
}
@Override
public List<String> selectEmailOfMember(String userGroupId) {
List<UserGroupMember> userGroupMemberList = new LinkedList<>();
for (UserGroupMember member : userGroupMembers.values()) {
if (member.getUserGroupId().equals(userGroupId)) {
userGroupMemberList.add(member);
}
}
List<String> emails = new LinkedList<>();
for (UserGroupMember member : userGroupMemberList) {
User user = userDao.selectUserByUserId(member.getMemberId());
emails.add(user.getEmail());
}
return emails;
}
@Override
public void updateUserGroupIdOfMember(UserGroup userGroup) {
UserGroup group = userGroups.get(userGroup.getNumber());
for (UserGroupMember member : userGroupMembers.values()) {
if (member.getUserGroupId().equals(group.getId())) {
member.setUserGroupId(userGroup.getId());
}
}
}
}
@@ -77,4 +77,10 @@ public class MysqlUserDao implements UserDao {
public List<User> selectUserByUserName(String userName) {
return sqlSessionTemplate.selectList(NAMESPACE + "selectUserByUserName", userName);
}
@Override
public void dropAndCreateUserTable() {
sqlSessionTemplate.selectOne(NAMESPACE + "dropAndCreateUserTable");
}
}
@@ -78,7 +78,7 @@ public class MysqlUserGroupDao implements UserGroupDao {
@Override
public void updateMember(UserGroupMember userGroupMember) {
sqlSessionTemplate.delete(NAMESPACE + "updateMember", userGroupMember);
sqlSessionTemplate.update(NAMESPACE + "updateMember", userGroupMember);
}
@Override
@@ -61,7 +61,6 @@ public class UserGroupServiceImpl implements UserGroupService {
@Override
public void deleteMember(UserGroupMember userGroupMember) {
userGroupDao.deleteMember(userGroupMember);
}
@Override
@@ -24,6 +24,8 @@ import com.navercorp.pinpoint.web.vo.User;
*/
public interface UserService {
void dropAndCreateUserTable();
void insertUser(User user);
void deleteUser(User user);
@@ -68,4 +68,9 @@ public class UserServiceImpl implements UserService {
return userDao.selectUserByDepartment(department);
}
@Override
public void dropAndCreateUserTable() {
userDao.dropAndCreateUserTable();
}
}
@@ -3,7 +3,6 @@ package com.navercorp.pinpoint.web.vo;
public class UserGroupMember {
private String number;
private String userGroupId;
private String memberId;
private String name;
@@ -1,75 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
">
<!-- Transaction manager for a single JDBC DataSource -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="select*" read-only="true" />
<tx:method name="read*" read-only="true" />
<tx:method name="get*" read-only="true" />
<tx:method name="view*"/>
<tx:method name="list*"/>
<tx:method name="add*"/>
<tx:method name="create*"/>
<tx:method name="delete*"/>
<tx:method name="update*"/>
</tx:attributes>
</tx:advice>
<!-- SqlsessionFactory setup for MyBatis Database Layer -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- mybatis basic config -->
<property name="configLocation" value="classpath:/mybatis-config.xml"/>
<!-- typeAliases -->
<property name="typeAliasesPackage" value="com.navercorp.pinpoint.web.alarm.vo" />
<!-- setting the location of mapper -->
<property name="mapperLocations" value="classpath:/mapper/*Mapper.xml"/>
<!-- set "true" in order to catch the errors of declaration of statement more quickly -->
<property name="failFast" value="true"/>
<property name="plugins">
<list>
<!-- use the patch version because of mybatis 3.2's incompatibility-->
<bean class="com.navercorp.pinpoint.web.dao.ibatis.BindingLogPlugin32"/>
</list>
</property>
</bean>
<!-- in case of using interface mapper
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.navercorp.pinpoint.web.mapper.mysql" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>
<!-- setting of executorType for batch -->
<bean id="batchSqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
<constructor-arg index="1" value="BATCH"/>
</bean>
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager"/>
</bean>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="com.navercorp.pinpoint.web.dao.mysql" />
<!-- Transaction manager for a single JDBC DataSource -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="select*" read-only="true" />
<tx:method name="read*" read-only="true" />
<tx:method name="get*" read-only="true" />
<tx:method name="view*"/>
<tx:method name="list*"/>
<tx:method name="add*"/>
<tx:method name="create*"/>
<tx:method name="delete*"/>
<tx:method name="update*"/>
</tx:attributes>
</tx:advice>
<!-- SqlsessionFactory setup for MyBatis Database Layer -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- mybatis basic config -->
<property name="configLocation" value="classpath:/mybatis-config.xml"/>
<!-- typeAliases -->
<property name="typeAliasesPackage" value="com.navercorp.pinpoint.web.alarm.vo" />
<!-- setting the location of mapper -->
<property name="mapperLocations" value="classpath:/mapper/*Mapper.xml"/>
<!-- set "true" in order to catch the errors of declaration of statement more quickly -->
<property name="failFast" value="true"/>
<property name="plugins">
<list>
<!-- use the patch version because of mybatis 3.2's incompatibility-->
<bean class="com.navercorp.pinpoint.web.dao.ibatis.BindingLogPlugin32"/>
</list>
</property>
</bean>
<!-- in case of using interface mapper
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.navercorp.pinpoint.web.mapper.mysql" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>
<!-- setting of executorType for batch -->
<bean id="batchSqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
<constructor-arg index="1" value="BATCH"/>
</bean>
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager"/>
</bean>
</beans>
@@ -24,7 +24,6 @@
-->
<context:component-scan base-package="com.navercorp.pinpoint.web.dao.hbase,
com.navercorp.pinpoint.web.dao.mysql,
com.navercorp.pinpoint.web.service,
com.navercorp.pinpoint.web.mapper,
com.navercorp.pinpoint.web.filter,
@@ -46,7 +46,7 @@
<select id="selectMemberList" resultType="UserGroupMember">
SELECT a.user_group_id, a.member_id, b.name, b.department
FROM user_group_member a
INNER JOIN user b ON a.member_id = b.user_id
INNER JOIN puser b ON a.member_id = b.user_id
WHERE a.user_group_id = #{userGroupId}
</select>
@@ -4,6 +4,10 @@
<mapper namespace="com.navercorp.pinpoint.web.dao.UserDao">
<select id="dropAndCreateUserTable">
TRUNCATE puser;
</select>
<insert id="insertUser" parameterType="User">
INSERT INTO puser (user_id, name, department, phonenumber, email)
VALUES (#{userId}, #{name}, #{department}, #{phoneNumber}, #{email})