蔣德的JAVA備忘錄

          JAVA備忘錄

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

          2008年3月19日 #

          weblogic10.3 這個(gè)應(yīng)用服務(wù)器是oracle 收購(gòu)Bean 公司后新出的版本.今天試用下,發(fā)現(xiàn)不錯(cuò).將JNDI的配置過(guò)程一一記錄,
          1: 啟動(dòng)weblogic 10.3 采用默認(rèn)密碼進(jìn)入
          2:在JDBC-DATASOURCE 中假建一個(gè)應(yīng)用數(shù)據(jù)源.
          3:在 Configuration-->Connection Pool-->Advanced 中的  一定要溝上,不然會(huì)測(cè)試通不過(guò)
          4:填寫測(cè)試的表名    等信息

          5:編寫測(cè)試的JSP文件

          <!doctype html public "-//w3c//dtd html 4.0 transitional//en"   "http://www.w3.org/TR/REC-html40/strict.dtd">
          <%@ page import="java.sql.*"%>
          <%@ page import="javax.sql.*"%>
          <%@ page import="javax.naming.*"%>
          <%@ page session="false"%>
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
          <title>Test JNDI</title>
          </head>
          <body>
              
          <%
              out.print(
          "  Test Jndi Begin !!    ");
              DataSource ds 
          = null;
              
          try {
                  InitialContext ctx 
          = new InitialContext();
                  ds 
          = (DataSource) ctx.lookup("jdbc/mysql");
                  Connection conn 
          = ds.getConnection();
                  Statement stmt 
          = conn.createStatement();
                  String strSql 
          = " select * from tb_adminuser";
                  ResultSet rs 
          = stmt.executeQuery(strSql);
                  
          while (rs.next()) {
                      out.println(rs.getString(
          4));
                  }

                  out.print(
          "Test is over");
              }
          catch (Exception ex) {
                  out.print(
          "ERROR:" + ex.getMessage());
                  ex.printStackTrace();
              }

          %>
          </body>

          </html>

          6:編寫 JUNIT
          package com.XXXXXX.framework.datasource;

          import java.sql.Connection;
          import java.sql.ResultSet;
          import java.sql.Statement;
          import java.util.Hashtable;

          import javax.naming.Context;
          import javax.naming.InitialContext;
          import javax.sql.DataSource;

          import junit.framework.TestCase;

          public class TestJndi extends  TestCase{

              
              
          public void testJndi() throws Exception{
                  Hashtable ht 
          = new Hashtable();          
                  ht.put(Context.INITIAL_CONTEXT_FACTORY,
          "weblogic.jndi.WLInitialContextFactory");
                  ht.put(Context.PROVIDER_URL, 
          "t3://localhost:7001");
                  Context initial 
          = new InitialContext(ht);
                  DataSource ds 
          = (DataSource) initial.lookup("jdbc/mysql");
                  Connection connect 
          = ds.getConnection();

                  Statement stmt 
          = connect.createStatement();   
                  String strSql 
          = " select * from tb_adminuser";   
                 
                  ResultSet rs 
          = stmt.executeQuery(strSql);   
                  
          while(rs.next()){   
                      System.out.println(rs.getString(
          2));
                    }
            

              }



          }

          其中在編寫JUNIT 的時(shí)候,有一個(gè)插曲.我在網(wǎng)上看到別人的代碼是用t3://localhost:7007

          我也照COPY,結(jié)果出現(xiàn)錯(cuò)誤如下:
          javax.naming.CommunicationException [Root exception is java.net.ConnectException: t3://localhost:7007: Destination unreachable; nested exception is: 
              java.net.ConnectException: Connection refused: connect; No available router to destination]
              at weblogic.jndi.internal.ExceptionTranslator.toNamingException(ExceptionTranslator.java:
          40)
              at weblogic.jndi.WLInitialContextFactoryDelegate.toNamingException(WLInitialContextFactoryDelegate.java:
          783)
              at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:
          367)
              at weblogic.jndi.Environment.getContext(Environment.java:
          315)
              at weblogic.jndi.Environment.getContext(Environment.java:
          285)
              at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:
          117)
              at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:
          667)
              at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:
          288)
              at javax.naming.InitialContext.init(InitialContext.java:
          223)
              at javax.naming.InitialContext.
          <init>(InitialContext.java:197)
              at com.etong.framework.datasource.TestJndi.testJndi(TestJndi.java:
          21)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
          39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
          25)
              at java.lang.reflect.Method.invoke(Method.java:
          597)
              at junit.framework.TestCase.runTest(TestCase.java:
          168)
              at junit.framework.TestCase.runBare(TestCase.java:
          134)
              at junit.framework.TestResult$
          1.protect(TestResult.java:110)
              at junit.framework.TestResult.runProtected(TestResult.java:
          128)
              at junit.framework.TestResult.run(TestResult.java:
          113)
              at junit.framework.TestCase.run(TestCase.java:
          124)
              at junit.framework.TestSuite.runTest(TestSuite.java:
          232)
              at junit.framework.TestSuite.run(TestSuite.java:
          227)
              at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:
          76)
              at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:
          38)
              at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
          38)
              at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
          460)
              at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
          673)
              at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
          386)
              at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
          196)
          Caused by: java.net.ConnectException: t3:
          //localhost:7007: Destination unreachable; nested exception is: 
              java.net.ConnectException: Connection refused: connect; No available router to destination
              at weblogic.rjvm.RJVMFinder.findOrCreate(RJVMFinder.java:
          203)
              at weblogic.rjvm.ServerURL.findOrCreateRJVM(ServerURL.java:
          153)
              at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:
          352)
               
          27 more
          Caused by: java.rmi.ConnectException: Destination unreachable; nested exception is: 
              java.net.ConnectException: Connection refused: connect; No available router to destination
              at weblogic.rjvm.ConnectionManager.bootstrap(ConnectionManager.java:
          464)
              at weblogic.rjvm.ConnectionManager.bootstrap(ConnectionManager.java:
          315)
              at weblogic.rjvm.RJVMManager.findOrCreateRemoteInternal(RJVMManager.java:
          251)
              at weblogic.rjvm.RJVMManager.findOrCreate(RJVMManager.java:
          194)
              at weblogic.rjvm.RJVMFinder.findOrCreateRemoteServer(RJVMFinder.java:
          225)
              at weblogic.rjvm.RJVMFinder.findOrCreate(RJVMFinder.java:
          188)
               
          29 more


          換成 t3://localhost:7001
          測(cè)試成功.看來(lái)不懂就到網(wǎng)上亂COPY代碼,還是不行的

           

          我已經(jīng)在配置文件里配置了context.java.naming.factory.initial,而在這里還提示這個(gè)錯(cuò)誤
          關(guān)鍵看這里

          Error initializing JtaTransactionConfig while looking up UserTransaction (javax.transaction.UserTransaction). Cause: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial


          jvm里加上一個(gè)參數(shù),測(cè)試一下

          -Djava.naming.factory.initial=weblogic.jndi.WLInitialContextFactory


          運(yùn)行通過(guò)

          這個(gè)參數(shù)在:右鍵項(xiàng)目--Run as --Open Run Dialog--ArgumentsVM arguments中添加即可


          posted @ 2009-08-23 10:41 蔣德 閱讀(5191) | 評(píng)論 (1)編輯 收藏

          一直用Xdoclet 來(lái)管理項(xiàng)目的配置文件,今天用Myeclipse 建新了一個(gè)工程,使用Myeclipse 的Strtus1.2的相關(guān)包,發(fā)現(xiàn)生成相關(guān)的配置文件中<action-mappings> 部分竟然是空白的,百思不得其解,反復(fù)測(cè)試后,發(fā)現(xiàn)取消Myeclipse 的Strtus1.2的相關(guān)包,使用以前的Struts .jar又可以生成.
           記錄下,日后再找到原因

          到google 里一找,發(fā)現(xiàn)自己幾年前還記錄了這個(gè),2009年我又遇到了這個(gè)問(wèn)題
          發(fā)現(xiàn),在xdoclet 里生成struts的配置文件時(shí),一定要在lib下面存在
          struts.jar
          commons-collections-3.0.jar
          commons-digester.jar
          commons-logging-1.0.4.jar
          否則就可能不生成,也不出錯(cuò).

          莫名其妙的.

          posted @ 2008-12-17 20:54 蔣德 閱讀(147) | 評(píng)論 (0)編輯 收藏

          2008年真是個(gè)多事之秋,從年初的雪災(zāi),股災(zāi) 到 3.15事件,4.28撞車,5.12 紋川地震,水災(zāi)一次又一次的襲擊著中國(guó)人民.
          網(wǎng)絡(luò)世界也不例外,6月份的端午節(jié)注定是個(gè)難忘的日子.
          1前言
               **** 旗下的網(wǎng)站隨著電子商務(wù)的大潮流越來(lái)越受領(lǐng)導(dǎo)的重視,商務(wù)的成功運(yùn)作,鋪天蓋地的廣告投入,讓這個(gè)這不知名的小網(wǎng)站一下子變得重要起來(lái),網(wǎng)站作為集團(tuán)公司客戶關(guān)懷的主要渠道,已被人悄悄的盯上了.一場(chǎng)悄無(wú)聲息的戰(zhàn)爭(zhēng)就這樣子開(kāi)始了

          2發(fā)現(xiàn)病毒
                  6月5號(hào),這幾天心情不錯(cuò),工作交接的也算順利.10點(diǎn)左右,前臺(tái)的編輯人員給我發(fā)來(lái)消息,運(yùn)營(yíng)部門要求加入統(tǒng)計(jì)的JS腳本代碼,其實(shí)我最煩這些工作了,統(tǒng)計(jì)的JS代碼誰(shuí)敢保證沒(méi)有問(wèn)題呢?網(wǎng)站一但出現(xiàn)不穩(wěn)定的時(shí)候,我就要冒冷汗,何況在這之前網(wǎng)站已出現(xiàn)過(guò)好幾次問(wèn)題了.ARP攻擊.DDOS攻擊.一輪接一輪.想些這些就害怕.電話再次溝通,確認(rèn).我在服務(wù)器上加載了關(guān)于統(tǒng)計(jì)的JS代碼.接下來(lái)無(wú)事,我繼續(xù)著交接文檔
                  從食堂回來(lái)很開(kāi)心,呵呵,一邊吃飯一邊享受美麗風(fēng)景的機(jī)會(huì)是不多的.在公司的豬圈里胡亂的吹水.天花亂墜的.TNND,也不知群主怎么想的,好好的名不起,偏起了個(gè)豬圈.不過(guò)在這個(gè)群里聊天還是很開(kāi)心的.聊累了就睡,也不用去理會(huì)什么.
                    一覺(jué)醒來(lái),習(xí)慣性的打開(kāi)網(wǎng)站,卡巴斯基猛的跳出個(gè)窗口提示惡意的js 我當(dāng)時(shí)還沒(méi)回過(guò)神來(lái),確認(rèn)后敢緊打電話確認(rèn)前臺(tái)的靜態(tài)頁(yè)面是否有發(fā)布.確認(rèn)后回想今天的修改,就加載了統(tǒng)計(jì)的JS,不會(huì)這么巧吧,難道是因?yàn)檫@個(gè)中招了?我敢緊要求前臺(tái)發(fā)布人員刪除相關(guān)的JS代碼.
          結(jié)果依舊.卡巴斯基歡快的提示著惡意JS ,然后一個(gè)個(gè)的進(jìn)行阻止. 從這點(diǎn)來(lái)看,我還是很中意卡巴斯基這個(gè)軟件的.果然不5分鐘,運(yùn)營(yíng)部門來(lái)電話了.說(shuō)網(wǎng)站全面出現(xiàn)病毒.要求處理.當(dāng)然我就急了.以現(xiàn)在的訪問(wèn)量,要是不盡快處理,不知多少用戶會(huì)受到影響.我電話通知發(fā)布系統(tǒng)的同事,要求重新發(fā)布新的靜態(tài)頁(yè)面.同時(shí)通知***部門的項(xiàng)目負(fù)責(zé)人.要求對(duì)系統(tǒng)進(jìn)行查毒.
                  一切都在緊張有順的進(jìn)行著.我等待著結(jié)果,同時(shí)也在想,到底是哪能兒出錯(cuò)了呢?統(tǒng)計(jì)的JS?系統(tǒng)被人攻破?半小時(shí)后,***部門反饋消息服務(wù)器沒(méi)有發(fā)現(xiàn)病毒.我的心隨之繃緊了.如果服務(wù)器沒(méi)有發(fā)現(xiàn)病毒,就可能是WEB應(yīng)用上有問(wèn)題了.我查找今天剛發(fā)布的文件.好多.不確定具體在哪兒出問(wèn)題了.只能一個(gè)一個(gè)的去查看源碼.網(wǎng)站上病毒提示依然存在.急得我就像熱窩里的螞蟻團(tuán)團(tuán)轉(zhuǎn).文件一個(gè)一個(gè)的對(duì)比,檢查JS里的可疑代碼.2個(gè)小時(shí)過(guò)去了,沒(méi)有一點(diǎn)進(jìn)展.還是沒(méi)有發(fā)現(xiàn)源頭.突然想到,整站都出現(xiàn)了惡意的JS代碼,肯定是共公文件出問(wèn)題了.我電話詢問(wèn)前臺(tái)發(fā)布人員,公共JS存放目錄.果然發(fā)現(xiàn)有個(gè)文件被修改了.馬上改了回來(lái),卡巴斯基停止的報(bào)告.掛碼被清除出去了.終于松了一口氣,收拾東西回家.

          3更換服務(wù)器
              6號(hào)早上,好不容易的擠上64路車,自從取消上沙車站后,在下沙上64路就難了.站的位置要不是好.上車都是個(gè)問(wèn)題
          4事件升級(jí)
          5網(wǎng)安公司
          6切按平臺(tái)

          posted @ 2008-06-12 10:50 蔣德 閱讀(277) | 評(píng)論 (0)編輯 收藏

          這段時(shí)間在開(kāi)發(fā)eclipse plugin 時(shí)候,要在生成項(xiàng)目的時(shí)候自動(dòng)增加library

          其JAVA代碼如下:
          增加src :

          IPath path = new Path("src/main/java");
          JavaCore.newSourceEntry(fCurrProject.getFolder(path).getFullPath());

          增加con

          IPath aopPath = new Path("melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_AOP");
          IClasspathEntry lib1 
          = JavaCore.newContainerEntry(aopPath);


          <?xml version="1.0" encoding="UTF-8"?>
          <classpath>
              
          <classpathentry kind="src" path="src/main/java"/>
              
          <classpathentry kind="src" path="src/test/java"/>
              
          <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
              
          <classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_AOP"/>
              
          <classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_CORE"/>
              
          <classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_DAO"/>
              
          <classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_WEB"/>
              
          <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/antlr.jar"/>
              
          <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/tecore.jar"/>
              
          <classpathentry kind="con" path="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_5_CONTAINER"/>
              
          <classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>
          </classpath>
          posted @ 2008-04-26 10:41 蔣德 閱讀(932) | 評(píng)論 (0)編輯 收藏

          在用Struts 進(jìn)行開(kāi)發(fā)的時(shí)候,為了項(xiàng)目的并行,會(huì)有多個(gè)配置文件。
          如 struts-a.xml ; struts-b,xml ; struts-c.xml ;  
          這么多的配置文件如果都要手工配置到web.xml文件中,其實(shí)是很麻煩的。那么如何讓他自己動(dòng)加載到struts-*.xml呢?
          如下:

          <servlet>
                  
          <servlet-name>action</servlet-name>
                  
          <servlet-class>com.allcom.base.util.AutoActionServlet</servlet-class>
                  
          <init-param>
                      
          <param-name>config</param-name>
                      
          <param-value>/WEB-INF/struts-*.xml</param-value>
                  
          </init-param>
                  
          <init-param>
                      
          <param-name>debug</param-name>
                      
          <param-value>3</param-value>
                  
          </init-param>
                  
          <init-param>
                      
          <param-name>detail</param-name>
                      
          <param-value>3</param-value>
                  
          </init-param>
                  
          <load-on-startup>5</load-on-startup>
              
          </servlet>



          在這里面,我用了通配符,所有由struts-開(kāi)頭的.xml文件都可以進(jìn)行自動(dòng)加載
          com.allcom.base.util.AutoActionServlet
          其源碼為:

          package com.allcom.base.util;

          import java.io.File;
          import java.util.ArrayList;
          import java.util.List;

          import javax.servlet.ServletException;

          import com.allcom.base.core.module.PropertyManager;
          /**
           * 
          @author <a href="mailto:jdskyy@163.com">Jdskyy</a>
           * 自動(dòng)集成Struts 多個(gè)配置文件
           * 
           * 
          */

          public class AutoActionServlet extends org.apache.struts.action.ActionServlet {
              
          protected void initOther()throws ServletException {
                   String value 
          = getServletConfig().getInitParameter("config");
                   
          if(value != null && value.contains("*")){
                       List xmlfilelist 
          = new ArrayList();    
                       String path 
          = PropertyManager.getProperty("WebPath")+"WEB-INF";
                       File file 
          = new File(path);
                       
          if(!file.exists()) return;
                       
          if(!file.isDirectory()) return
                       String[] tempList 
          = file.list();
                       File temp 
          = null;
                       
          for(int i = 0; i < tempList.length; i++
                       
          {
                           
          if(path.endsWith(File.separator))
                               temp 
          = new File(path + tempList[i]);
                           
          else 
                               temp 
          = new File(path + File.separator + tempList[i]);
                              
                           
          if(temp.isFile()) {
                               String xmlFileName
          =temp.getName();
                               
          if(xmlFileName.startsWith("struts-")){
                                   System.out.println(xmlFileName);
                                   xmlfilelist.add(
          "/WEB-INF/"+xmlFileName);
                               }

                           }

                       }

                       String configStr 
          =ListTOString(xmlfilelist);
                       config 
          = configStr;
                  }

              }

              
              
          public static String ListTOString(List ids) {
                  StringBuffer listBufferStr 
          = new StringBuffer();
                  
          for(int i=0; i <ids.size() ;i++){
                      
          if(i==0){
                          listBufferStr.append(ids.get(i));
                      }
          else{
                            listBufferStr.append(
          ","+ids.get(i));
                      }

                  }

                  
          return listBufferStr.toString();
              }

          }


          經(jīng)過(guò)AutoActionServlet的轉(zhuǎn)換,Strtus  就可以自動(dòng)識(shí)別配置文件了

          posted @ 2008-03-20 09:11 蔣德 閱讀(1473) | 評(píng)論 (2)編輯 收藏

          DWR 常用功能

          轉(zhuǎn)換指定的屬性,如下只轉(zhuǎn)換:quarterId,和quarterName兩個(gè)屬性

          <convert converter="bean" match="com.allcom.panel.persist.Quarter">
                    
          <param name="include" value="quarterId,quarterName"/>
          </convert>


          只包含指定的方法 <include method="createFavorite"/>

          <create creator="spring"  javascript="favoriteDao">
                     
          <param name="beanName" value="favoriteDao"/>
                     
          <include method="createFavorite"/>
          </create>
          posted @ 2008-03-19 18:16 蔣德 閱讀(214) | 評(píng)論 (0)編輯 收藏

           

          String keyWord = "字符1 字符2 字符3";
          if(null!=keyWord && !"".equals(keyWord)){
              String keyWords[] 
          = keyWord.split("\\s+");
              
          for (int p=0;p<keyWords.length;p++){
                  String key 
          = keyWords[p];
                  System.out.println(
          "分隔后的字符"+key);
              }

          }
          posted @ 2008-03-19 18:14 蔣德 閱讀(230) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 沂源县| 乌鲁木齐县| 肃北| 荆州市| 新营市| 德州市| 山东省| 乌拉特前旗| 合山市| 沙雅县| 吉木乃县| 万宁市| 盐源县| 贺州市| 合山市| 屯昌县| 济宁市| 仁化县| 汝城县| 梓潼县| 汕头市| 桂阳县| 西青区| 雅安市| 绥棱县| 洛浦县| 株洲市| 突泉县| 米易县| 界首市| 谢通门县| 连州市| 巍山| 凤凰县| 麻阳| 虎林市| 宜都市| 蒲江县| 浪卡子县| 黄大仙区| 平阳县|