Hycz's Blog

Life is a game. Why so serious?

2011/06/14 在Eclipse中配置Cassandra_2

接上回https://hycz.wordpress.com/2011/06/13/20110613-%E5%9C%A8eclipse%E4%B8%AD%E9%85%8D%E7%BD%AEcassandra/

  1. 见上回
  2. 见上回
  3. 见上回
  4. 遇到问题,开始Debug的时候出现
    “‘Launching CassandraDaemon’ has encountered a problem.
    Cannot connect to VM”Details中:
    “Cannot connect to VMselect failed”不光是这个项目,我新建了一个最简单的project写了个helloworld都不能用debug,说明这是eclipse层的问题。具体出错处是什么socket出错,网上的说法就几种:1,有其他程序占用了Eclipse的Debug端口,导致出错;2,操作系统的socket出了问题要重置。对于第一种解释,虽然我表示同意是另一个程序影响了Eclipse,但是实在难以找到相应的程序,对于第二种解释,我又找不到win7下的重置sock的工具。无奈之下,就用了360的LSP修复,修复之后Debug能用了,但是不能打开网页了。我在修复前看了一下,使用到LSP的非系统程序只有2个,都是我的游戏代理,一个是27代理,一个是迅雷加速器,恐怕问题就出在他们身上。无论如何,网页是打不开了,qq还在,于是重启看看。重启之后,依然不能上网,连qq都上不去了,打开360,居然要求自动修复,那就自动修复吧,结果瑞星狂叫360是木马,现在吧,我觉得瑞星更像木马一些。修复完了,按要求重启,qq能上了,但是网页打不开,这种情况好像DNS坏了一样,就用cmd ping了一下百度,居然ping的通,然后我又用Access Connections诊断了一下网络故障,他叫我检查防火墙设置。360防火墙怎么莫名其妙开了,关掉,不能开网页,瑞星防火墙,关掉,能开网页了。瑞星果然是娱乐货,没事弄个免费,天天弹那些狗屎免费游戏,真的考虑要不用它了。又启动了一下迅雷网游加速器,果然问题再现了,使用他自带的LSP修复,然后问题消失。果然还是LSP引起的问题么。这种诡异的问题不要再碰到了啊!这样一来,代理还是能用,只是用完了要修复,不能一边wow一边debug了。。
  5. 类中的static{}属性,似乎是在调用类的方法时,会首先执行的代码,在Cassandra的org.apache.cassandra.service.AbstractCassandraDaemon类中,就有这么一段,是用来初始化logging的
    //Initialize logging in such a way that it checks for config changes every 10 seconds.
        static
        {
        	String config = System.getProperty("log4j.configuration", "log4j-server.properties");
            URL configLocation = null;
            try
            {
                // try loading from a physical location first.
                configLocation = new URL(config);
            }
            catch (MalformedURLException ex)
            {
                // load from the classpath.
                configLocation = AbstractCassandraDaemon.class.getClassLoader().getResource(config);
                if (configLocation == null)
                    throw new RuntimeException("Couldn't figure out log4j configuration.");
            }
            PropertyConfigurator.configureAndWatch(configLocation.getFile(), 10000);
            org.apache.log4j.Logger.getLogger(AbstractCassandraDaemon.class).info("Logging initialized");
        }

    这里首先定义了一个变量config,这个config的属性关键字是log4j.configuration,然后给了一个默认值log4j-server.properties,这个变量的主要目的是储存log4j的配置文件地址,默认的文件名是log4j-server.properties,如果在启动时手动设置了其他值的话,那么就会是那个手动设置的值。

    然后首先尝试通过物理地址查找这个配置文件(try中),如果找不到(catch中),那么就到启动时设置的CLASSPATH中去找这个文件。

  6. 再看cassandra-0.8.0的bin版本中的bin文件夹中的cassandra.bat文件(我用的是windows7。。。) ,通过分析这个文件中所作的操作,可以知道如何在Eclipse中配置Cassandra的运行参数。以下摘自cassandra.bat文件。
    if "%OS%" == "Windows_NT" setlocalif NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%~dp0..
    if NOT DEFINED CASSANDRA_MAIN set CASSANDRA_MAIN=org.apache.cassandra.thrift.CassandraDaemon
    if NOT DEFINED JAVA_HOME goto err

    这段分别定义了cassandra的根目录地址,cassandra的入口程序,检查了JAVA_HOME是否定义。

    REM ***** JAVA options *****
    set JAVA_OPTS=^
     -ea^
     -Xms1G^
     -Xmx1G^
     -XX:+HeapDumpOnOutOfMemoryError^
     -XX:+UseParNewGC^
     -XX:+UseConcMarkSweepGC^
     -XX:+CMSParallelRemarkEnabled^
     -XX:SurvivorRatio=8^
     -XX:MaxTenuringThreshold=1^
     -XX:CMSInitiatingOccupancyFraction=75^
     -XX:+UseCMSInitiatingOccupancyOnly^
     -Dcom.sun.management.jmxremote.port=7199^
     -Dcom.sun.management.jmxremote.ssl=false^
     -Dcom.sun.management.jmxremote.authenticate=false^
     -Dlog4j.configuration=log4j-server.properties^
     -Dlog4j.defaultInitOverride=true

    这段是各种参数,需要把这段复制到Eclipse中Run->Debug Configration中建立的Debug项中的VM arguments中(注意把每行最后的^删掉)。

    REM Ensure that any user defined CLASSPATH variables are not used on startup
    set CLASSPATH="%CASSANDRA_HOME%\conf"

    这里就定义了CLASSPATH,原来这里把conf文件夹加入到了CLASSPATH里(CLASSPATH里不止一个地址),怪不得能找到。所以在Eclipse的项目的Properties->Java Build Path->Libraries点Add Class Folder,加入这个conf地址,就不会报错了

    bat文件中其他的设置也是大同小异,就不写了。

Advertisements

One response to “2011/06/14 在Eclipse中配置Cassandra_2

  1. Pingback: 2011/06/15-17 在Eclipse中配置Cassandra——配置文件介绍 « Hycz's Blog

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: