错误总结
来源:互联网 发布:个推公司怎么样知乎 编辑:程序博客网 时间:2024/05/22 17:22
问题记录
1,umadmin 在um测试环境登陆成功后没有权限,是由于dubbo里负责权限的接口没有启动。
2, maven 出现依赖问题,project error,可能是本地库的pom有parent,注掉就可以了
3, Plugin not found in any plugin reposiroty,百思不得其解的问题。最后机智的我这样做的:
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>${jetty_version}</version>
<configuration>
<contextPath>/</contextPath>
<scanIntervalSeconds>10</scanIntervalSeconds>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8080</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</build>
加了一个plugin,果断不报错了
4, 当maven项目没有main方法,也不是tomcat工程时,有时可以用test里的main方法启动。注意此时修改配置文件应是test中的
5, 'groupId' is missing,也是想了好久不明白,按照上面的方法并不好使,后来把版本号改成2.3.1.惊呆了,好了。我估计原因是版本不对造成的。估计!,后来我又碰到了引入工程报错的事情,新加plugin就好了
6,renameUser有个问题,如果原用户没有在openldap里面,则报空指针异常。需要在方法里面判断,并创建
7, activemq报错, Unsupported major.minor version 51.0 ,是因为在jdk1.7编译的class文件在jdk1.6的环境中运行。
8,通过在activemq集群在开发和测试环境的部署,我得到这样的教训:每次更改都要保证尽量小,能用原来的东西(包括IP,数据库)尽量用原来的,不然你可能觉得很简单的事情,会给别人带来很多麻烦。比如防火墙、端口等
9,10.18.1.132 um测试环境有个程序连接的是173的activemq,但是用户名密码为空,我仔细找了里面的程序,没找到到底是哪个没改过来。好奇怪.问题解决了。原因在于虽然jms.properties改了,但是调用它的地方没改
10, 10.18.140.26 这个环境连接了原来的JMS,即使地址改了还是原来的。但是查看原来JMS的端口号又看不到这个地址。十分怪异!而且新地址ping不通,不知道是防护墙的原因,还是activemq的问题。
11, 10.18.1.173 环境的activemq最好别动了,一停就出错,能不能起来完全看心情。可怕!
12, weblogic 启动的是管理,里面具体的server要各自启动,先启动管理,再启动各自server.而且server起来之后就算weblogic停了也无关紧要
13, 安装OID的过程中碰到无法弹出图像界面的问题,具体解决思路是:
export DISPLAY=10.18.8.10:1,然后启动runinstall ,再手动启动x-manager4.在x-manager4上会有图像界面,
14,dubbo调用方要能连接到被调用方才能调用其方法。
15,netstat -an|grep 查出端口号的连接不一定就连通了,也可能防火墙没通,它只是表明建立连接。
16 java.net.SocketException: Too many open files: 修改/etc/security/limits.conf 添加如下一行: - nofile 65535
修改/etc/pam.d/login添加如下一行
session required /lib/security/pam_limits.so
17,System.exit(0);退出主程序。
18, 所有的东东都是Collection(总结口)
Array有多少元素是确定的,比如足球队上场的队员有11名,是固定的,就用array。
ArrayList是不固定的,比如用sql查询数据库,不知道有多少记录返回,用arraylist.
Enumeration是用来一个一个列举Collection的元素的,但java2后被Iterator替代。
Hashtable用在比如你想查中国队的10号是谁,首先put(new Interger(10),new String(“海东”)),再String name=get(new Interger(10));对于简单的key--value对来说,hashtable很有用,建议hashmap.
HashMap/Hashtable 和 Vector/ArrayList 都是放一组对象,一个是用key object来定位element, 另一个是用index定位element.
推荐使用HashMap和ArrayList的原因一样,因为他们不是Synchronized,因为不需要obtain lock each time,它们相对快很多。Synchronized在最底层是没有意义的,在这里不想多讲。
我本人更加推荐是用LinkedList而不是ArrayList.因为在更多的时候,我们很少真的从一个List里拿出某一个element,相对的,遍例整个List的情况最多,在这种情况下用Iterator是最高效的。
Vector是一个一维的容器。HashTable、HashMap都是二维的。
和数组的区别是hash……不用向数组那样事先定义长度。而可以随意追加。它是key和value对应的。用key作为检索。
HashTable和Vector都是Synchronized都是旧的Java平台的集合类,ArrayList和HashMap由于少了Synchronized的开销,速度比较快。一般不牵涉到线程之间数据共享的问题都用ArrayList和HashMap吧,当然也可以用LinkedList,用listIterator来遍历.
HashTable ,HashMap
上面两个用起来差不多,不过建议使用HashMap,因为hashtable被淘汰了
Vector,ArrayList
Vector 比 ArrayList慢,是因为vector本身是同步的,而arraylist不是
所以,没有涉及到同步的推荐用arraylist.
看jdk关于vector说明的第3段:
As of the Java 2 platform v1.2, this class has been retrofitted to implement List, so that it becomes a part of Java\'s collection framework. Unlike the new collection implementations, Vector is synchronized.
显然,vector是同步的,楼主如不想自己实现同步的话,还是将就用一下vector
既然大家都讲到了同步,那么也稍微谈一下,同步了的Hashtable和Vector真的那么有用吗?真的如果用了socalled thread-safe Hashtable and Vector程序代码就不用再同步了吗?
这个例子(Vector vec; Object element;)
if (!vec.contains(element))
vec.add(element);
这段代码可以不同步吗?不可以,context switch might take place right after you do the containg check.
所以,在程序中还是需要:
synchronized (vec)
{
if (!vec.contains(element))
vec.add(element);
}
这样Synchronized Vector比起没有Synchronized ArrayList和LinkedList来说一点好处都没有了。
再谈ArrayList和LinkedList:
ArrayList的缺点是,当the underlying Array reaches the maximum capacity,一个新的双倍长的array has to be initialized,紧跟着的是Array Copy,很慢。同样,remove到1/4length时,array shrinks by creating a new shorter array and array copy all elements.所以,如果你要用的List打下常常改变,绝对不应该用ArrayList.
LinkedList的缺点是当去取某个indexed element时,必须做一次遍历。但是,这种情况我发现在real life project里很少。
19, 近期需要装OID,但是老是被卡在configuration progress,create domain就会在这里失败,without create a domain 就会卡住不动,在安装过程中有几处不正常的地方,1,检查安装条件有两处不符,2,install 过程会报9个错误其次就是,我们的数据库不是新的,,schema也是用过的
20, JMS 对于topic如果配置集群,消费者要把地址写全了,不然可能就收不到消息
21, String sql = "select name,business_category from t_role where id="+id;
String resourcesql = "select resource_id from t_role_resource where role_id="+id;
String usersql = "select user_id from t_role_user where role_id="+id;
stm = con.prepareStatement(sql);
rs = stm.executeQuery();
if(rs.next()){
role.setRoleName(rs.getString(1));
role.setService(rs.getString(2));
role.setDn(id+"");
}
rs = stm.executeQuery(resourcesql);
List<String> list = new ArrayList();
while(rs.next()){
Resource resource = resourceDao.getResourceFromId(rs.getInt(1));
list.add(resource.getResourceName());
}
role.setResourceRefs(list);
rs = stm.executeQuery(usersql);
List<String> userlist = new ArrayList();
while(rs.next()){
User user = userDao.getUserById(rs.getInt(1));
userlist.add(user.getUserName());
}
role.setMembers(userlist);
上面这种写法容易造成数组越界之类的错误,而且你很难查找原因。应该这样写:
String sql = "select name,business_category from t_role where id="+id;
String resourcesql = "select resource_id from t_role_resource where role_id="+id;
String usersql = "select user_id from t_role_user where role_id="+id;
stm = con.prepareStatement(sql);
rs = stm.executeQuery();
if(rs.next()){
role.setRoleName(rs.getString(1));
role.setService(rs.getString(2));
role.setDn(id+"");
}
stm = con.prepareStatement(resourcesql);
rs = stm.executeQuery();
List<String> list = new ArrayList();
while(rs.next()){
Resource resource = resourceDao.getResourceFromId(rs.getInt(1));
list.add(resource.getDn());
}
role.setResourceRefs(list);
stm = con.prepareStatement(usersql);
ResultSet rs1 = stm.executeQuery();
List<String> userlist = new ArrayList();
while(rs1.next()){
String um_id = rs1.getString("user_id");
if(um_id==null ||"".equals(um_id) ) continue;
int Id = userDao.getIdByUmId(um_id);
User user = userDao.getUserById(Id);
userlist.add(user.getUserName());
}
预编译时把sql确定了再得到结果。
22,这次对UM基于RDB的认证,本着对原程序改动最小的原则,对原程序(开发环境上)仅applicationContext-service.xml 、jms.property有改动,
23, jdbc连接在连接数较多时应加入连接池,单连接的全局变量很容易出并发问题,导致连接数超最大异常。
24, 在搭建接口管理平台架构时,工程的log jar包版本出了问题,老是找不到方法,新旧版本错误不一样,但是都不能使用,在浩哥那里好好地,为啥到我这里就出错了呢
25, 异常顶层是Throwable 下面有error 和 Exception 两种异常,前者是系统级或虚拟机级别,非程序异常,后者是程序异常
26, 碰到个页面问题,查了半天,是浏览器版本的问题,form.all().value方法在其他浏览器都不适用了。兼容模式才能正常
27, activemq启动报not enough memory 其实是没有设置java_home变量
28, 消息服务器最近频繁宕机,一直报org.apache.activemq.transport.tcp.ExceededMaximumConnectionsException的错误,讲道理我们公司不会超过连接数1000个的,
在网上查了一天的资料,我认为应当是有程序恶意占用连接,不关闭导致的,但是当前的监控不能显示哪个程序占用多少连接
29, <ui:select name="stateName" value="${ulimApplicationVO.stateName}" dataSrc="<%=stateVector%>"
optionText="$text$" optionValue="$value$" cssClass="select" /> 是ucia的自定义标签,选择器,text、value对应java后台Vector里的hashtable,
放进去的时候注意new 新的hashtable
1,umadmin 在um测试环境登陆成功后没有权限,是由于dubbo里负责权限的接口没有启动。
2, maven 出现依赖问题,project error,可能是本地库的pom有parent,注掉就可以了
3, Plugin not found in any plugin reposiroty,百思不得其解的问题。最后机智的我这样做的:
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>${jetty_version}</version>
<configuration>
<contextPath>/</contextPath>
<scanIntervalSeconds>10</scanIntervalSeconds>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8080</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</build>
加了一个plugin,果断不报错了
4, 当maven项目没有main方法,也不是tomcat工程时,有时可以用test里的main方法启动。注意此时修改配置文件应是test中的
5, 'groupId' is missing,也是想了好久不明白,按照上面的方法并不好使,后来把版本号改成2.3.1.惊呆了,好了。我估计原因是版本不对造成的。估计!,后来我又碰到了引入工程报错的事情,新加plugin就好了
6,renameUser有个问题,如果原用户没有在openldap里面,则报空指针异常。需要在方法里面判断,并创建
7, activemq报错, Unsupported major.minor version 51.0 ,是因为在jdk1.7编译的class文件在jdk1.6的环境中运行。
8,通过在activemq集群在开发和测试环境的部署,我得到这样的教训:每次更改都要保证尽量小,能用原来的东西(包括IP,数据库)尽量用原来的,不然你可能觉得很简单的事情,会给别人带来很多麻烦。比如防火墙、端口等
9,10.18.1.132 um测试环境有个程序连接的是173的activemq,但是用户名密码为空,我仔细找了里面的程序,没找到到底是哪个没改过来。好奇怪.问题解决了。原因在于虽然jms.properties改了,但是调用它的地方没改
10, 10.18.140.26 这个环境连接了原来的JMS,即使地址改了还是原来的。但是查看原来JMS的端口号又看不到这个地址。十分怪异!而且新地址ping不通,不知道是防护墙的原因,还是activemq的问题。
11, 10.18.1.173 环境的activemq最好别动了,一停就出错,能不能起来完全看心情。可怕!
12, weblogic 启动的是管理,里面具体的server要各自启动,先启动管理,再启动各自server.而且server起来之后就算weblogic停了也无关紧要
13, 安装OID的过程中碰到无法弹出图像界面的问题,具体解决思路是:
export DISPLAY=10.18.8.10:1,然后启动runinstall ,再手动启动x-manager4.在x-manager4上会有图像界面,
14,dubbo调用方要能连接到被调用方才能调用其方法。
15,netstat -an|grep 查出端口号的连接不一定就连通了,也可能防火墙没通,它只是表明建立连接。
16 java.net.SocketException: Too many open files: 修改/etc/security/limits.conf 添加如下一行: - nofile 65535
修改/etc/pam.d/login添加如下一行
session required /lib/security/pam_limits.so
17,System.exit(0);退出主程序。
18, 所有的东东都是Collection(总结口)
Array有多少元素是确定的,比如足球队上场的队员有11名,是固定的,就用array。
ArrayList是不固定的,比如用sql查询数据库,不知道有多少记录返回,用arraylist.
Enumeration是用来一个一个列举Collection的元素的,但java2后被Iterator替代。
Hashtable用在比如你想查中国队的10号是谁,首先put(new Interger(10),new String(“海东”)),再String name=get(new Interger(10));对于简单的key--value对来说,hashtable很有用,建议hashmap.
HashMap/Hashtable 和 Vector/ArrayList 都是放一组对象,一个是用key object来定位element, 另一个是用index定位element.
推荐使用HashMap和ArrayList的原因一样,因为他们不是Synchronized,因为不需要obtain lock each time,它们相对快很多。Synchronized在最底层是没有意义的,在这里不想多讲。
我本人更加推荐是用LinkedList而不是ArrayList.因为在更多的时候,我们很少真的从一个List里拿出某一个element,相对的,遍例整个List的情况最多,在这种情况下用Iterator是最高效的。
Vector是一个一维的容器。HashTable、HashMap都是二维的。
和数组的区别是hash……不用向数组那样事先定义长度。而可以随意追加。它是key和value对应的。用key作为检索。
HashTable和Vector都是Synchronized都是旧的Java平台的集合类,ArrayList和HashMap由于少了Synchronized的开销,速度比较快。一般不牵涉到线程之间数据共享的问题都用ArrayList和HashMap吧,当然也可以用LinkedList,用listIterator来遍历.
HashTable ,HashMap
上面两个用起来差不多,不过建议使用HashMap,因为hashtable被淘汰了
Vector,ArrayList
Vector 比 ArrayList慢,是因为vector本身是同步的,而arraylist不是
所以,没有涉及到同步的推荐用arraylist.
看jdk关于vector说明的第3段:
As of the Java 2 platform v1.2, this class has been retrofitted to implement List, so that it becomes a part of Java\'s collection framework. Unlike the new collection implementations, Vector is synchronized.
显然,vector是同步的,楼主如不想自己实现同步的话,还是将就用一下vector
既然大家都讲到了同步,那么也稍微谈一下,同步了的Hashtable和Vector真的那么有用吗?真的如果用了socalled thread-safe Hashtable and Vector程序代码就不用再同步了吗?
这个例子(Vector vec; Object element;)
if (!vec.contains(element))
vec.add(element);
这段代码可以不同步吗?不可以,context switch might take place right after you do the containg check.
所以,在程序中还是需要:
synchronized (vec)
{
if (!vec.contains(element))
vec.add(element);
}
这样Synchronized Vector比起没有Synchronized ArrayList和LinkedList来说一点好处都没有了。
再谈ArrayList和LinkedList:
ArrayList的缺点是,当the underlying Array reaches the maximum capacity,一个新的双倍长的array has to be initialized,紧跟着的是Array Copy,很慢。同样,remove到1/4length时,array shrinks by creating a new shorter array and array copy all elements.所以,如果你要用的List打下常常改变,绝对不应该用ArrayList.
LinkedList的缺点是当去取某个indexed element时,必须做一次遍历。但是,这种情况我发现在real life project里很少。
19, 近期需要装OID,但是老是被卡在configuration progress,create domain就会在这里失败,without create a domain 就会卡住不动,在安装过程中有几处不正常的地方,1,检查安装条件有两处不符,2,install 过程会报9个错误其次就是,我们的数据库不是新的,,schema也是用过的
20, JMS 对于topic如果配置集群,消费者要把地址写全了,不然可能就收不到消息
21, String sql = "select name,business_category from t_role where id="+id;
String resourcesql = "select resource_id from t_role_resource where role_id="+id;
String usersql = "select user_id from t_role_user where role_id="+id;
stm = con.prepareStatement(sql);
rs = stm.executeQuery();
if(rs.next()){
role.setRoleName(rs.getString(1));
role.setService(rs.getString(2));
role.setDn(id+"");
}
rs = stm.executeQuery(resourcesql);
List<String> list = new ArrayList();
while(rs.next()){
Resource resource = resourceDao.getResourceFromId(rs.getInt(1));
list.add(resource.getResourceName());
}
role.setResourceRefs(list);
rs = stm.executeQuery(usersql);
List<String> userlist = new ArrayList();
while(rs.next()){
User user = userDao.getUserById(rs.getInt(1));
userlist.add(user.getUserName());
}
role.setMembers(userlist);
上面这种写法容易造成数组越界之类的错误,而且你很难查找原因。应该这样写:
String sql = "select name,business_category from t_role where id="+id;
String resourcesql = "select resource_id from t_role_resource where role_id="+id;
String usersql = "select user_id from t_role_user where role_id="+id;
stm = con.prepareStatement(sql);
rs = stm.executeQuery();
if(rs.next()){
role.setRoleName(rs.getString(1));
role.setService(rs.getString(2));
role.setDn(id+"");
}
stm = con.prepareStatement(resourcesql);
rs = stm.executeQuery();
List<String> list = new ArrayList();
while(rs.next()){
Resource resource = resourceDao.getResourceFromId(rs.getInt(1));
list.add(resource.getDn());
}
role.setResourceRefs(list);
stm = con.prepareStatement(usersql);
ResultSet rs1 = stm.executeQuery();
List<String> userlist = new ArrayList();
while(rs1.next()){
String um_id = rs1.getString("user_id");
if(um_id==null ||"".equals(um_id) ) continue;
int Id = userDao.getIdByUmId(um_id);
User user = userDao.getUserById(Id);
userlist.add(user.getUserName());
}
预编译时把sql确定了再得到结果。
22,这次对UM基于RDB的认证,本着对原程序改动最小的原则,对原程序(开发环境上)仅applicationContext-service.xml 、jms.property有改动,
23, jdbc连接在连接数较多时应加入连接池,单连接的全局变量很容易出并发问题,导致连接数超最大异常。
24, 在搭建接口管理平台架构时,工程的log jar包版本出了问题,老是找不到方法,新旧版本错误不一样,但是都不能使用,在浩哥那里好好地,为啥到我这里就出错了呢
25, 异常顶层是Throwable 下面有error 和 Exception 两种异常,前者是系统级或虚拟机级别,非程序异常,后者是程序异常
26, 碰到个页面问题,查了半天,是浏览器版本的问题,form.all().value方法在其他浏览器都不适用了。兼容模式才能正常
27, activemq启动报not enough memory 其实是没有设置java_home变量
28, 消息服务器最近频繁宕机,一直报org.apache.activemq.transport.tcp.ExceededMaximumConnectionsException的错误,讲道理我们公司不会超过连接数1000个的,
在网上查了一天的资料,我认为应当是有程序恶意占用连接,不关闭导致的,但是当前的监控不能显示哪个程序占用多少连接
29, <ui:select name="stateName" value="${ulimApplicationVO.stateName}" dataSrc="<%=stateVector%>"
optionText="$text$" optionValue="$value$" cssClass="select" /> 是ucia的自定义标签,选择器,text、value对应java后台Vector里的hashtable,
放进去的时候注意new 新的hashtable
0 0
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 错误总结
- 总结错误
- 垃圾回收机制中,引入计数是如何实现的,内部原理是什么,怎么维持对象引用的
- ARM的7中工作模式和37个通用寄存器
- iOS性能优化:Instruments使用实战
- 【JNI】 Android调用JNI的进阶实例(摄像头预览数据转码RGB播放)
- codeforces--707A. Brain's Photos
- 错误总结
- 狸猫的笔试——集合
- 深入理解ThreadLocal
- java分布式都有哪些知识点
- POJ 2253 Frogger
- centOS 安装nginx
- 剑指-字符串排列
- 在csdn里markdown感受
- 安卓谷歌电子市场学习笔记系列——RatingBar