错误总结

来源:互联网 发布:个推公司怎么样知乎 编辑:程序博客网 时间: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
0 0
原创粉丝点击