<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一點(diǎn)一滴,編程人生

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      69 隨筆 :: 0 文章 :: 25 評(píng)論 :: 0 Trackbacks

    2012年9月27日 #

    今天為了這個(gè)問(wèn)題了忙乎了一整天,特此記錄下,希望對(duì)有遇到同樣問(wèn)題的同學(xué)有幫助。事情的經(jīng)過(guò)是這樣的,原先使用atomikos一直把數(shù)據(jù)源用jndi配置到tomcat的context.xml下,一直這么用沒(méi)有出現(xiàn)問(wèn)題,配置如下
        <Resource name="jdbc/cms" auth="Container"
            type
    ="com.atomikos.jdbc.AtomikosDataSourceBean" factory="com.atomikos.tomcat.EnhancedTomcatAtomikosBeanFactory"
            uniqueResourceName
    ="jdbc/cms" xaDataSourceClassName="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"
            xaProperties.URL
    ="xxxx"
            xaProperties.user
    ="xxxx" xaProperties.password="xxxx"
            xaProperties.pinGlobalTxToPhysicalConnection
    ="true" maxLifetime="60" poolSize="4" />

    最近項(xiàng)目要遷移到maven下,所以把context.xml的數(shù)據(jù)源配置挪到了spring.xml下,配置如下
        <bean id="myDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close">
           
    <property name="uniqueResourceName" value="masterDB" />
           
    <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/>  <!-- SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]  -->  
           
    <property name="poolSize" value="0" /> 
           
    <property name="minPoolSize" value="0"/>    
           
    <property name="maxPoolSize" value="9"/>    
           
    <property name="borrowConnectionTimeout" value="60"/>    
           
    <property name="reapTimeout" value="20"/>    
           
    <property name="maxIdleTime" value="60"/>    
           
    <property name="maintenanceInterval" value="60"/>    
           
    <property name="loginTimeout" value="60"/>
           
    <property name="xaProperties">  
                
    <props>
                    
    <prop key="url">xxxx</prop>  
                    
    <prop key="user">xxxx</prop>
                    
    <prop key="password">xxxx</prop>
                
    </props>
            
    </property>  
        
    </bean>
    因?yàn)樯厦孢@個(gè)配置我是照搬網(wǎng)上的,所以覺(jué)得沒(méi)有問(wèn)題,可是項(xiàng)目啟動(dòng)后,用此數(shù)據(jù)源提交事務(wù)時(shí)確報(bào)以下錯(cuò)誤:

    Raised -5: invalid arguments were given for the XA operation 或 XAER_INVAL: Invalid arguments (or unsupported command)

    一開(kāi)始我以為maven配置的mysql-connector-java驅(qū)動(dòng)版本不對(duì),或是atomikos版本不對(duì),可是不管如何換版本都不行,就快要瘋了的時(shí)候,我看到了原先jndi方式中有這么一行代碼
    xaProperties.pinGlobalTxToPhysicalConnection="true"
    就因?yàn)槿鄙偕厦孢@句話導(dǎo)致了問(wèn)題,上網(wǎng)查資料,據(jù)說(shuō)是mysql xa bug,有興趣的可以看如下連接,最后配置如下:
           <property name="xaProperties">  
                
    <props>
                    
    <prop key="pinGlobalTxToPhysicalConnection">true</prop>  <!-- mysql必須配置此參數(shù),要不然無(wú)法提交事務(wù) -->
                    
    <prop key="url">xxxx</prop>  
                    
    <prop key="user">xxx</prop>
                    
    <prop key="password">xxxx</prop>
                
    </props>
            
    </property> 



    posted @ 2017-06-28 19:32 writegull 閱讀(2485) | 評(píng)論 (0)編輯 收藏

    事情描述:
    本人在阿里云上創(chuàng)建了一個(gè)linux服務(wù)器,跑了一個(gè)自己的測(cè)試web項(xiàng)目。搭建了redis。想方便測(cè)試用,就沒(méi)有對(duì)redis進(jìn)行任何安全防護(hù)并暴露在了公網(wǎng)上。期間阿里云發(fā)現(xiàn)了此問(wèn)題,還發(fā)短信提醒我,由于最近在公司一直加班也沒(méi)有時(shí)間理會(huì),沒(méi)想到就在今天真的被黑了,事后心想多虧是個(gè)測(cè)試服務(wù)器,如果是正式環(huán)境,也真危險(xiǎn),這個(gè)黑客也沒(méi)有停下腳步,通過(guò)redis強(qiáng)大的能力在/root/.ssh目錄下面上傳了公鑰,徹底攻破了服務(wù)器,免密碼登錄服務(wù)器,一般黑客到這步也就看看有沒(méi)有興趣的數(shù)據(jù),這個(gè)黑客一看這就是個(gè)沒(méi)有價(jià)值的測(cè)試服務(wù)器,所以心一橫,在我這上面裝了個(gè)DDOS攻擊軟件,把我的機(jī)器當(dāng)起肉雞。

    1.這就是黑完后留下的公鑰/私鑰,刪除authorized_keys,id_rsa, id_rsa.pub這三個(gè)文件吧,除非還想讓他繼續(xù)黑下去。。。。


    2.通過(guò)redis的key *命令可以看到有個(gè)叫crackit的key。這就是黑客在入侵后留下來(lái)的,原先set的值是公鑰,入侵成功之后就改成這個(gè)了,把這個(gè)key也刪除掉吧。


    3.修改redis默認(rèn)端口吧,不讓黑客利用6379端口。在redis安裝目錄中,修改redis.config文件。修改完了別忘了重啟redis服務(wù),

    # redis-server /etc/redis/redis.conf 開(kāi)啟

    # redis-cli shutdown 關(guān)閉



    4.重啟后查看redis是否運(yùn)行
    ps -x | grep redis
    5.通過(guò)指定端口訪問(wèn)redis。
    redis-cli -p 6666

    6.給redis設(shè)置密碼或者干脆設(shè)置成只能內(nèi)網(wǎng)訪問(wèn)

    7.通過(guò)top命令發(fā)現(xiàn)了幾個(gè)可疑的程序



    8.minerd這個(gè)程序是個(gè)用來(lái)挖掘萊特幣的,這個(gè)黑客看來(lái)干了不少壞事啊。。我們用命令 ps -ef|grep minerd 查找一下這個(gè)進(jìn)程,殺掉這個(gè)進(jìn)程kill -9 18267,并且去/tmp目錄刪除minerd目錄


    9.黑客在tmp目錄留下了一個(gè)叫1.sh的腳本,是用來(lái)下載挖掘萊特幣程序的。也把它kill掉吧。以下是腳本內(nèi)容。


    10.通過(guò)cat /etc/passwd命令可以看到有一個(gè)叫作syss的非法用戶,權(quán)限還很高,跟root一樣,刪掉他吧,這是黑客入侵后方便進(jìn)入的。使用命令userdel -f syss 強(qiáng)制刪除一個(gè)用戶,哪怕他正在登錄。


    11.去/mnt目錄上,可以看到黑客掛載了很多程序,刪除他們吧。


    12.通過(guò)nethogs軟件可以按進(jìn)程實(shí)時(shí)統(tǒng)計(jì)網(wǎng)絡(luò)帶寬利用率,這個(gè)用來(lái)看是否存在DDOS攻擊最好不過(guò)了。

    13.暫時(shí)解決對(duì)外DDOS攻擊,最快的辦法就是用防火墻,這個(gè)阿里云提供的腳本幫了大忙。直接上傳到服務(wù)器上,運(yùn)行一下世界就清靜了。下載地址:
    https://help.aliyun.com/knowledge_detail/5973920.html?spm=5176.7618386.5.1.H8H33f

     
    posted @ 2015-12-15 01:13 writegull 閱讀(4122) | 評(píng)論 (4)編輯 收藏

    今天在修改server.xml調(diào)試程序時(shí),遇到下面這個(gè)問(wèn)題,clean,重啟都不好使。

                    Removing obsolete files from server..
                   Could not clean server of obsolete files: null
                    java.lang.NullPointerException
    解決方法是把.metadata\.plugins\org.eclipse.wst.server.core這個(gè)目錄下面的tmp0刪除掉,再clean下就可以了。可能是緩存問(wèn)題。
    posted @ 2015-01-03 16:58 writegull 閱讀(7283) | 評(píng)論 (0)編輯 收藏

    有時(shí)候需要手動(dòng)地去禁用一個(gè)uibutton,使用button.enabled = NO的時(shí)候雖然能夠達(dá)到目的但也會(huì)帶來(lái)副作用,那就是按鈕變的半透明了。有時(shí)候應(yīng)用不需要這種副作用,可以嘗試使用button.userInteractionEnabled = NO來(lái)達(dá)到這個(gè)目的,在禁用按鈕的同時(shí)也不會(huì)使得按鈕變得半透明。
    posted @ 2013-12-23 10:29 writegull 閱讀(600) | 評(píng)論 (0)編輯 收藏

    裝win8后發(fā)現(xiàn)cpu占用率50%-60%,而且磁盤(pán)瘋狂讀寫(xiě),是com surrogate這個(gè)程序,還有幾個(gè)服務(wù)造成的,之后我把com surrogate結(jié)束進(jìn)程了cpu使用率直接降低到10%以下,我就郁悶了。
    解決方案:
    1,在“更多電腦設(shè)置”那里的“用戶”改為“本地用戶”。
    2,“離開(kāi)”家庭組(一般都是它的原因)
    3,“同步設(shè)置”關(guān)
    4,一般“共享”什么的不到需要都是“關(guān)”的狀態(tài)。
    5,做完以上幾點(diǎn)都不行,就真幫不了你了。
    posted @ 2013-03-18 22:47 writegull 閱讀(399) | 評(píng)論 (0)編輯 收藏

    這個(gè)問(wèn)題似乎只有在手動(dòng)改變系統(tǒng)狀態(tài)欄級(jí)別的情況才會(huì)出現(xiàn)

    例如:self.window.windowLevel = UIWindowLevelStatusBar+1;

    這樣設(shè)置的話相當(dāng)于影響了彈出短信或郵件控制器頁(yè)面window的級(jí)別,所以造成不顯示鍵盤(pán)問(wèn)題(不過(guò)此問(wèn)題在ios6以下沒(méi)有)

    解決方法:在當(dāng)前視圖控制器中加入下面的代碼,即可解決

    - (void) viewDidAppear:(BOOL)animated {

        [super viewDidAppear:animated];

        self.window.windowLevel = UIWindowLevelNormal;

    }

    posted @ 2012-10-30 21:08 writegull 閱讀(1575) | 評(píng)論 (1)編輯 收藏

    原文地址:http://blog.csdn.net/pjk1129/article/details/7255163

    最近在做Apple的IOS開(kāi)發(fā),有開(kāi)發(fā)靜態(tài)庫(kù)的需求,本身IOS的開(kāi)發(fā),只允許靜態(tài)庫(kù)或者Framework。在Xcode上沒(méi)有找到允許編譯,如同Android上的*.so和Win32上的dll這樣的說(shuō)法。不過(guò)Framework這樣的框架,估計(jì)也是類似動(dòng)態(tài)庫(kù)的實(shí)現(xiàn),不過(guò)沒(méi)有具體研究過(guò),后續(xù)繼續(xù)深入研究。

    我這個(gè)文檔的靜態(tài)庫(kù)的開(kāi)發(fā)是基于Xcode4.2和iOS SDK5.0編寫(xiě)的。Xcode4跟之前的Xcode3還是有不少的差別的。

    下面就簡(jiǎn)單寫(xiě)一個(gè)靜態(tài)庫(kù)和一個(gè)調(diào)用靜態(tài)庫(kù)的例子。

    靜態(tài)庫(kù)的編寫(xiě):

    1.靜態(tài)庫(kù)工程的建立:

    Xcode New一個(gè)新的project,選擇IOS下面的Framework&Library,下面有一個(gè)Cocoa Touch Static Library。直接next去建立一個(gè)Print這樣的工程。


    2.工程建立

    我們添加很簡(jiǎn)單的"- (void)printA;"和"+ (void)printB;"的方法,這個(gè)方法的實(shí)現(xiàn)也是很簡(jiǎn)單的,在*.m文件中的實(shí)現(xiàn)就是一個(gè)"NSLog(@“”);"這樣我們編譯出來(lái)的libstaticlib就可以被其他的IOS工程進(jìn)行調(diào)用了。這塊注意一下,目前我們的Print->iOS Device



    3.編譯前準(zhǔn)備

    這里分release與debug版本,需要設(shè)置一下


    4.OK,編譯

    我們可以在Products下面找到我們編譯生成的libstaticlib.a這個(gè)文件。

    注意未編譯前為紅色:左                             編譯后為黑色: 右

           

    5.ok

    在右邊 這個(gè)文件上右鍵Open In Finder。這時(shí)候我們打開(kāi)了一個(gè)文件夾,里面有一個(gè)libPrint.a。后面我們繼續(xù)編寫(xiě)一個(gè)調(diào)用這個(gè)libPrint.a的App。但是這個(gè)App在編譯時(shí)候會(huì)出錯(cuò),通過(guò)這個(gè)錯(cuò)誤的解決,說(shuō)明Xcode的一些編譯相關(guān)的東西。這里,我們?cè)赾ommand下面根據(jù)路徑找到這個(gè)文件,用這個(gè)非常重要的命令查看一下這個(gè)lib的信息!

    打開(kāi)終端寫(xiě)入如下命令:這是什么?這就是所在的路徑 

    以下均是在自己的mac上的路徑。你需要將/Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/ 替換成你的路徑。

    cd /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/  

    我們手動(dòng)打開(kāi)這個(gè)路徑:可以看到如下信息:Release-iphoneos


    這個(gè)是給真機(jī)用的,那我們要給模擬器和真機(jī)封裝的靜態(tài)庫(kù)應(yīng)該都能用才好。這個(gè)下面介紹!!!!!  


    然后再在終端 打開(kāi)這個(gè)文件:cd /Users/user/Library/Developer/Xcode/DerivedData/UItab-dbvoszbzpavyglaboxgflvrnzfce/Build/Products/Debug-iphoneos

    命令是:lipo -info libPrint.a,可以看到顯示的結(jié)果是:Arch是  Arm7。下面我會(huì)具體介紹一下。


    6.建立一個(gè)調(diào)用這個(gè)libPrint.a的應(yīng)用

    應(yīng)用就很簡(jiǎn)單了,我們添加剛才libPrint.a的*.h文件。 然后在這個(gè)工程的Build Phases的Link Binary With Library里面添加我們剛才拷貝出來(lái)的那個(gè)libPrint.a。



    7.插入了h和a文件后

    我們就可以在control里面調(diào)用這個(gè)libPrint.a 函數(shù)了。

    #import "AstroDiskAppDelegate.h"

    #import "Print.h"


    @implementation AstroDiskAppDelegate


    @synthesize window = _window;


    - (void)dealloc

    {

        [_window release];

        [_viewController release];

        [super dealloc];

    }


    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    {

        

        //調(diào)用libPrint.a

        [Print printB];

        Print  *print = [[[Print alloc] init] autorelease];

        [print printA];


        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

        [self.window makeKeyAndVisible];

        return YES;

    }


    8.OK,編譯運(yùn)行這個(gè)應(yīng)用程序。

    編譯出現(xiàn)錯(cuò)誤了。這個(gè)就是這篇文檔的關(guān)鍵了。主要就是為了介紹編譯靜態(tài)庫(kù)相關(guān)的東西。



    9.可以看到undefine symbols for architecture i386這樣的錯(cuò)誤。

    其實(shí)這個(gè)錯(cuò)誤原因很簡(jiǎn)單,就是因?yàn)椋覀冇缅e(cuò)了編譯出來(lái)的libUITab.a lib,在模擬器里面,我們需要的是基于i386構(gòu)架編譯的static lib,但是這個(gè)a文件,大家還記得前面說(shuō)的arm6 arm7構(gòu)架的么。這個(gè)a其實(shí)是在iphone這個(gè)arm構(gòu)架上運(yùn)行的代碼。其實(shí)show in finder指向的是一個(gè)ios device的庫(kù),并不是i386模擬器下的庫(kù)。那如何編譯i386的庫(kù)呢?看見(jiàn)第二張圖片的Print>IOS Device了么?我們將這個(gè)iOS Device修改成iPhone5.0 Simulator。在進(jìn)行編譯,這樣就可以編譯出i386下面的庫(kù)。這個(gè)時(shí)候我們show in finder打開(kāi)的文件夾還是ios device下的庫(kù)。我們最好自己去那個(gè)目錄下看一下。這里我們用command去查看了一下目錄情況,如下:可以看到一個(gè)iphoneos的目錄和一個(gè)simulator的目錄。


    然后我們?cè)倏纯催@個(gè)目錄與第4條所示的目錄有什么不同! 同樣也有一個(gè)libPrint.a文件。



    10.錯(cuò)誤原因分析

    Release-iphoneos里面的是基于arm6 arm7編譯出來(lái)的庫(kù)文件。Release-iphonesimulator文件夾下面的是基于i386編譯出來(lái)的文件。

    11.合并.a文件,制作通用靜態(tài)庫(kù)

    這二個(gè)庫(kù)一個(gè)是用于真機(jī)運(yùn)行的一個(gè)是用于模擬器運(yùn)行的.其實(shí)我們可以利用lipo將這二個(gè)文件打包成一個(gè)通用的a文件。命令如下:

    /Users/user/Library/Developer/Xcode/DerivedData/UITab-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products替換成你的路徑。 

    /Users/user/Desktop/libPrint.a替換成合并后的路徑。 

    lipo -create /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphonesimulator/libPrint.a  /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphoneos/libPrint.a  -output /Users/pjk1129/Desktop/libPrint.a


    12.打包以后的庫(kù)文件,我們查看信息

    然后打入如下命令:lipo -info /Users/pjk1129/Desktop/libPrint.a 

    可以看到如下信息:


    如上,你已經(jīng)看到了,它具備了i386和arm7的條件。 現(xiàn)在我們這個(gè)靜態(tài)庫(kù),支持的構(gòu)架已經(jīng)是armv7 i386了。


    13.ok,經(jīng)過(guò)上述步驟后

    這個(gè)通用庫(kù)生成后,我們將原來(lái),調(diào)用這個(gè)庫(kù)進(jìn)行替換一下,在進(jìn)行編譯,成功編譯,運(yùn)行結(jié)果如下所示:


    posted @ 2012-10-09 18:14 writegull 閱讀(647) | 評(píng)論 (0)編輯 收藏

    three20 wiki 地址:https://github.com/facebook/three20/wiki/Debugging

    You can use Three20's debugging facilities instead of NSLog() / assert(). This would give you an ability to turn off debugging messages without commenting out all NSLog's, sort log messages by importance (errorwarninginfo).

    Turn on debugging(打開(kāi)調(diào)試)

    These instructions are for Xcode 3:

    • Right-click on project, choose "Get Info".
    • In the "Build" tab, choose "Configuration => Debug" (you probably want to enable this only for debug builds)
    • While in the "Build" tab, search for "Preprocessor Macros" under the "GCC 4.2 - Preprocessing" section.
      • Add a declaration that reads DEBUG. That way you enable debugging in general.
      • Add a declaration that reads TTMAXLOGLEVEL=TTLOGLEVEL_INFO. By doing this, you set the default debugging output to beTTLOGLEVEL_INFO, the most descriptive one.

    Debugging preprocessor macro

    Use debugging

    Logging

    Use these instead of NSLog(). Which level gets printed to the console and which doesn't depends on what's set in preprocessor macros asTTMAXLOGLEVEL (see above).

    TTDERROR(text, ...)    // Log level 1 TTDWARNING(text, ...)  // Log level 3 TTDINFO(text, ...)     // Log level 5 TTDPRINT(text, ...) 

    Example

    If I got this in AppDelegate.m of my project HelloWorld:

    - (void)applicationDidFinishLaunching:(UIApplication *)application {	     TTDINFO(@"Hello!"); } 

    ...the console output would look like this:

    2010-05-15 01:04:20.107 HelloWorld[65222:207] -[AppDelegate applicationDidFinishLaunching:](22): Hello! 

    Conditional logging

    This is a type of logging facility which only outputs something if a particular condition is met:

    TTDCONDITIONLOG(condition, text, ...); 

    Example

    TTDCONDITIONLOG(TTDFLAG_URLREQUEST, @"Request parameters: %@", request.parameters); 

    Debug-only assertions

    Three20 also provides support for assertions which only work in the debug build.

    TTDASSERT(condition_which_would_lead_to_application_termination_when_true); 

    Example

    // Not that implementing safeAddSubview: is a good idea - (void)safeAddSubview:(UIView*)view {     TTDASSERT(nil != view);     if (nil == view) {         return;     }     [self addSubview:view]; } 

    See also

    Links

    posted @ 2012-09-27 10:30 writegull 閱讀(402) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲美国产亚洲AV| 久久亚洲AV成人无码国产| 男女啪啪永久免费观看网站| 4hu四虎最新免费地址| 100部毛片免费全部播放完整| 日本黄色动图免费在线观看| a级黄色毛片免费播放视频| a级午夜毛片免费一区二区| 国内精品免费在线观看 | 亚洲妇熟XXXX妇色黄| 国产国拍亚洲精品mv在线观看 | 又大又硬又爽又粗又快的视频免费| 久久久久久久99精品免费 | 曰批免费视频播放免费 | 亚洲视频欧洲视频| 亚洲伊人久久大香线蕉在观| 国产成人亚洲合集青青草原精品| 中文字幕 亚洲 有码 在线| 亚洲人成网站在线播放2019| 最新亚洲人成无码网站| 春意影院午夜爽爽爽免费| 中文字幕av无码不卡免费| 免费A级毛片无码A∨中文字幕下载| **实干一级毛片aa免费| 成人免费毛片内射美女APP| 日韩免费视频播播| 国产亚洲自拍一区| 久久精品国产亚洲av麻豆小说 | 久久精品国产亚洲av麻| 亚洲欧洲日本天天堂在线观看| 亚洲人成影院在线高清| 最新亚洲人成无码网站| 91精品成人免费国产| 免费国产黄网站在线观看可以下载 | 亚洲精品国精品久久99热一| 久久久久亚洲av无码专区| 亚洲日本久久久午夜精品| 污污污视频在线免费观看| 一级毛片不卡片免费观看| 成年女人18级毛片毛片免费| 亚洲精品麻豆av|