hibernateTemplate 跟 存储过程 执行 先后问题

sdojqy1122 2015-02-07 10:32:02
主要代码逻辑如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:WebContent/WEB-INF/applicationContext.xml" })
public class SecrEnvImportUtil {
@Resource(name = "userService")
private UserService userService;
@Resource
private DepartmentUserService departmentUserService;
@Resource
private DepartmentService deptService;
@Resource(name = "actionservice")
private ActionService permissionService;
@Resource(name = "roleservice")
private RoleService roleService;
@Resource(name = "sessionFactory")
private SessionFactory sessionFactory;

@Test
@Rollback(false)
public void addUserRole() {
ResourceBundle rb = ResourceBundle.getBundle("roleImportConfig");
String roleType = null;
String currentConfig = null;
try {
roleType = new String(rb.getString("roleType").getBytes("ISO-8859-1"), "UTF-8");
currentConfig = new String(rb.getString("currentConfig").getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}

String[] aRoleTypes = roleType.split(",");
JSONArray json = JSONArray.fromObject(currentConfig);
RoleDataConfig[] dataConfig = (RoleDataConfig[]) JSONArray.toArray(json, RoleDataConfig.class);

System.out.println(dataConfig[0]);

for (RoleDataConfig rdc : dataConfig) {
if ("role".equals(rdc.getType())) {
List<String> roleTypes = new ArrayList<String>();
for (int i = 0; i < rdc.getRoleType().length(); i++) {
if ('1' == rdc.getRoleType().charAt(i)) {
roleTypes.add(aRoleTypes[i].trim());
}
}
rdc.setRoleTypes(roleTypes);
}
}

String dataFileName = "roleDataContainer.txt";

InputStreamReader isr = null;
InputStream is = this.getClass().getClassLoader().getResourceAsStream("/"+dataFileName);
try {
isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {

addOneUserRole(line, dataConfig);
}
} catch (IOException e) {
e.printStackTrace();
}
}

public void addOneUserRole(String userRoleData, RoleDataConfig[] dataConfig) {

String[] aUserRoleInfo = userRoleData.split("[\\s]+");

for (int i = 0; i < aUserRoleInfo.length; i++) {
aUserRoleInfo[i] = aUserRoleInfo[i].trim();
}

Integer currentPost = 0;
for (RoleDataConfig rdc : dataConfig) {
rdc.setData(Arrays.copyOfRange(aUserRoleInfo, currentPost, currentPost + rdc.getLength()));
currentPost += rdc.getLength();
}

UserBean userBean = null;
RoleDataConfig rdc = dataConfig[0];
// 检查用户是否存在,并自动添加
String[] aUser = rdc.getData();
System.out.println(Arrays.asList(aUser));
userBean = addUserInfo(aUser);

for (int i = 1; i < dataConfig.length; i++) {
RoleDataConfig rdc1 = dataConfig[i];
if (!"role".equals(rdc1.getType())) {
continue;
}
addUserOneRole(rdc1, userBean);
}

}

public void addUserOneRole(RoleDataConfig rdConfig, UserBean userBean) {
RoleBean rb = queryRole(rdConfig);

if (rb == null) {
System.out.println("后台运行异常:NUMBER---" + userBean.getNumb());
System.exit(0);
}
//调用存储过程,保存用户跟角色的关系
userService.LinkUserToRole(userBean, rb);
System.out.println("用户添加角色操作已执行!");
}

@SuppressWarnings("unchecked")
public RoleBean queryRole(RoleDataConfig rdConfig) {
RoleBean it = null;
List<ActionBean> aJCZGroles = new ArrayList<ActionBean>();
List<RoleBean> roles = null;
try {
roles = roleService.selectRole();
} catch (SQLException e) {
e.printStackTrace();
}

String[] data = rdConfig.getData();
String keyword = rdConfig.getKeyword();
List<String> aRoleName = rdConfig.getRoleTypes();
for (int i = 0; i < data.length; i++) {
if ("Y".equals(data[i])) {
List<ActionBean> list = permissionService.findActionByActionRemark("%" + keyword.split("[\\|]")[0] + "%" + aRoleName.get(i).split("[\\|]")[0] + "%");
if (CollectionUtils.isEmpty(list)) {
System.err.println("Action" + "%" + keyword.split("[\\|]")[0] + "%" + aRoleName.get(i).split("[\\|]")[0] + "%,在系统中找不到匹配");
System.exit(1);
break;
}
if (list.size() > 1) {
System.out.println("WARNNING:存在多个权限" + "Action" + "%" + keyword.split("[\\|]")[0] + "%" + aRoleName.get(i).split("[\\|]")[0] + "%,请注意!");
}
ActionBean ab = new ActionBean();
ab.setActionId(list.get(0).getActionId());
ab.setActionName(list.get(0).getActionName());
ab.setActionDesc(aRoleName.get(i));
aJCZGroles.add(ab);
}
}

if (CollectionUtils.isEmpty(roles)) {
System.out.println("ERROR:数据库读不到角色,发生严重错误!");
System.exit(1);
}

for (RoleBean rb : roles) {
boolean getIt = true;
for (ActionBean ab : aJCZGroles) {
if (!rb.getPermits().contains(ab)) {
getIt = false;
break;
}
}
if (!getIt) {
continue;
}

if (rb.getPermits().size() == aJCZGroles.size()) {
System.out.println("I get it!" + rb.getRoleid());
it = rb;
break;
}
}
if (it == null) {
System.out.println("I can't find the role you need! did you want to new a role?");
// do something
RoleBean roleBean = new RoleBean();

StringBuilder cnName = new StringBuilder(keyword.split("[\\|]")[0] + "[");
StringBuilder enName = new StringBuilder(keyword.split("[\\|]")[1] + "[");
for (ActionBean ab : aJCZGroles) {
cnName.append(ab.getActionDesc().split("[\\|]")[0] + "|");
enName.append(ab.getActionDesc().split("[\\|]")[1] + "|");
}
cnName.setLength(cnName.length() - 1);
cnName.append("]");
enName.setLength(enName.length() - 1);
enName.append("]");

roleBean.setRolenamecn(cnName.toString());
roleBean.setRolenameen(enName.toString());
roleBean.setRoledescription(cnName.toString());
roleBean.setPermits(aJCZGroles);
//调用hibernateTempate.save方法保存role
createRole(roleBean);
System.out.println(roleBean.getRoleid());
it = roleBean;
}

return it;
}

@Rollback(false)
public void createRole(RoleBean roleBean) {
try {
roleService.createNewRole(roleBean);
} catch (SQLException e) {
e.printStackTrace();
}
}

public UserBean addUserInfo(String[] aUserInfo) {
UserBean userBean = userService.findUserBean(aUserInfo[2]);

if (userBean != null) {
System.out.println("用户已经存在");

} else {
System.out.println("用户不存在");
userBean = new UserBean();

userBean.setNumb(aUserInfo[0]);
userBean.setUsername(aUserInfo[1]);
userBean.setPassword("123456");
userBean.setUserid(aUserInfo[2]);
userBean.setPhonenum(aUserInfo[3]);
userBean.setCellphonenum(aUserInfo[4]);
userBean.setEmail(aUserInfo[5]);
List<DepartmentUserBean> deptUserBeans = departmentUserService.queryListByHql(" from DepartmentUserBean as dp where deptName = '" + aUserInfo[6] + "'");

if (!CollectionUtils.isEmpty(deptUserBeans)) {
DepartmentBean deptBean = deptService.getDpartmentBeanByDeptId(deptUserBeans.get(0).getDeptID());
userBean.setDepartment(deptBean);
} else {
System.out.println("WARNNING:部门信息提示有误!");
}
//调用hibernateTemplate保存user
userService.createUser(userBean);
}

return userBean;
}
}


两个文件数据如下:
roleDataContainer.txt
--下面这一行为注释
--工号 姓名 系统账号 电话号码(座机) 手机号码 邮箱 部门 备注 查找(Y/N) 增加(Y/N) 修改(Y/N) 删除(Y/N) 导出(Y/N)



/ / XXXX / / / / 用户已经存在 Y Y Y Y N


roleImportConfig.properties

#-----------------------------------------------------------------------------------------
roleType=查|find,增|add,改|update,删|delete,导入|import,导出|export
#安全环境
#currentConfig=[{length:8,type:'userInfo'},{length:4,type:'role',roleType:'111100',keyword:'安环—评审表|safeEnv_PS'},{length:6,type:'role',roleType:'111111',keyword:'安环—检查整改|safeEnv_JCZG'},{length:4,type:'role',roleType:'111100',keyword:'安环—工伤事故|safeEnv_GSSG'},{length:4,type:'role',roleType:'111100',keyword:'安环—消防事故|safeEnv_XFSG'}]
#急救药品
#currentConfig=[{length:8,type:'userInfo'},{length:5,type:'role',roleType:'111101',keyword:'急救药品登记|drugRegist'}]
#新抽检
currentConfig=[{length:8,type:'userInfo'},{length:5,type:'role',roleType:'111101',keyword:'新抽检|NewOQC'}]
#-----------------------------------------------------------------------------------------


现在问题来了,现在的功能主要用户角色自动导入的功能,由于手动太麻烦了,然后权限又不能下放,于是想自己
做个简便的测试工具,主要逻辑如下
1.检查用户是否存在,如果不存在,则新增用户
2.检查角色存在,这里的角色主要是按模块分的,模块内角色如果不存在,则新增角色,把新增角色传递上去。
3.上面两步都做好了,开始绑定用户角色。

现在的问题上,hibernateTempate.save 跟 存储过程 执行顺序老是存储过程先执行,而不是按业务逻辑执行,并且如果调用session.flush,每次我需要执行两个,才能完成操作,结果是造成死锁,所以请大神指教,怎样按顺序执行,又不发生死锁,谢谢!
...全文
668 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdojqy1122 2015-02-07
  • 打赏
  • 举报
回复
	
public void createRole(RoleBean roleBean) {
// try {
		Session session = sessionFactory.openSession();
		session.save(roleBean);
		session.flush();
		session.close();
		// roleService.createNewRole(roleBean);
// } catch (SQLException e) {
// e.printStackTrace();
// }
	}
新开session可以解决,user创建同理,总感觉那里别扭。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧