無聊人士

          搬家==》www.soapui.cn

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

          #

          以前一直為KeepWatcher裝的那臺oracle服務器奇怪,中軟Linux 3.1的系統,用了一年,發(fā)現/etc/hosts.deny里面寫了近二十萬條ALL:xxx.xxx.xxx.xxx記錄。

          這兩天弄了臺淘汰下來的服務器,準備裝來做部門的cvs、bug、oracle服務器,想裝oracle的時候省事省心,就裝成中軟的Linux 3.1,連上斷掉再連,如此反復,最后發(fā)現自己上不去了,換臺機器上去才發(fā)現自己被加進ipchains和/etc/hosts.deny里面去了。

          開始懷疑是ipchains、iptables服務的問題,chkconfig --level 345 ipchains off以后,仍然如此。

          打電話問情報所的吳兵,剛把現象一講,他就直接說了,是hostsentry和portsentry兩個進程做的怪,看了一下,在/etc/rc.d/rc3.d下,這兩個東西都是S前綴的,停掉服務,終于OK。


          posted @ 2005-12-27 12:30 mmwy 閱讀(542) | 評論 (0)編輯 收藏

          在劉冬的文章“ Java虛擬機的最大內存是多少 ”一文中
          今天分析了當前比較流行的幾個不同公司不同版本JVM的最大內存,得出來的結果如下:

          公司     JVM版本     最大內存(兆)client     最大內存(兆)server
          SUN     1.5.x     1492     1520
          SUN     1.5.5(Linux)     2634     2660
          SUN     1.4.2     1564     1564
          SUN     1.4.2(Linux)     1900     1260
          IBM     1.4.2(Linux)     2047     N/A
          BEA     JRockit 1.5 (U3)     1909     1902

          除非特別說明,否則JVM版本都運行在Windows操作系統下

          附:如何獲得JVM的最大可用內存

          在命令行下用 java -XmxXXXXM -version 命令來進行測試,然后逐漸的增大XXXX的值,如果執(zhí)行正常就表示指定的內存大小可用,否則會打印錯誤信息。

          實際發(fā)現版本上有細微差別的JDK最大容許內存值都不盡相同,因此在實際的應用中還是要自己試驗一下看到底內存能達到什么樣的值。

          通過這個表想說明的是,如果你的機器的內存太多的話,只能通過多運行幾個實例來提供機器的利用率了,例如跑Tomcat,你可以多裝幾個Tomcat并做集群,依此類推。

          我在新到的一臺dell 2850服務器上做測試

          1、使用sun jdk1.4.2_07,測試結果為
          [root@localhost bin]# ./java -Xmx3710M -version
          Error occurred during initialization of VM
          Could not reserve enough space for object heap
          [root@localhost bin]# ./java -Xmx3700M -version
          java version "1.4.2_07"
          Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_07-b05)
          Java HotSpot(TM) Client VM (build 1.4.2_07-b05, mixed mode)
          2、使用sun jdk 1.5.6,測試結果為
          [root@localhost bin]# ./java -Xmx3700M -version
          Error occurred during initialization of VM
          Could not reserve enough space for object heap
          Could not create the Java virtual machine.
          [root@localhost bin]# ./java -Xmx3600M -version
          java version "1.5.0_06"
          Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
          Java HotSpot(TM) Server VM (build 1.5.0_06-b05, mixed mode)

          服務器的配置情況
          [root@localhost bin]# top

          top - 14:32:23 up 5 days, 21:06,  3 users,  load average: 0.00, 0.03, 0.00
          Tasks: 114 total,   1 running, 113 sleeping,   0 stopped,   0 zombie
          Cpu0  :  0.0% us,  0.0% sy,  0.0% ni, 100.0% id,  0.0% wa,  0.0% hi,  0.0% si
          Cpu1  :  0.0% us,  0.0% sy,  0.0% ni, 100.0% id,  0.0% wa,  0.0% hi,  0.0% si
          Cpu2  :  2.3% us,  0.0% sy,  0.0% ni, 97.7% id,  0.0% wa,  0.0% hi,  0.0% si
          Cpu3  :  0.3% us,  0.0% sy,  0.0% ni, 99.7% id,  0.0% wa,  0.0% hi,  0.0% si
          Mem:   4044816k total,  1810908k used,  2233908k free,    92088k buffers
          Swap:  2555888k total,        0k used,  2555888k free,  1333328k cached

          [root@localhost bin]# cat /proc/meminfo 
          MemTotal:      4044816 kB
          MemFree:       2234092 kB
          Buffers:         92088 kB
          Cached:        1333328 kB
          SwapCached:          0 kB
          Active:         671408 kB
          Inactive:       939560 kB
          HighTotal:           0 kB
          HighFree:            0 kB
          LowTotal:      4044816 kB
          LowFree:       2234092 kB
          SwapTotal:     2555888 kB
          SwapFree:      2555888 kB
          Dirty:               0 kB
          Writeback:           0 kB
          Mapped:         230684 kB
          Slab:           148664 kB
          Committed_AS:   642520 kB
          PageTables:       6332 kB
          VmallocTotal: 536870911 kB
          VmallocUsed:    264596 kB
          VmallocChunk: 536606195 kB
          HugePages_Total:     0
          HugePages_Free:      0
          Hugepagesize:     2048 kB

          [root@localhost bin]# cat /proc/cpuinfo 
          processor       : 0
          vendor_id       : GenuineIntel
          cpu family      : 15
          model           : 4
          model name      :                   Intel(R) Xeon(TM) CPU 3.00GHz
          stepping        : 3
          cpu MHz         : 2992.789
          cache size      : 2048 KB
          physical id     : 0
          siblings        : 2
          fpu             : yes
          fpu_exception   : yes
          cpuid level     : 5
          wp              : yes
          flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl cid cx16 xtpr
          bogomips        : 5931.00
          clflush size    : 64
          cache_alignment : 128
          address sizes   : 36 bits physical, 48 bits virtual
          power management:

          processor       : 1
          vendor_id       : GenuineIntel
          cpu family      : 15
          model           : 4
          model name      :                   Intel(R) Xeon(TM) CPU 3.00GHz
          stepping        : 3
          cpu MHz         : 2992.789
          cache size      : 2048 KB
          physical id     : 3
          siblings        : 2
          fpu             : yes
          fpu_exception   : yes
          cpuid level     : 5
          wp              : yes
          flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl cid cx16 xtpr
          bogomips        : 5980.16
          clflush size    : 64
          cache_alignment : 128
          address sizes   : 36 bits physical, 48 bits virtual
          power management:

          processor       : 2
          vendor_id       : GenuineIntel
          cpu family      : 15
          model           : 4
          model name      :                   Intel(R) Xeon(TM) CPU 3.00GHz
          stepping        : 3
          cpu MHz         : 2992.789
          cache size      : 2048 KB
          physical id     : 0
          siblings        : 2
          fpu             : yes
          fpu_exception   : yes
          cpuid level     : 5
          wp              : yes
          flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl cid cx16 xtpr
          bogomips        : 5980.16
          clflush size    : 64
          cache_alignment : 128
          address sizes   : 36 bits physical, 48 bits virtual
          power management:

          processor       : 3
          vendor_id       : GenuineIntel
          cpu family      : 15
          model           : 4
          model name      :                   Intel(R) Xeon(TM) CPU 3.00GHz
          stepping        : 3
          cpu MHz         : 2992.789
          cache size      : 2048 KB
          physical id     : 3
          siblings        : 2
          fpu             : yes
          fpu_exception   : yes
          cpuid level     : 5
          wp              : yes
          flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl cid cx16 xtpr
          bogomips        : 5980.16
          clflush size    : 64
          cache_alignment : 128
          address sizes   : 36 bits physical, 48 bits virtual
          power management:

          posted @ 2005-12-05 14:36 mmwy 閱讀(6417) | 評論 (5)編輯 收藏

          白衣同志是個好同志,“刨蟲”啊,俺現在用的O/R Broker就是白衣“刨”出來的!

          今天準備睡覺,發(fā)現白衣同志blog上在推薦“Web Service Framework:XFire”( http://www.aygfsteel.com/calvin/archive/2005/12/04/22390.html).嘿嘿,受夠了axis,終于解放了。

          xfire的user's guide做得很漂亮,俺這種E盲都能看個半懂。quick start看完,直接跳到spring一章,順帶拿手上的一個測試工程做測試,HelloXfire。

          xfire 要加的包一大堆,guide上“Dependency Guide”這一章純粹是在糊弄人,我的工程是webwork2.1.7(freemarker2.3.4)+spring1.2.5+ hibernate3.0.5+oracle8.1.7的東西,原來的jar不算,新加了一堆進去,最后所有的包加進來有19MB,暈啊!
          antlr-2.7.5H3.jar
          aopalliance.jar
          asm.jar
          asm-attrs.jar
          cglib-nodep-2.1_2.jar
          classes12.jar
          commons-codec-1.3.jar
          commons-collections-3.1.jar
          commons-dbcp-1.2.1.jar
          commons-fileupload.jar
          commons-io-1.1.jar
          commons-lang-2.1.jar
          commons-logging.jar
          commons-pool-1.2.jar
          concurrent-1.3.4.jar
          cos-multipart.jar
          dom4j-1.6.jar
          freemarker.jar
          groovy-all-1.0-jsr-04.jar
          hibernate3.jar
          javamail-1.3.2.jar
          jaxen-1.1-beta-8.jar
          jdom-1.0.jar

          jencrypt.jar
          jta.jar
          log4j-1.2.9.jar
          lucene-1.4.3.jar
          nls_charset12.jar
          ognl.jar
          oscache-2.2.jar
          oscore.jar
          quartz-1.5.0.jar
          quartz-oracle-1.5.0.jar
          quartz-weblogic-1.5.0.jar
          spring.jar
          spring-xwork-integration.jar
          stax-1.1.2-dev.jar
          stax-api-1.0.jar
          stax-utils-snapshot-20040917.jar

          velocity-dep.jar
          webflow-2.1.7.jar
          webwork-2.1.7.jar
          webwork2-spring.jar
          xfire-all-1.0-M6a.jar
          xwork.jar
          activation-1.0.2.jar
          commons-beanutils-1.7.0.jar
          wsdl4j-1.5.1.jar


          user's guide上說得比較清楚,下載下來的zip里面也有一個spring的example。
          首先是在web.xml中做配置,除了原來spring、webwork的,加上
           1    <context-param>
           2        <param-name>contextConfigLocation</param-name>
           3        <param-value>classpath:beans.xml,classpath:org/codehaus/xfire/spring/xfire.xml</param-value>
           4    </context-param>
           5    <servlet>
           6        <servlet-name>xfire</servlet-name>
           7        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
           8    </servlet>
           9    <servlet-mapping>
          10        <servlet-name>xfire</servlet-name>
          11        <url-pattern>/xfire/*</url-pattern>
          12    </servlet-mapping>


          然后在WEB-INF下面放一個xfire-servlet.xml文件,實際上就是一個spring的配置文件
           1<?xml version="1.0" encoding="UTF-8"?>
           2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
           3<beans>
           4    <!-- START SNIPPET: xfire -->
           5    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
           6        <property name="urlMap">
           7            <map>
           8                <entry key="/echo" value-ref="echo" />
           9                <entry key="/HelloWorld" value-ref="HelloWorld" />
          10                <entry key="/AccountManager" value-ref="AccountManager-xfire" />
          11            </map>
          12        </property>
          13    </bean>
          14    <bean id="echoBean" class="com.yninfo.rules.services.impl.EchoImpl" />
          15    <!-- Declare a parent bean with all properties common to both services -->
          16    <bean id="echo" class="org.codehaus.xfire.spring.remoting.XFireExporter">
          17        <property name="serviceFactory" ref="xfire.serviceFactory" />
          18        <property name="xfire" ref="xfire" />
          19        <property name="serviceBean" ref="echoBean" />
          20        <property name="serviceInterface" value="com.yninfo.rules.services.Echo" />
          21    </bean>
          22    <bean id="HelloWorld" class="org.codehaus.xfire.spring.remoting.XFireExporter">
          23        <property name="serviceFactory" ref="xfire.serviceFactory" />
          24        <property name="xfire" ref="xfire" />
          25        <property name="serviceBean" ref="HelloService" />
          26        <property name="serviceInterface" value="com.yninfo.rules.services.HelloWorld" />
          27    </bean>
          28    <bean id="AccountManager-xfire" class="org.codehaus.xfire.spring.remoting.XFireExporter">
          29        <property name="serviceFactory" ref="xfire.serviceFactory" />
          30        <property name="xfire" ref="xfire" />
          31        <property name="serviceBean" ref="AccountManager" />
          32        <property name="serviceInterface" value="com.yninfo.rules.services.AccountManager" />
          33    </bean>
          34    <!-- END SNIPPET: xfire -->
          35</beans>
          36
          值得注意的是“serviceBean”,按user's guides上給的例子是“service”,結果是報錯,大意說service這個屬性沒有setter。
           1public class ServiceBean
           2    implements InitializingBean, ApplicationContextAware
           3{
           4
           5    private Object service;
           6    /**
           7     * Gets the object which backs this service.
           8     * @return
           9     */

          10    public Object getServiceBean()
          11    {
          12        return service;
          13    }

          14}

          我做測試的三個例子,echo是抄xfire examples上的,HelloWorld是一個groovy的例子
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
          <beans>
              
          <bean id="GroovyScriptFactory" class="org.springframework.beans.factory.script.groovy.GroovyScriptFactory">
                  
          <property name="expirySeconds" value="20" />
              
          </bean>

              
          <bean id="HelloService" factory-bean="GroovyScriptFactory" factory-method="create">
                  
          <constructor-arg index="0" value="classpath:com/yninfo/rules/services/impl/HelloWorldImpl.groovy" />
              
          </bean>
          </beans>
          而AccountManager,則是標準的spring+hibernate的東西。
           1    <bean id="AccountManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
           2        <property name="transactionManager" ref="TransactionManager" />
           3        <property name="transactionAttributes">
           4            <props>
           5                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
           6                <prop key="load">PROPAGATION_REQUIRED,readOnly</prop>
           7                <prop key="*">PROPAGATION_REQUIRED</prop>
           8            </props>
           9        </property>
          10        <property name="target">
          11            <bean class="com.yninfo.rules.services.impl.AccountManagerImpl">
          12                <property name="accountDAO" ref="AccountDAO" />
          13            </bean>
          14        </property>
          15    </bean>

          配置完成后,啟動tomcat,用http://192.168.0.100:8080/rules/xfire/echo?wsdl可以看到wsdl的描述。

          在vs2005里面,建了個j#的工程(略)。。。

          注:手誤,把圖覆蓋了,只好全部刪掉

          posted @ 2005-12-05 03:20 mmwy 閱讀(7746) | 評論 (12)編輯 收藏

          需求很簡單,就是用js向后端請求,然后把請求的結果弄進一個select里面。一開始是用xmlrequest去請求后端一個groovy的url,得到一個xml,然后把xml的內容填進select里面去。做完老瞅著不順眼,正好在看ajax的資料,拿dwr改造一下。

          js是我一直很頭疼的事了,尤其是對dom的操作上面,dwr感覺就是在直接調java接口,操作java對象,省事省心啊。

          用dwr,先得在web.xml中配一下。

           1    <servlet>
           2        <servlet-name>dwr-invoker</servlet-name>
           3        <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
           4        <init-param>
           5            <param-name>debug</param-name>
           6            <param-value>true</param-value>
           7        </init-param>
           8    </servlet>
           9    <servlet-mapping>
          10        <servlet-name>dwr-invoker</servlet-name>
          11        <url-pattern>/dwr/*</url-pattern>
          12    </servlet-mapping>
          13

          然后就是配dwr.xml文件了。
          dwr和spring貼得比較緊,不用折騰,直接讓dwr去調spring中定義的bean了。
           1<?xml version="1.0" encoding="UTF-8"?>
           2<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd" >
           3<dwr>
           4    <allow>
           5        <create javascript="ServerManager" creator="spring">
           6            <param name="beanName">ServerManager</param>
           7        </create>
           8    </allow>
           9</dwr>
          10
          我的project中,已經在web.xml中配了spring的listener,直接寫beanName就行。

          在ServerManager接口中定義了如下方法
            List<Server> loadAll(User manager, ServerStatus status, String order);
          因此,在dwr中定義了三個convert(一開始沒配,結果怎么調都不成功)。

          1        <convert converter="bean" match="com.yninfo.sa.domain.Server" />
          2        <convert converter="bean" match="com.yninfo.sa.domain.ServerStatus" />
          3        <convert converter="bean" match="com.yninfo.sa.domain.User" />


          loadAll方法中的manager參數,是用戶登錄成功后,session.setAttribute("user",user)存放的。在html里面,用js是無法讀到的,因此,自己定義了一個java bean。
          1public class Remote {
          2  public User getUser(HttpSession session) {
          3    return (User) session.getAttribute("user");
          4  }

          5}

          6

          同樣的,在dwr中配了一下
          1        <create javascript="Remote" creator="new">
          2            <param name="class" value="com.yninfo.sa.web.ajax.Remote" />
          3        </create>


          所有配置完成后,js代碼如下:
           1<script type='text/javascript' src='dwr/interface/Remote.js'></script>
           2<script type='text/javascript' src='dwr/interface/ServerManager.js'></script>
           3<script type='text/javascript' src='dwr/engine.js'></script>
           4<script type='text/javascript' src='dwr/util.js'></script>
           5<script>
           6    function init(){
           7        Remote.getUser(
           8            function(user){
           9                ServerManager.loadAll(user,null,null,load);
          10            }
          );
          11    }

          12    function load(data){
          13        for (var i=0; i<data.length; i++{
          14          document.DailyRecordAdd.elements["model.serverId"].options[i]=
          15            new Option(data[i].name,data[i].id);
          16        }

          17    }

          18    window.onload = function (){
          19        init();
          20    }

          21</script>


          最終的配置文件:
           1<?xml version="1.0" encoding="UTF-8"?>
           2<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd" >
           3<dwr>
           4    <allow>
           5        <create javascript="ServerManager" creator="spring">
           6            <param name="beanName">ServerManager</param>
           7            <include method="add" />
           8            <include method="findByPrimaryKey" />
           9            <include method="loadAll" />
          10        </create>
          11        <create javascript="Remote" creator="new">
          12            <param name="class" value="com.yninfo.sa.web.ajax.Remote" />
          13        </create>
          14        <convert converter="bean" match="com.yninfo.sa.domain.User" />
          15        <convert converter="bean" match="com.yninfo.sa.domain.Server" />
          16        <convert converter="bean" match="com.yninfo.sa.domain.ServerStatus" />
          17    </allow>
          18</dwr>
          19

          posted @ 2005-12-05 00:04 mmwy 閱讀(6414) | 評論 (8)編輯 收藏

          最近在RH 6.1、COSIX 3.1服務器上配置iptables,被ipchains弄得半死。

          iptables需要加入ip_tables模塊,但是由于ipchains從中作梗,每次都報錯。
          [root@cosix-31-oracle-01 /root]# iptables --list
          /lib/modules/2.4.18-5smp/kernel/net/ipv4/netfilter/ip_tables.o: init_module: Device or resource busy
          Hint: insmod errors can be caused by incorrect module parameters, including invalid IO or IRQ parameters
          /lib/modules/2.4.18-5smp/kernel/net/ipv4/netfilter/ip_tables.o: insmod /lib/modules/2.4.18-5smp/kernel/net/ipv4/netfilter/ip_tables.o failed
          /lib/modules/2.4.18-5smp/kernel/net/ipv4/netfilter/ip_tables.o: insmod ip_tables failed
          iptables v1.2.5: can't initialize iptables table `filter': iptables who? (do you need to insmod?)
          Perhaps iptables or your kernel needs to be upgraded.


          開始以為是服務器上安裝oracle8i時,降了gcc版本造成的,折騰好幾天,無意中在google上用“init_module: Device or resource busy”做關鍵詞google到某個maillist中的提示信息,恍然大悟

          首先停掉ipchains服務
          #chkconfig --level 345 ipchains off
          # service ipchains stop
          Flushing all chains: [  OK  ]
          Removing user defined chains: [  OK  ]
          Resetting built-in chains to the default ACCEPT policy:[  OK  ]
          去掉ipchains的模塊
          # rmmod ipchains

          使用vi編輯/etc/sysconfig/iptables文件(具體用哪個文件,要看/etc/rc.d/init.d/iptables腳本)。

          # Firewall configuration written by redhat-config-securitylevel
          # Manual customization of this file is not recommended.
          *filter
          :INPUT DROP [0:0]
          :FORWARD DROP [0:0]
          :OUTPUT ACCEPT [0:0]
          :RH-Firewall-1-INPUT - [0:0]
          -A INPUT -j RH-Firewall-1-INPUT
          -A FORWARD -j RH-Firewall-1-INPUT
          -A RH-Firewall-1-INPUT -i lo -j ACCEPT
          -A RH-Firewall-1-INPUT -p icmp -j ACCEPT
          -A RH-Firewall-1-INPUT -p 50   -j ACCEPT
          -A RH-Firewall-1-INPUT -p 51   -j ACCEPT
          -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

          -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.0/24  -j ACCEPT
          -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 61.138.209.0/24 -j ACCEPT
          -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 61.166.155.0/24 -j ACCEPT

          -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1521         -j ACCEPT

          -A RH-Firewall-1-INPUT -p udp -s 61.138.209.0/24 -j ACCEPT

          -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
          COMMIT

          啟動iptables服務
          #service iptables start
          Flushing all current rules and user defined chains: [  OK  ]
          Clearing all current rules and user defined chains: [  OK  ]
          Applying iptables firewall rules:
          [  OK  ]
          #chkconfig --level 345 iptables on



          posted @ 2005-11-21 18:58 mmwy 閱讀(1573) | 評論 (0)編輯 收藏

          折騰了很久,還是 char 發(fā)現的問題。

          在AS4 U2下,/etc/pam.d/ftp.vsftpd中如下定義

          auth  required   /lib/security/pam_userdb.so   db=/etc/vsftpd/vsftpd.login

          在使用db_load生成userdb文件時,應該使用

          db_load -T -t hash -f ftpuser /etc/vsftpd/vsftpd.login.db

          必須給定一個擴展名.db

          posted @ 2005-11-18 18:50 mmwy 閱讀(2136) | 評論 (0)編輯 收藏

          使用ww2的validator,taglib就只能使用xhtml了。taglib我一向討厭,再加上ww2 xhtml這套做得非常難看,自做主張的加一堆table、td之類的html標簽進去。

          看了一下xhtml的velocity模板,如果檢驗未通過,ww2將validators.xml中相應field檢驗失敗的message是放進fieldErrors里面的。

          checkbox.vm
          #if( $fieldErrors.get($parameters.name) )
            #set ($hasFieldErrors = $fieldErrors.get($parameters.name))
            #foreach ($error in $fieldErrors.get($parameters.name))
              <tr>
                  <td align="left" valign="top" colspan="2"><span class="errorMessage">$!error</span></td>
              </tr>
            #end
          #end

          <tr>
              <td valign="top" colspan="2">
          #* Use an extra table so that the checkbox doesn't align with the other columns. *#
          <table width="100%" border="0" cellpadding="0" cellspacing="0">
              <tr>
                  <td valign="middle">#parse("/template/simple/checkbox.vm")</td>
                  <td width="100%" valign="middle"><label #if ($parameters.id) for="$!webwork.htmlEncode($parameters.id)"#end#if ($hasFieldErrors) class="checkboxErrorLabel"#else class="checkboxLabel"#end>$!webwork.htmlEncode($parameters.label)</label></td>
              </tr>
          </table>
          #parse("/template/xhtml/controlfooter.vm")

          我使用的模板引擎是freemarker,參照xhtml的vm代碼,自己寫了個marco。

          <#macro validError local>
              <#if req.method=='POST'>
                  <#if
                      fieldErrors?has_content &&
                      fieldErrors[local]?exists
                  >
                      <br>
                      <font color="red">
                          <#list fieldErrors[local] as error>
                              ${error}
                          </#list>
                      </font>
                  </#if>
              </#if>
          </#macro>

          模板示例:
                      <tr>
                          <td width="80" align="right">登錄密碼:</td>
                          <td>
                          <input type="password" name="model.password"
                              value="${model.password?if_exists}" size="24">
                          <@validError local="model.password"/>
                          </td>
                      </tr>
          posted @ 2005-11-18 12:07 mmwy 閱讀(1413) | 評論 (0)編輯 收藏

          在FreeMarker中,session是一個Hash。
          在處理hash類型時,我以前一直是用Session["xxxx"]來讀取的,今天翻freemarker manual,發(fā)現有這么一個示例。

          <#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
          - Joe is ${ages.Joe}
          - Fred is ${ages.Fred}
          - Julia is ${ages.Julia} 

          照此,修改了一下手上的nav.ftl模板

              <#if Session.user?exists>
                  <p align="right">
                  <a href="logout.ftl">注銷[${Session.user.loginName}]</a>
                  </p>
              </#if>
          posted @ 2005-11-18 12:06 mmwy 閱讀(3548) | 評論 (0)編輯 收藏

          最初我是用spring的aop來實現spring與orbroker“結合”的,在befor的時候把orbroker和trans注進 service去,after的時候commit,如果出現exception由rollback。怎么看怎么別扭,還是 江南白衣 這個“刨蟲”提醒了一下,說是spring module的cvs上有orbrokerTemplate。

          有現成的東西,俺就不用現學木匠造輪子了,省事省心,還順眼。

          從spring module的cvs上下源碼,把org.springmodules.orm.orbroker、org.springmodules.orm.orbroker.support兩個package的東西拷進project(或者是打成jar扔進去)。

          與ibatis、hibernate一樣,java代碼部分很簡單,我做的測試代碼就這么幾行
          public interface ResultDAO {
            List find(String parentId, String catalogId);
          }
          public class ResultDAOORBroker extends BrokerDaoSupport implements ResultDAO {
            public List find(String parentId, String catalogId) {
              return this.getBrokerTemplate().selectMany("find",
                  new String[]{"parentId", "catalogId"},
                  new String[]{parentId, catalogId});
            }
          }
          public interface ResultManager {
            List<Result> find(String parentId, String catalogId);
          }

          public class ResultManagerImpl implements ResultManager {

            @SuppressWarnings("unchecked")
            public List<Result> find(String parentId, String catalogId) {
              return resultDAO.find(parentId, catalogId);
            }

            private ResultDAO resultDAO;
            public void setResultDAO(ResultDAO resultDAO) {
              this.resultDAO = resultDAO;
            }
          }
          最主要的還是xml的配置文件,與用ibatis大體上差不了多少。

          DataSource、TransactionManager是必須的
              <bean id="TransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                  <property name="dataSource" ref="DataSource" />
              </bean>
              <bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
                  <property name="driverClass" value="${marekt.jdbc.driver}" />
                  <property name="user" value="${marekt.jdbc.user}" />
                  <property name="password" value="${marekt.jdbc.password}" />
                  <property name="jdbcUrl" value="${marekt.jdbc.url}" />
                  <property name="initialPoolSize" value="2" />
              </bean>
              <bean id="PlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
                  <property name="locations" value="classpath:jdbc.properties" />
              </bean>
          然后是一個Broker的Factory
              <bean id="BrokerFactory" class="org.springmodules.orm.orbroker.BrokerFactoryBean">
                  <property name="dataSource" ref="DataSource" />
                  <property name="configLocation" value="classpath:orbroker/orbroker.xml" />
              </bean>

          剩下的事情就是DAO和Manager了。
              <bean id="ResultDAO" class="dao.impl.ResultDAOORBroker">
                  <property name="broker" ref="BrokerFactory" />
              </bean>
              <bean id="ResultManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                  <property name="transactionManager" ref="TransactionManager" />
                  <property name="transactionAttributes">
                      <props>
                          <prop key="*">PROPAGATION_REQUIRED</prop>
                      </props>
                  </property>
                  <property name="target">
                      <bean class="services.impl.ResultManagerImpl">
                          <property name="resultDAO" ref="ResultDAO" />
                      </bean>
                  </property>
              </bean>
          posted @ 2005-11-15 23:48 mmwy 閱讀(481) | 評論 (0)編輯 收藏

          在O/R Broker User Guide的“Sub queries”部分講得非常清楚了,主要就是檢索的時候定義一個sub query。
          public class Organization {
           private Integer id;
           private Employee manager;
           private Set employees;//子查詢就做在這兒了
          }

          定義result-object的時候處理一下
          <result-object id="Organization" class="my.package.Organization">
          。。。。
           <property name="employees">
            <sub-query sql-statement="selectEmployeesByOrganization">
             <set-parameter name="organizationId" from-column="OrganizationID"/>
            </sub-query>
           </property>
          。。。。
          </result-object>
          posted @ 2005-11-15 23:48 mmwy 閱讀(420) | 評論 (0)編輯 收藏

          僅列出標題
          共4頁: 上一頁 1 2 3 4 下一頁 
          主站蜘蛛池模板: 南康市| 民和| 文山县| 百色市| 河南省| 辉南县| 岑溪市| 晋中市| 绥棱县| 怀柔区| 沙河市| 环江| 普兰店市| 玛曲县| 兴海县| 同德县| 宝兴县| 承德市| 额尔古纳市| 肥西县| 杭锦后旗| 临颍县| 辉县市| 嫩江县| 台中县| 连平县| 大悟县| 行唐县| 武汉市| 司法| 霞浦县| 璧山县| 兰西县| 安阳市| 普安县| 和田市| 武安市| 汾西县| 五莲县| 南雄市| 河源市|