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

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

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

    一點一滴,編程人生

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      69 隨筆 :: 0 文章 :: 25 評論 :: 0 Trackbacks

    2017年6月28日 #

    今天為了這個問題了忙乎了一整天,特此記錄下,希望對有遇到同樣問題的同學有幫助。事情的經過是這樣的,原先使用atomikos一直把數據源用jndi配置到tomcat的context.xml下,一直這么用沒有出現問題,配置如下
        <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" />

    最近項目要遷移到maven下,所以把context.xml的數據源配置挪到了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>
    因為上面這個配置我是照搬網上的,所以覺得沒有問題,可是項目啟動后,用此數據源提交事務時確報以下錯誤:

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

    一開始我以為maven配置的mysql-connector-java驅動版本不對,或是atomikos版本不對,可是不管如何換版本都不行,就快要瘋了的時候,我看到了原先jndi方式中有這么一行代碼
    xaProperties.pinGlobalTxToPhysicalConnection="true"
    就因為缺少上面這句話導致了問題,上網查資料,據說是mysql xa bug,有興趣的可以看如下連接,最后配置如下:
           <property name="xaProperties">  
                
    <props>
                    
    <prop key="pinGlobalTxToPhysicalConnection">true</prop>  <!-- mysql必須配置此參數,要不然無法提交事務 -->
                    
    <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) | 評論 (0)編輯 收藏

    2015年12月15日 #

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

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


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


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

    # redis-server /etc/redis/redis.conf 開啟

    # redis-cli shutdown 關閉



    4.重啟后查看redis是否運行
    ps -x | grep redis
    5.通過指定端口訪問redis。
    redis-cli -p 6666

    6.給redis設置密碼或者干脆設置成只能內網訪問

    7.通過top命令發現了幾個可疑的程序



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


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


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


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


    12.通過nethogs軟件可以按進程實時統計網絡帶寬利用率,這個用來看是否存在DDOS攻擊最好不過了。

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

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

    2015年1月3日 #

    今天在修改server.xml調試程序時,遇到下面這個問題,clean,重啟都不好使。

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

    2013年12月23日 #

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

    2013年3月18日 #

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

    2012年10月30日 #

    這個問題似乎只有在手動改變系統狀態欄級別的情況才會出現

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

    這樣設置的話相當于影響了彈出短信或郵件控制器頁面window的級別,所以造成不顯示鍵盤問題(不過此問題在ios6以下沒有)

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

    - (void) viewDidAppear:(BOOL)animated {

        [super viewDidAppear:animated];

        self.window.windowLevel = UIWindowLevelNormal;

    }

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

    2012年10月9日 #

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

    最近在做Apple的IOS開發,有開發靜態庫的需求,本身IOS的開發,只允許靜態庫或者Framework。在Xcode上沒有找到允許編譯,如同Android上的*.so和Win32上的dll這樣的說法。不過Framework這樣的框架,估計也是類似動態庫的實現,不過沒有具體研究過,后續繼續深入研究。

    我這個文檔的靜態庫的開發是基于Xcode4.2和iOS SDK5.0編寫的。Xcode4跟之前的Xcode3還是有不少的差別的。

    下面就簡單寫一個靜態庫和一個調用靜態庫的例子。

    靜態庫的編寫:

    1.靜態庫工程的建立:

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


    2.工程建立

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



    3.編譯前準備

    這里分release與debug版本,需要設置一下


    4.OK,編譯

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

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

           

    5.ok

    在右邊 這個文件上右鍵Open In Finder。這時候我們打開了一個文件夾,里面有一個libPrint.a。后面我們繼續編寫一個調用這個libPrint.a的App。但是這個App在編譯時候會出錯,通過這個錯誤的解決,說明Xcode的一些編譯相關的東西。這里,我們在command下面根據路徑找到這個文件,用這個非常重要的命令查看一下這個lib的信息!

    打開終端寫入如下命令:這是什么?這就是所在的路徑 

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

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

    我們手動打開這個路徑:可以看到如下信息:Release-iphoneos


    這個是給真機用的,那我們要給模擬器和真機封裝的靜態庫應該都能用才好。這個下面介紹!!!!!  


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

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


    6.建立一個調用這個libPrint.a的應用

    應用就很簡單了,我們添加剛才libPrint.a的*.h文件。 然后在這個工程的Build Phases的Link Binary With Library里面添加我們剛才拷貝出來的那個libPrint.a。



    7.插入了h和a文件后

    我們就可以在control里面調用這個libPrint.a 函數了。

    #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

    {

        

        //調用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,編譯運行這個應用程序。

    編譯出現錯誤了。這個就是這篇文檔的關鍵了。主要就是為了介紹編譯靜態庫相關的東西。



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

    其實這個錯誤原因很簡單,就是因為,我們用錯了編譯出來的libUITab.a lib,在模擬器里面,我們需要的是基于i386構架編譯的static lib,但是這個a文件,大家還記得前面說的arm6 arm7構架的么。這個a其實是在iphone這個arm構架上運行的代碼。其實show in finder指向的是一個ios device的庫,并不是i386模擬器下的庫。那如何編譯i386的庫呢?看見第二張圖片的Print>IOS Device了么?我們將這個iOS Device修改成iPhone5.0 Simulator。在進行編譯,這樣就可以編譯出i386下面的庫。這個時候我們show in finder打開的文件夾還是ios device下的庫。我們最好自己去那個目錄下看一下。這里我們用command去查看了一下目錄情況,如下:可以看到一個iphoneos的目錄和一個simulator的目錄。


    然后我們再看看這個目錄與第4條所示的目錄有什么不同! 同樣也有一個libPrint.a文件。



    10.錯誤原因分析

    Release-iphoneos里面的是基于arm6 arm7編譯出來的庫文件。Release-iphonesimulator文件夾下面的是基于i386編譯出來的文件。

    11.合并.a文件,制作通用靜態庫

    這二個庫一個是用于真機運行的一個是用于模擬器運行的.其實我們可以利用lipo將這二個文件打包成一個通用的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.打包以后的庫文件,我們查看信息

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

    可以看到如下信息:


    如上,你已經看到了,它具備了i386和arm7的條件。 現在我們這個靜態庫,支持的構架已經是armv7 i386了。


    13.ok,經過上述步驟后

    這個通用庫生成后,我們將原來,調用這個庫進行替換一下,在進行編譯,成功編譯,運行結果如下所示:


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

    2012年9月27日 #

    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(打開調試)

    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) | 評論 (0)編輯 收藏

    2012年9月14日 #

    翻譯:http://www.joshsunshine.me.uk/2012/02/29/ios-development-remove-old-notifications-from-notification-center.html

    不逐字翻譯了,只是大體說一下。
    看作者的意思,應該是他經常收到N多通知,而通過其中一條通知打開一個app以后,發現那個app的其它通知還在通知中心。作者不喜歡這樣的情況。我以為我也存在的這樣的情況,馬上檢查了一下,發現沒有。看來是少數app的問題。但是也記錄一下。作者總結的從通知中心移除通知的三種方法:
    1.將app的BadgeNumber設為0,就是app圖標右上角那個

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];


    2.如果BadgeNumber本身就是0的情況,可以先將其設1再設置成0

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

    3.如果以上的辦法都不好使的話,那就用本地通知欺騙一下。

    UIApplication* application = [UIApplication sharedApplication];
    NSArray* scheduledNotifications = [NSArray arrayWithArray:application.scheduledLocalNotifications];
    application.scheduledLocalNotifications = scheduledNotifications;

    就這么多了,我仔細想了一下,為什么我的應用從其中一條通知打開的時候,其它的通知消失掉:
    因為我在程序啟動的時候就執行了第一條:)

    posted @ 2012-09-14 17:51 writegull 閱讀(2754) | 評論 (0)編輯 收藏

    2012年9月10日 #

    使用MFMessageComposeViewController 編寫發短信模塊時界面是英文的情況下,用下面的方法可以解決問題

    在plist里面Localization native development region 選擇 china ,然后Localized resources can be mixed 選 YES,如果沒有Localized resources can be mixed,需手動添加
    posted @ 2012-09-10 18:12 writegull 閱讀(703) | 評論 (0)編輯 收藏

    僅列出標題  下一頁
    主站蜘蛛池模板: 国产成人精品日本亚洲网址| 亚洲国产精品热久久| 亚洲AV永久无码精品放毛片| 免费人成网站在线观看10分钟| 香蕉蕉亚亚洲aav综合| 日本高清高色视频免费| 亚洲va在线va天堂va不卡下载| 两个人看www免费视频| 精品国产综合成人亚洲区| 日韩精品在线免费观看| 亚洲日本在线看片| 日韩av无码久久精品免费| 亚洲资源在线视频| 成人女人A级毛片免费软件| 亚洲AV无码国产精品永久一区| 免费久久精品国产片香蕉| 一区二区三区视频免费观看| 亚洲成色在线综合网站| 成人毛片免费视频| 亚洲国产成人久久精品大牛影视| 日本大片在线看黄a∨免费 | 亚洲另类视频在线观看| 日韩欧美一区二区三区免费观看| 中文字幕乱码亚洲无线三区| 四虎影视在线永久免费观看| 巨胸狂喷奶水视频www网站免费| 久久久久久亚洲精品| 成人免费一区二区无码视频| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 视频免费1区二区三区| 亚洲va久久久噜噜噜久久天堂| 国产成人精品免费午夜app | 一级毛片免费视频网站| 亚洲国产综合精品中文第一区| 可以免费看黄的网站| 一级视频免费观看| 91亚洲国产在人线播放午夜| 国产色爽免费视频| 日韩视频在线观看免费| 亚洲国产成人久久精品大牛影视| 亚洲国产精品成人精品无码区|