
2005年9月8日
grails應(yīng)用以war包的方式發(fā)布到weblogic本來應(yīng)該是沒有什么問題的,也不需要像網(wǎng)上說的那樣進行weblogic的配置,但是有兩個小問題在實際的使用中需要注意:
1.我的應(yīng)用中,使用了spring-security-cas的插件來實現(xiàn)cas client,但是不知道為什么在生產(chǎn)war包是,在web.xml中,有兩個CAS Single Sign Out Filter的mapping,結(jié)果導致發(fā)布失敗,需要手工刪除一個(目前的解決辦法)
2.grails的urlmapping插件,如果映射“/”到某個action,目前好像是不成功的,但是只要不是“/”,則沒有這個問題。如果默認的根目錄不是index.gsp,這個可能需要在訪問“/”時進行跳轉(zhuǎn)的處理。
posted @
2011-02-09 16:21 雪地孤鴻 閱讀(514) |
評論 (0) |
編輯 收藏
1.weblogic必須是10.3.4.0或以上版本,由于cas server采用了spring 2.5的版本,使用JPA2.0的原因,weblogic10.3.4之前的版本不支持jpa2.0
2.cas server webapp 如果以war的方式發(fā)布,會因為log4j.xml的問題而不能正常發(fā)布,具體原因還沒有完全弄清楚,但是如果以解開后的文件夾目錄的方式發(fā)布則沒有問題。
posted @
2011-02-09 16:16 雪地孤鴻 閱讀(3249) |
評論 (2) |
編輯 收藏
測試環(huán)境下使用的是mysql數(shù)據(jù)庫,切換到正式的oralce數(shù)據(jù)庫中去發(fā)現(xiàn)cas server是無效的,主要的原因是由于數(shù)據(jù)庫的差異導致的
認證用戶的sql語句在mysql
下為:
select password from user_login where username=? and e
nabled=true
而在oracle下應(yīng)該為
select password from user_login where username=? and
enabled=1
主要由于oralce和mysql對boolean字段的處理不一致導致的。
posted @
2011-01-26 09:05 雪地孤鴻 閱讀(708) |
評論 (0) |
編輯 收藏
cas server logout后,默認是停留在cas的退出頁面,一般我們需要重新轉(zhuǎn)向到客戶端網(wǎng)站的登錄或是相關(guān)的頁面,一般需要進行一下配置
1.cas-server端,配置文件為/WEB-INFO/cas-servlet.xml中的logoutController
<bean id="logoutController" class="org.jasig.cas.web.LogoutController"
p:centralAuthenticationService-ref="centralAuthenticationService"
p:logoutView="casLogoutView"
p:warnCookieGenerator-ref="warnCookieGenerator"
p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"
p:followServiceRedirects="true"/>
posted @
2011-01-21 13:38 雪地孤鴻 閱讀(1051) |
評論 (1) |
編輯 收藏
經(jīng)過將近兩天的測試,參考眾多網(wǎng)友的貢獻,終于完成了對cas的主要配置和測試,現(xiàn)記錄如下
基本需求:
1.cas server-3.4.5,casclient-3.2(官方版本),均可在cas官方網(wǎng)站下載,http://www.jasig.org
2.使用低成本的http協(xié)議進行傳輸,俺買不起ssl證書
3.通過jdbc進行用戶驗證
4.需要通過casserver提供除登錄用戶名以外的附加信息
參考資料:
1.cas官方網(wǎng)站的用戶幫助手冊和wiki
2.網(wǎng)友“城市獵人”的blog,http://yuzhwe.javaeye.com/blog/830143
3.網(wǎng)友“悟空悟道”的blog,http://llhdf.javaeye.com/blog/764385
4.其他網(wǎng)友貢獻的相關(guān)的blog,都是通過google出來,就不一一列出了,一并致謝!!!
好了,下面進入正題,如果您不想測試中出現(xiàn)異常情況,或是獲取不到相關(guān)數(shù)據(jù),請關(guān)注文中的紅色字體部分。
(1)使用http協(xié)議的設(shè)置,如果您也像我一樣,買不起ssl數(shù)字證書,對安全的要求也不是特別的搞,下面的配置就可以幫助解決這個問題:
在cas-server-webapp中的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml文件中有如下配置
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true" //默認為true,使用https,如果只需要http,修改為false即可
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />
(2)使用jdbc數(shù)據(jù)源進行用戶認證,需要修改cas的authenticationHandlers方式,在文件/WEB-INF/deployerConfigContext.xml有如下配置:
<property name="authenticationHandlers">
<list>
<!--
| This is the authentication handler that authenticates services by means of callback via SSL, thereby validating
| a server side SSL certificate.
+-->
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient" />
<!--
| This is the authentication handler declaration that every CAS deployer will need to change before deploying CAS
| into production. The default SimpleTestUsernamePasswordAuthenticationHandler authenticates UsernamePasswordCredentials
| where the username equals the password. You will need to replace this with an AuthenticationHandler that implements your
| local authentication strategy. You might accomplish this by coding a new such handler and declaring
| edu.someschool.its.cas.MySpecialHandler here, or you might use one of the handlers provided in the adaptors modules.
+-->
<!--<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />-->
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="select password from userInfo where username=? and enabled=true" />
//用戶密碼編碼方式
<property name="passwordEncoder"
ref="passwordEncoderBean"/>
</bean>
</list>
</property>
該屬性中的list只要用一個認證通過即可,建議將紅色部分放在第一位,如果確認只用jdbc一種方式,其他認證方式均可刪除。另外需要在在文件中添加datasoure和passordEncoder兩個bean,如下
<!-- Data source definition -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8</value> //如果使用mysql數(shù)據(jù)庫,應(yīng)該加上后面的編碼參數(shù),否則可能導致客戶端對TGT票據(jù)無法識別的問題
</property>
<property name="username"><value>root</value></property>
<property name="password"><value>password</value></property>
</bean>
<bean id="passwordEncoderBean" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
<constructor-arg value="SHA1" /> //cas
server默認支持MD5和SHA1兩種編碼方式,如果需要其他的編碼方式例如SHA256,512等,可自行實現(xiàn)org.jasig.cas.authentication.handler.PasswordEncoder接口
</bean>
附加備注:如果您是使用cas server的源碼自行編譯的話,需要在cas-server-web模塊的pom.xml中添加如下模塊的依賴:
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${project.version}</version>
</dependency>
并添加對應(yīng)數(shù)據(jù)庫的jdbc的jar包。
(3)讓cas server提供更多的用戶數(shù)據(jù)共客戶端使用
通過測試,由于cas的代碼更新過程中的變化較大,所以包兼容的問題好像一直存在,在測試中我就碰到過,花費時間比較多,建議同學們在使用過程中使用官方的最新的發(fā)布版本。在我使用的這個版本中,請參考前面的關(guān)于server和client端的版本說明,應(yīng)該沒有包沖突的問題,測試通過。下面進行配置,配置文件:/WEB-INF/deployerConfigContext.xml
<property name="credentialsToPrincipalResolvers">
<list>
<!--<bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" />-->
<!-- modify on 2011-01-18,add user info -->
<bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" >
<property name="attributeRepository" > //為認證過的用戶的Principal添加屬性
<ref local="attributeRepository"/>
</property>
</bean>
<bean
class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" />
</list>
</property>
修改該文件中默認的 attributeRepositorybean配置
<!-- 在這里配置獲取更多用戶的信息 -->
<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
<constructor-arg index="0" ref="dataSource" />
<constructor-arg index="1" value="select id as UId, password_hint as ph from userInfo where username=? and enabled=true" />
<property name="queryAttributeMapping">
<map>
<entry key="username" value="uid"/><!-- 這里必須這么寫,系統(tǒng)會自己匹配,貌似和where語句后面的用戶名字段的拼寫沒有什么關(guān)系 -->
</map>
</property>
<!-- 要獲取的屬性在這里配置 -->
<property name="resultAttributeMapping">
<map>
<entry key="UId" value="userId" /> //key為對應(yīng)的數(shù)據(jù)庫字段名稱,value為提供給客戶端獲取的屬性名字,系統(tǒng)會自動填充值
<entry key="ph" value="passwordHint" />
</map>
</property>
</bean>
備注:網(wǎng)上有很多的關(guān)于這個的配置,但是如果您使用的是我提供的版本或是高于這個版本,就應(yīng)該象上面這樣配置,無用質(zhì)疑,網(wǎng)上大部分的配置都是基于
person-directory-impl,person-directory-api
1.1左右的版本,而最新的cas使用的是1.5的版本,經(jīng)過查看源代碼和api docs確定最新版本的屬性參數(shù)如上配置。
修改該xml文件中最后一個默認的serviceRegistryDao bean中的屬性全部注釋掉,或者刪除,
這個bean中的RegisteredServiceImpl的ignoreAttributes屬性將決定是否添加attributes屬性內(nèi)容,默認為false:不添加,只有去掉這個配置,
cas server才會將獲取的用戶的附加屬性添加到認證用的Principal的attributes中去,我在這里犯過這樣的錯誤,最后還是通過跟蹤源碼才發(fā)現(xiàn)的。
<bean
id="serviceRegistryDao"
class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
<!--
<property name="registeredServices">
<list>
<bean class="org.jasig.cas.services.RegisteredServiceImpl">
<property name="id" value="0" />
<property name="name" value="HTTP" />
<property name="description" value="Only Allows HTTP Urls" />
<property name="serviceId" value="http://**" />
</bean>
<bean class="org.jasig.cas.services.RegisteredServiceImpl">
<property name="id" value="1" />
<property name="name" value="HTTPS" />
<property name="description" value="Only Allows HTTPS Urls" />
<property name="serviceId" value="https://**" />
</bean>
<bean class="org.jasig.cas.services.RegisteredServiceImpl">
<property name="id" value="2" />
<property name="name" value="IMAPS" />
<property name="description" value="Only Allows HTTPS Urls" />
<property name="serviceId" value="imaps://**" />
</bean>
<bean class="org.jasig.cas.services.RegisteredServiceImpl">
<property name="id" value="3" />
<property name="name" value="IMAP" />
<property name="description" value="Only Allows IMAP Urls" />
<property name="serviceId" value="imap://**" />
</bean>
</list>
</property>-->
</bean>
修改WEB-INF\view\jsp\protocol\2.0\casServiceValidationSuccess.jsp文件,如下:
<%@ page session="false"%>
<%@ taglib prefix="c" uri=">
<%@ taglib uri="
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationSuccess>
<cas:user>${fn:escapeXml(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.id)}</cas:user>
<c:if test="${not empty pgtIou}">
<cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>
</c:if>
<c:if test="${fn:length(assertion.chainedAuthentications) > 1}">
<cas:proxies>
<c:forEach var="proxy" items="${assertion.chainedAuthentications}"
varStatus="loopStatus" begin="0"
end="${fn:length(assertion.chainedAuthentications)-2}" step="1">
<cas:proxy>${fn:escapeXml(proxy.principal.id)}</cas:proxy>
</c:forEach>
</cas:proxies>
</c:if>
<c:if
test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)
>
0}">
<cas:attributes>
<c:forEach
var="attr"
items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}"
varStatus="loopStatus"
begin="0"
end="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)-1}"
step="1">
<cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
</c:forEach>
</cas:attributes>
</c:if>
</cas:authenticationSuccess>
</cas:serviceResponse>
客戶端配置:
1.過濾器CAS Validation Filter:
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class> org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>http://domainserver:8081/cas</param-value>
</init-param>
</filter>
在客戶端獲取信息
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
String loginName = principal.getName();//獲取用戶名
Map<String, Object> attributes = principal.getAttributes();
if(attributes != null) {
System.out.println(attributes.get("userId"));
System.out.println(attributes.get("passwordHint"));
}
posted @
2011-01-21 10:06 雪地孤鴻 閱讀(15883) |
評論 (9) |
編輯 收藏
最近在使用G2G做項目,開發(fā)環(huán)境的數(shù)據(jù)庫為Mysql,在使用grails的分頁組件時沒有任何問題,但是將數(shù)據(jù)庫切換到ORACLE上就出現(xiàn)了問題,在分頁的時候,記錄總數(shù)是對了的,但在進行翻頁的時候,總會有前一頁的數(shù)據(jù)存在,而當前的數(shù)據(jù)總是顯示不對,經(jīng)過將近一天的仔細排查才找到問題的關(guān)鍵,主要是由于數(shù)據(jù)庫的差異引起的,由于的我的查詢不需要進行排序,所以在原來的查詢結(jié)果中沒有就排序語句,這就導致在mysql中完全正常的功能,到了oralce中每次查詢的排序不一致,結(jié)果就導致在翻頁的時候總有前一頁的數(shù)據(jù)存在,可能是由于數(shù)據(jù)庫的引擎規(guī)則的不一致導致的。
再次記下!
posted @
2010-12-13 11:15 雪地孤鴻 閱讀(713) |
評論 (0) |
編輯 收藏
今天早上出來給老婆大人買早點,騎著老婆大人的小車,在路上奔馳,突然一種思緒飛入腦中,想想自己也是三十多歲的人了,卻是一事無成。我本IT出生,參加工作以來,卻一直徘徊在IT技術(shù)的和行業(yè)解決方案之間搖擺,最后終于下定決心朝著行業(yè)解決方案的方向發(fā)展,卻選擇了一個旅游行業(yè),雖說春秋在國內(nèi)也算的上不錯的旅游公司,但這個行業(yè)確實亂象叢生。該公司在信息化方面更是不知所謂,早三暮四。雖然我不應(yīng)該對公司說三道四,但還是忍不住要說兩句。算了,這個都是我個人的抉擇,我現(xiàn)在是IT技術(shù)方面沒有什么看家的本事,行業(yè)知識也沒有什么,長此以往,很是危險,隨著年齡的增長,抗風險能力會越來月差,我必須要重新的思考和抉擇,不然真的要落的老婆大人預見的場景了,我自己不甘心這樣,也 不能讓老婆看扁啊。行業(yè)的解決方案肯定是我的房展方向,是繼續(xù)在這個行業(yè)發(fā)展,還是重新挑選行業(yè),這是個比較重要的決定,但是不管怎么樣,我的老本行--IT技術(shù)也支撐不了幾年了,我必須要反省,深思我過去的規(guī)劃和執(zhí)行,重新規(guī)劃和執(zhí)行,努力的保障家庭幸福的經(jīng)濟基礎(chǔ),開拓新的事業(yè)。
今天在這里寫下如此的只言片語,就是為了鞭策自己,不能讓自己在被短期的利益而動搖長期的規(guī)劃和執(zhí)行,年紀也不小了,還沒有一個像樣的事業(yè),以后的風險會越來越大。
最近在試用Grails進行開發(fā)一個小項目,需要使用oracle數(shù)據(jù)庫,我使用的是Oracle 11g,簡單的配置如下:
1.添加jdbc lib到Grails項目的lib中,我使用的是ojdcb6_g.jar
2.修改grails生成項目的DataSource.groovy文件中關(guān)于DataSource的相關(guān)配置:關(guān)鍵點是關(guān)于hibernate方言的配置,由于grails默認使用的是HSQL內(nèi)存數(shù)據(jù)庫,推薦使用的是mysql數(shù)據(jù)庫;但是在使用oracle數(shù)據(jù)庫時,需要配置hiernate的方言;其他的如URL,drive,username,password等配置和一般的配置沒有什么區(qū)別,詳細配置如下:
dataSource {
pooled = true
driverClassName = "oracle.jdbc.OracleDriver"
username = "paygateway"
password = "paygateway"
dialect = "org.hibernate.dialect.OracleDialect"
logSql = true
}
posted @
2010-03-19 13:38 雪地孤鴻 閱讀(2001) |
評論 (1) |
編輯 收藏
公司剛剛買了一臺Thinkpad R400(7445-A63),預裝的vista home basic版本,由于第一次使用thinkpad系列,只是制作了一個start Recovery Disk盤,忘了制作系統(tǒng)恢復光盤,暈倒,不知道聯(lián)想能否免費提供哦,那可是俺花銀子買的阿。當時急著想試用一下win7(當然是盜版的),所以就把硬盤格掉了,后來想恢復的時候已經(jīng)晚了,因為我沒有win7的序列號,沒有辦法,只能重回xp時代了。
由于硬盤是sata的,安裝過程很是郁悶,開始都引導不了,后來狠狠的google一把,終于搞定了:
1.進入BIOS-》CONIF,將硬盤的模式修改為compatibility,原來為ACHI
2.到聯(lián)想的官方網(wǎng)站,現(xiàn)在相關(guān)xp的驅(qū)動(http://think.lenovo.com.cn),網(wǎng)友提供列表如下;我是全部打包下載了:)
安裝主板芯片組驅(qū)動(Intel Chipset Drivers)
安裝硬盤SATA驅(qū)動(Intel Matrix Storage Manager)
安裝ACPI電源驅(qū)動,即Power Manager Driver
安裝Lenovo System Interface Driver
啟動系統(tǒng),系統(tǒng)安裝顯卡驅(qū)動
安裝網(wǎng)卡驅(qū)動
安裝無線驅(qū)動
如果此系統(tǒng)安裝為XP2的系統(tǒng),那么要安裝MODOM和聲卡的前提是安裝讀卡器(也有人叫HD總線)補丁: KB888111XPSP2.EXE;
安裝聲卡驅(qū)動和補丁
安裝貓驅(qū)動
安裝藍牙驅(qū)動
安裝讀卡器驅(qū)動
安裝智能讀卡器驅(qū)動
安裝指紋驅(qū)動
安裝PCI簡易通訊控制器,也就是AMT(INTEL的主動管理技術(shù)
安裝TPM安全芯片的驅(qū)動程序
安裝攝像頭驅(qū)動和補丁:7yca02ww.exe,Q909667.rar。
安裝微軟雙核補丁和其他補丁:KB896256.exe, KB936357.exe, schedulerupdater.exe。
安裝UltraNav driver
安裝UltraNav Utility
3.驅(qū)動安裝完成后,重啟機器,進入BIOS,將硬盤模式修改回原來的ACHI模式
4.不知到何時能用上正中的win7盜版,感覺還是不錯,雖然我平時已經(jīng)不太用win系統(tǒng)了。:)
posted @
2009-12-20 11:25 雪地孤鴻 閱讀(1559) |
評論 (2) |
編輯 收藏
ofbiz默認的數(shù)據(jù)庫為derby,這個當然不能在生產(chǎn)環(huán)境中使用,而且也不方便調(diào)試和管理。雖然ofbiz也支持很多的開源數(shù)據(jù)庫,例如mysql等,但是我們這里還是使用主流的數(shù)據(jù)庫系統(tǒng)oracle 11g.詳細的操作如下
1.更新JDBC驅(qū)動,將oracle最新的jdbc驅(qū)動copy到${ofbiz install dir}/framework/entity/lib/jdbc 目錄下。
2.設(shè)置實體引擎( Entity Engine)的缺省數(shù)據(jù)庫為oracle.在修改 ${ofbiz install dir}/framework/entity/config/entityengine.xml文件中修改配置:
a.修改數(shù)據(jù)庫連接參數(shù):
<datasource name="localoracle"
helper-class="org.ofbiz.entity.datasource.GenericHelperDAO"
schema-name="ofbiz" 你的數(shù)據(jù)庫schema名稱
field-type-name="oracle"
check-on-start="true"
add-missing-on-start="true"
alias-view-columns="false"
join-style="ansi">
<read-data reader-name="seed"/>
<read-data reader-name="seed-initial"/>
<read-data reader-name="demo"/>
<read-data reader-name="ext"/>
<inline-jdbc
jdbc-driver="oracle.jdbc.driver.OracleDriver"
jdbc-uri="jdbc:oracle:thin:@192.168.1.154:1521:ofbiz" ofbiz為你的數(shù)據(jù)庫SID
jdbc-username="ofbiz" 用戶名
jdbc-password="ofbiz" 密碼
pool-minsize="2"
pool-maxsize="250"/>
</datasource>
b. 修改實體引擎的數(shù)據(jù)庫缺省配置如下:(將datasource-name的值設(shè)置為“localoracle”)
<delegator name="default" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main" distributed-cache-clear-enabled="false">
<group-map group-name="org.ofbiz" datasource-name="localoracle"/>
<group-map group-name="org.ofbiz.olap" datasource-name="localoracle"/>
</delegator>
<delegator name="default-no-eca" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main" entity-eca-enabled="false" distributed-cache-clear-enabled="false">
<group-map group-name="org.ofbiz" datasource-name="localoracle"/>
<group-map group-name="org.ofbiz.olap" datasource-name="localoracle"/>
</delegator>
<!-- be sure that your default delegator (or the one you use) uses the same datasource for test. You must run "ant run-install" before running "ant run-tests" -->
<delegator name="test" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main">
<group-map group-name="org.ofbiz" datasource-name="localoracle"/>
<group-map group-name="org.ofbiz.olap" datasource-name="localoracle"/>
</delegator>
<delegator name="other" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main">
<group-map group-name="org.ofbiz" datasource-name="localoracle"/>
</delegator>
3.補充:在進行以上配置時,請確保你已經(jīng)存在ofbiz的數(shù)據(jù)庫,實例,用戶等都已創(chuàng)建好。
4. 初始化數(shù)據(jù)和導入:
ofbiz$ java -jar ofbiz.jar -install
通過以上命令即可進行數(shù)據(jù)庫的初始化和初始數(shù)據(jù)的導入,這里包括了ofbiz自帶的例子,應(yīng)用的所有的數(shù)據(jù)表和初始化數(shù)據(jù)
5.問題:
在使用oracle數(shù)據(jù)庫時,當前的版本可能會碰到ORA-01843:無效的月份的問題
以sys用戶登陸并創(chuàng)建Trigger:
create or replace TRIGGER ON_CONNECT AFTER LOGON ON DATABASE
DECLARE
guser varchar2(30);
begin
SELECT sys_context('USERENV','SESSION_USER') into guser FROM dual;
if (guser='ofbiz' or guser='OFBIZ') THEN
EXECUTE IMMEDIATE 'alter session set nls_timestamp_format = ''YYYY-MM-DD HH24:MI:SS.FF''';
end if;
end;
注意對登陸用戶名的判斷必須大小寫都要考慮.
另:ofbiz用戶不能擁有dba的權(quán)限,同時ofbiz用戶比需要有UNLIMITED TABLESPACE的權(quán)限,否則在創(chuàng)建數(shù)據(jù)表的時候會報“數(shù)據(jù)庫空間不足”的錯誤,導致無法創(chuàng)建表。
6.參考:
http://blog.csdn.net/blieveme/archive/2007/10/16/1826604.aspx
http://docs.ofbiz.org/display/~jacopoc/OFBiz+and+Oracle
今天就到這里吧,明天繼續(xù):)
posted @
2009-09-03 20:27 雪地孤鴻 閱讀(2613) |
評論 (3) |
編輯 收藏
apache版本2.2
自帶mod_deflate.so和mod_headers.so
如果沒有這兩個模塊,那么你就需要手工編譯并load這兩個模塊。
我是在虛擬主機下加入一下配置即可
<Location "/">
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>
記住,以上配置,需要放到<Directory></Directory>之后,apache官方網(wǎng)站這么說的:)
posted @
2009-08-26 09:17 雪地孤鴻 閱讀(191) |
評論 (0) |
編輯 收藏
今天發(fā)現(xiàn)linux服務(wù)器的/目錄磁盤使用率為100%,操作如下
主要通過du -sh查找占用磁盤較多的目錄
1.清除/var/log下的日志文件
2.清除/var/spool/mail下占用磁盤較多的郵件目錄(我的服務(wù)上主要是root用戶的郵件比較多導致的)
posted @
2009-07-02 17:25 雪地孤鴻 閱讀(4367) |
評論 (0) |
編輯 收藏
但是scim中文輸入不了, 上網(wǎng)找解決方案,最后成功的方法:
sudo apt-get install scim-qtimm 安裝scim的qt模塊
- sudo gedit /usr/bin/opera 在文件中加入export QT_IM_MODULE="scim"
啟動opera,問題解決。
環(huán)境:
ubuntu9.0.4
opera9.6
測試成功
posted @
2009-05-08 08:59 雪地孤鴻 閱讀(276) |
評論 (0) |
編輯 收藏
鳴謝:http://www.phpma.com/linux/20070908/392.html
Apache日志分析工具--AWStats6.9安裝使用
1、事先安裝好Apache
2、安裝awstats的命令(將awstats安裝在/opt/awstats目錄)
mkdir -p /var/lib/awstats
cd /opt
wget http://www.awstats.cn/files/awstats-6.6.tar.gz
tar zxvf awstats-6.6.tar.gz
mv awstats-6.6 awstats
cd awstats/tools/
perl awstats_configure.pl
3、Perl腳本awstats_configure.pl安裝過程(以下內(nèi)容引用AWStats英文使用說明)
(1)
-----> Running OS detected: Linux, BSD or Unix
Warning: AWStats standard directory on Linux OS is '/usr/local/awstats'.
If you want to use standard directory, you should first move all content
of AWStats distribution from current directory:
/opt/awstats
to standard directory:
/usr/local/awstats
And then, run configure.pl from this location.
Do you want to continue setup from this NON standard directory [yN] ?
這時選擇y回車。
(2)
-----> Check for web server install
Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf
Example: /usr/local/apache2/conf/httpd.conf
Example: c:\Program files\apache group\apache\conf\httpd.conf
Config file path ('none' to skip web server setup):
第一次使用請輸入Apache的httpd.conf路徑,例如/opt/sina/apache/conf/httpd.conf
以后如果再使用perl awstats_configure.pl生成配置文件,則可以輸入none跳過。
(3)
-----> Check and complete web server config file '/opt/sina/apache/conf/httpd.conf'
Warning: You Apache config file contains directives to write 'common' log files
This means that some features can't work (os, browsers and keywords detection).
Do you want me to setup Apache to write 'combined' log files [y/N] ?
選擇y,將日志記錄方式由CustomLog /yourlogpath/yourlogfile common改為更詳細的CustomLog /yourlogpath/yourlogfile combined
(4)
-----> Update model config file '/opt/awstats/wwwroot/cgi-bin/awstats.model.conf'
File awstats.model.conf updated.
-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ?
創(chuàng)建一個新的配置文件,選擇y
(5)
-----> Define config file name to create
What is the name of your web site or profile analysis ?
Example: www.mysite.com
Example: demo
Your web site, virtual server or profile name:
>
輸入站點名稱,例如sina
(6)
-----> Define config file path
In which directory do you plan to store your config file(s) ?
Default: /etc/awstats
Directory path to store config file(s) (Enter for default):
>
輸入AWStats配置文件存放路徑,一般直接回車則使用默認路徑/etc/awstats
(7)
-----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/opt/awstats/wwwroot/cgi-bin/awstats.pl -update -config=sina
Or if you have several config files and prefer having only one command:
/opt/awstats/tools/awstats_updateall.pl now
Press ENTER to continue...
按回車鍵繼續(xù)
(8)
A SIMPLE config file has been created: /opt/awstats/etc/awstats.sina.conf
You should have a look inside to check and change manually main parameters.
You can then manually update your statistics for 'sina' with command:
> perl awstats.pl -update -config=sina
You can also read your statistics for 'sina' with URL:
> http://localhost/awstats/
Press ENTER to finish...
按回車鍵結(jié)束
4、修改awstats.sina.conf配置
vi /etc/awstats/awstats.sina.conf
按?,在之后輸入要搜索的內(nèi)容LogFile="
然后按Ins鍵,找到LogFile="/var/log/httpd/access_log"
改為要分析的Apache日志路徑與文件名。
(1)多日志合并分析(例:新浪播客其中兩臺服務(wù)器2月6日的日志30.0206.vblog.log與31.0206.vblog.log)
LogFile="/opt/awstats/tools/logresolvemerge.pl /var/apachelogs/30.0206.vblog.log /var/apachelogs/31.0206.vblog.log|"
或
LogFile="/opt/awstats/tools/logresolvemerge.pl /var/apachelogs/*.0206.vblog.log|"
(2)分析使用gzip壓縮過的日志文件
LogFile="gzip -d </var/log/apache/access.log.gz|"
5、更新分析報告
perl /opt/awstats/wwwroot/cgi-bin/awstats.pl -config=sina -update
在實踐過程中,確實有該問題,只要刪除掉歷史日志記錄即可
如果出現(xiàn)以下錯誤提示,很大可能是Apache的Log文件中存在以前CustomLog /yourlogpath/yourlogfile common生成的日志,刪除掉這些行的日志即可:
This means each line in your web server log file need to have "combined log format" like this:
111.22.33.44 - - [10/Jan/2001:02:14:14 +0200] "GET / HTTP/1.1" 200 1234 "http://www.fromserver.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"
6、查看分析報告
http://localhost/awstats/awstats.pl?config=sina
這里的sina對應(yīng)/etc/awstats/awstats.sina.conf中的sina
7.awstats自動生成日志分析報告
需要root用戶權(quán)限,或者可以操作crontab -e命令的用戶權(quán)限:
(1)鍵入:crontab -e
(2)輸入以下系統(tǒng)定時任務(wù):
0 5 * * * /opt/awstats/wwwroot/cgi-bin/awstats.pl -config=www.google.com -update
每天凌晨5點執(zhí)行日志分析報告,opt/awstats/wwwroot/cgi-bin/awstats.pl為awstats安裝目錄下的perl命令,www.goolge.com為你安裝awstats時指定的網(wǎng)站域名。關(guān)于crontab命令的用法,可以google一下。
8.awstats基礎(chǔ)安全設(shè)置
(1)linux系統(tǒng)中必須存在用戶,如果不存在可以按以下方式操作
groupadd awsuser #增加awstats用戶組
useradd -g awsuser awstats #增加awstats用戶,并歸屬awsuser用戶組
(2)在apache安裝目錄下新建文件夾
mkdir passwd
(3)運行如下代碼產(chǎn)生用戶名為awstats用戶及其密碼
opt/apache/bin/htpasswd -c /opt/apache/passwd/passwords awstats
鍵入密碼和驗證密碼即可
(4)配置httpd.conf
<Directory "/opt/awstats-6.9/wwwroot">
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /usr/local/apache2/password/passwords
Require user awsspring
</Directory>
附:
(2)測試環(huán)境:在DELL PowerEdge 1950/2950 服務(wù)器+red hat as 4.6/5.0 as Linux操作系統(tǒng)+Apache 2.2.11下測試通過。
posted @
2009-04-08 16:54 雪地孤鴻 閱讀(1145) |
評論 (0) |
編輯 收藏
1 . WDG HTML Validator 一個很好的工具,能找出網(wǎng)站語法錯誤的地方,并標注出來,也可選擇對網(wǎng)站上單獨的每一頁進行單頁分析。(
強烈推薦 )
2 . W3C Markup Validation Service 對 HTML 和 XHTML 都能進行代碼測試,自稱是互聯(lián)網(wǎng)絡(luò)上第一個(也是使用者最多的)的 HTML 驗證工具。
3 . W3C CSS Validation Service 用于驗證 css 源代碼,能夠標注出不好的 css 代碼設(shè)計。例如:“Same colors for color and background-color in two contexts”。
4 . RUWF XML Syntax Checker 用于查找 XML 文件的錯誤。
5 . W3C Feed Validation Service 用于查找 Atom 和 RSS feed 中的錯誤語法。( 這個我經(jīng)常用到 )
6 . W3C Link Checker 用于搜尋查明你網(wǎng)站內(nèi)的所有鏈接里是否有斷鏈。( 強烈推薦 )
7 . Juicy Studio Link Analyser 測試網(wǎng)站內(nèi)的鏈接的 URL 是否存在死鏈,與 W3C Link Checker 很類似。
網(wǎng)站的使用性
我們常常看到網(wǎng)站設(shè)計者把重點放在怎網(wǎng)站的吸引力上,而完全不考慮會不會影響來訪者的使用,一個瀏覽難度很大的網(wǎng)頁是注定要失敗,要讓你的來訪者方便的得到他要的信息(從而成為重復訪客),你的網(wǎng)站應(yīng)當遵循 WCAG section 508 易用性規(guī)則。
8 . Watchfire WebXACT 所有嚴謹?shù)脑O(shè)計師和開發(fā)者都必須使用的工具,它會生成一個非常詳盡的報告書,包括:網(wǎng)站質(zhì)量,易用性和隱私等。( 強烈推薦 )
9 . ATRC Web Accessibility Checker 測試網(wǎng)站的 WCAG 2.0 Level2 兼容性,它會生成一份報告,提出一系列建議,如:如何提升頁頭,鏈接,數(shù)據(jù),圖表和文字的訪問速度。
10 . WAVE 3.0 Web Accessibility Tool 高度可定制的工具,它采用了圖形化模型展示網(wǎng)站兼容性問題( WCAG 1.0 and section 508 )。( 強烈推薦 )
11 . TAW Web Accessibility Test 測試網(wǎng)頁是否存在沖突( WCAG 1.0 兼容性 ),通過圖形模式生成一份依據(jù) wcag 優(yōu)先模式為基礎(chǔ)的網(wǎng)站修改建議。
12 . HiSoftware CynthiaSays portal 采用了非常嚴格的規(guī)則來測試網(wǎng)頁( 根據(jù) section 508 和 WCAG 1.0 規(guī)則 ),生成的報告也極為詳細( 詳細到很難看懂 )。
13 . HERA Accessibility testing with Style 使用一種極為復雜但容易理解方式指出網(wǎng)頁的 wcag1.0 兼容性問題。
14 . Juicy Studio CSS Analyser 進行了色彩對比測試,以確保你的網(wǎng)站的色調(diào)會符合 WCAG 1.0 的要求。
15 . Juiciy Studio Readability Test 分析你網(wǎng)站上的文字是否有語法錯誤或拼寫錯誤等問題,容易讓人理解不( 根據(jù) the Flesch Reading Ease 和 Flesch-Kincaid grade level algorithms 規(guī)則 )。( 適合英文網(wǎng)站使用 )
網(wǎng)站的速度
打開你的網(wǎng)站的速度快慢,是來訪者會不會再次訪問網(wǎng)站的關(guān)鍵因素,在一般情況下,一個網(wǎng)絡(luò)不是很快的來訪者是不愿意訪問一個充滿著圖片、flash 動畫、多媒體文件的網(wǎng)站。為了使你的網(wǎng)站覆蓋人群的范圍最大化,你必須優(yōu)化你的網(wǎng)站,使它的打開速度盡可能的快。
16 . Web Page Analyzer from Website Optimization 一個很好的工具,它在分析完一個網(wǎng)頁后,會為減少加載時間提出優(yōu)化建議,著重優(yōu)化物體的數(shù)目,圖片和網(wǎng)站的總體大小。( 強烈推薦 )
17 . WebSitePulse Test Tools 有一系列的工具來確定網(wǎng)站的加載速度和主機信息。
18 . Internet Supervision Url Check 從世界各地不同的服務(wù)器來測試你的網(wǎng)站的加載時間,用于確定是不是各地的來訪者都能順利快速的打開你得網(wǎng)站。
瀏覽器模擬工具
這是一個普遍的問題,因為現(xiàn)在有著很多的操作系統(tǒng)和瀏覽器,你得網(wǎng)站必須得兼容它們,但這絕不是一件容易的事。通過下列工具,你可以了解你得網(wǎng)站在各種瀏覽器上的顯示效果。
19 . Browsershots能給出你的網(wǎng)站在不同瀏覽器下顯示效果的截圖,包括:Firefox 和 Internet Explorer ( Windows)、Firefox 和 Safari ( Mac OS X )、Iceweasal 和 Konqueror ( Linux ),但是結(jié)果要在1 - 3 小時后才能出來。
20 . IE NetRenderer 實時生成你的網(wǎng)站在 Internet Explorer 5.5 、6.0 和 7.0 下的截圖。
21 . MobiReady Report 分析使用手機訪問網(wǎng)頁的兼容性問題,會生成一份詳細的報告,并提供了在兩種不同類型的手機瀏覽器上你得網(wǎng)站可能顯示的樣子。
搜索引擎優(yōu)化 (SEO)
一個網(wǎng)站,如果對搜索引擎有著比較好的友好度,一定會比較有競爭力。
22 . UrlTrends 會顯示網(wǎng)站的訪客是如何通過搜索引擎來到你的網(wǎng)站,還有各個流量是多少。這些數(shù)據(jù)是包括 Google, Yahoo, MSN, Alexa, AlltheWeb, AltaVista 和其他一些網(wǎng)站。( 強烈推薦 )
23 . iWEBTOOL Backlink Checker 一個很好的工具,它能找出有什么站點鏈接到你的站點,那些站點是什么類型的站點。
24 . iWEBTOOL Multi-Rank Checker 顯示你網(wǎng)站的 Alexa 和 Google PageRank 數(shù)值。
25 . Microsoft adCenter Labs: Advertising and Keyword Research Tools 一個極好的工具,用于分析和預測你網(wǎng)站的來訪者和市場。( 強烈推薦 )
26 . Domain Tools Whois lookup 一個 WHOIS 網(wǎng)絡(luò)工具。
27 . SEO-Browser 可以讓你看到在搜索引擎眼里一樣的網(wǎng)站( 去掉所有的”美麗”配件 )。
28 . SEO Workers SEO Analysis Tool 非常有用的工具,分析了網(wǎng)站上的各種分類特征,包括 meta 標簽、關(guān)鍵字密度及加載時間。( 強烈推薦 )
29 . Seekport Seekbot 可以分析網(wǎng)站的數(shù)據(jù)和內(nèi)容,以得出搜索引擎會如何有效的解釋分析的網(wǎng)站。
30 . SEO Chat SEO Tools 用以分析網(wǎng)站 Google adsense 盈利潛力,關(guān)鍵字密度,Meta tag 等等……
31 . Marketleap Search Engine Marketing Tools 用來分析網(wǎng)頁,讓你知道你的網(wǎng)站檢索、設(shè)定的關(guān)鍵字好不好。
原文:avivadirectory.com
譯者:peterzsk
譯文原地址:http://zsk.akaka.com.cn/2007/06/31-free-tests-online/
采用CC創(chuàng)作共用協(xié)議,轉(zhuǎn)載可保留以上信息并<署名、非商業(yè)和保持一致>。
posted @
2009-02-18 15:57 雪地孤鴻 閱讀(262) |
評論 (0) |
編輯 收藏
opencrx的大名,我就不介紹了,請參考www.opencrx.com(官方網(wǎng)站)或www.opencrx.com.cn(中文網(wǎng)站),我使用的是opencrx2.1,關(guān)于opencrx的安裝過程,無論是windows還是linux的安裝過程也不需要多說了,官方網(wǎng)站有很好的安裝說明文檔,圖文并茂,很是生動,幾乎太會不會安裝的了:),但是在啟動的過程中,出現(xiàn)了一點小插曲,讓我折騰了將近2個小時。下面就詳細說明一下:
一、在windows下安裝完成openmdxTomcatLwc-2.1.0和opencrx2.1.0之后,桌面上會出現(xiàn)五個快捷方式,雙擊那個都不會正常的啟動opencrx-server 的?關(guān)鍵是hsql會出現(xiàn)錯誤,他們需要組合使用才是有效的:),先啟動Start Services for Tomcat+LWC 2.1.0 (8080)(雙擊該圖標即可)啟動openmdx service服務(wù);然后在雙擊openCRX Server HSQLDB Console (9001)圖標,啟動hsql內(nèi)存數(shù)據(jù)庫,接著雙擊Start Tomcat+LWC 2.1.0 (8080)圖標,啟動opencrx-server服務(wù),到此為止,如果沒有看到任何異常,那就恭喜你了,服務(wù)完全啟動成功了!!!!還有兩個圖標,一個是Login Tomcat+LWC 2.1.0 (8080),這個就是訪問opencrx-server的登錄頁面的快捷方式而已,你在ie中輸入地址也是可以的,另外一個就Stop Tomcat+LWC 2.1.0 (8080),停止所有的web服務(wù)(openmdx-service和opencrx-server),最后的hsql服務(wù)需要手工停止。
啟動時需要組合拳,但是停止確實一鍵搞定,太讓人郁悶了:(
二、在Linux下,安裝過程可能并不向官方文檔描述的那樣,我們大部分所使用的linux應(yīng)該是不太會支持圖形界面的,但是官方的安裝文檔給出的是有圖形界面的,和window下極其相似,不過也沒有關(guān)系,只要是使用過linux(入門級即可)的應(yīng)該都可以根據(jù)提示完成安裝。不過在官方文檔的最后,在啟動opencrx-server的描述中,給出了一句極具誤導性的話“
Start Tomcat to start the openCRX Server”,也有可能是偶的e文不好的原因,反正我是理解為啟動tomcat即可了。后經(jīng)驗證,其實是需要通過"/installdir/opencrx2.1/bin/control.sh START"命令來啟動才可以。注意control.sh的參數(shù)“START”.linux下面的啟動過程比windows下稍微有好一點:)
好了,今天基本就這樣了,后面在慢慢研究opencrx吧,希望有興趣的朋友一起:)
posted @
2008-07-26 17:00 雪地孤鴻 閱讀(4325) |
評論 (2) |
編輯 收藏
關(guān)于JForum論壇的基本情況就不在此介紹了,官方網(wǎng)址:www.jforum.net.jforum論壇系統(tǒng)的安裝也很簡單,按照官方文檔,或者google一下,基本都可以搞定,在此就不在介紹了。大概描述一下我使用jforum的情況:
1.應(yīng)用服務(wù)器:weblogic8.1
2.數(shù)據(jù)庫:oracle10g
3.已有一個電子商務(wù)網(wǎng)站,需要和jforum進行簡單的集成,提供sso(單點登錄的功能)。
4.說明:已有的電子商務(wù)網(wǎng)站域名:http://www.123.com jforum域名:www.123.com/forum,電子商務(wù)網(wǎng)站和jfroum在統(tǒng)一臺服務(wù)器和同一應(yīng)用服務(wù)器下,如果分開可能會存在session或cookie訪問的問題。
5.JForum版本:2.1.8
下面簡要的介紹一下使用cookie進行jforum和電子商務(wù)網(wǎng)站的sso集成的過程:
(1)實現(xiàn)net.jforum.sso接口
public class CookieUserSSO implements SSO {
static final Logger logger = Logger.getLogger(CookieUserSSO.class.getName());
public String authenticateUser(RequestContext request) {
// login cookie set by my web LOGIN application
Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals
.getValue(ConfigKeys.COOKIE_NAME_USER));
String username = null;
if (cookieNameUser != null) {
username = cookieNameUser.getValue();
}
logger.info("cookie username="+username);
System.out.println("cookie username="+username);
return username; // return username for jforum
// jforum will use this name to regist database or set in HttpSession
}
public boolean isSessionValid(UserSession userSession,
RequestContext request) {
Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals
.getValue(ConfigKeys.COOKIE_NAME_USER)); // user cookie
String remoteUser = null;
if (cookieNameUser != null) {
remoteUser = cookieNameUser.getValue(); // jforum username
}
if (remoteUser == null
&& userSession.getUserId() != SystemGlobals
.getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {
// user has since logged out
return false;
} else if (remoteUser != null
&& userSession.getUserId() == SystemGlobals
.getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {
// anonymous user has logged in
return false;
} else if (remoteUser != null
&& !remoteUser.equals(userSession.getUsername())) {
// not the same user (cookie and session)
return false;
}
return true; // myapp user and forum user the same. valid user.
}
}
(2)修改SystemGlobals.properties中的配置:
修改SystemGlobals.properties文件中的一下屬性的內(nèi)容:
authentication.type = sso
sso.implementation = net.jforum.sso.CookieUserSSO
sso.redirect = http://www.123.com/login.jsp //可根據(jù)實際的登錄頁面地址進行修改
cookie.name.user = 123UserInfo //電子商務(wù)網(wǎng)站中保存的cookie名稱,可根據(jù)實際情況修改
(3)修改web應(yīng)用中的登錄和注銷部分的邏輯:
登錄部分加入以下代碼:
...
Cookie cookie = new Cookie("springTourUserInfo", sname);
cookie.setMaxAge(-1);
cookie.setPath("/");//cookie只在同一應(yīng)用服務(wù)器有效
response.addCookie(cookie);
...
注銷部分加入以下代碼:
......
Cookie cookie = new Cookie("springTourUserInfo", "");
cookie.setMaxAge(0); // delete the cookie.
cookie.setPath("/");
response.addCookie(cookie);
......
(4)在電子商務(wù)網(wǎng)站增加論壇的鏈接:
<a href="/forum">論壇</a>
基本配置完整,測試通過,如有問題,歡迎交流!
感謝網(wǎng)友提供的資料:
http://www.lifevv.com/java/doc/20080305224358885.html?page=0
http://www.99inf.net/SoftwareDev/Java/54230.htm(作者:王保政)
posted @
2008-06-26 16:54 雪地孤鴻 閱讀(4035) |
評論 (3) |
編輯 收藏
假設(shè)有webapp1, webapp2, cas server,webapp1, webapp2均受cas server保護
首先,我在這里簡單解釋一下:
第1種不能logout的情況:
1)登錄了WebApp1,redirect到caserver
casserver認證后,再redirect到webapp1,ok!
2)http方式 lougout casserver1,即http://yale_casserver:8080/cas/lougout
顯示logout成功
3)訪問webapp2,還能訪問!
這是非常正常的一種情況,因為你不通過https來注銷,casserver怎么"殺"掉
它通過https發(fā)給你的TGC Cookie?
第2種不能logout的情況:
1)登錄了WebApp1,redirect到caserver
casserver認證后,再redirect到webapp1,ok!
2)https方式 lougout casserver1,即https://yale_casserver:8443/cas/lougout
顯示logout成功
3)訪問webapp1,還能訪問!訪問webapp2,不能訪問,重定向到casserver要求登錄!
這也是非常正常的一種情況,因為你已經(jīng)能夠訪問,你繼續(xù)可以繼續(xù)訪問,
CASLogout不能阻止你訪問webapp1,它只能阻止你訪問webapp2,因為你已經(jīng)
被允許訪問webapp1,而webapp2則還沒有,如果你在(1)的時候,順帶也訪問
webapp2,那么你的注銷將毫無作用了,CAS無法阻止你訪問這兩個webapp,
因為你有Service Ticket。
如果你對此費解,那時因為你已為Logout就是退出系統(tǒng),那我只能表示遺憾,
因為CAS Logout的作用不是這樣,它的作用是阻止你繼續(xù)通過TGC(它簡單地
清楚了IE的TGC Cookie)來獲取ST,阻止你獲取通向其他web應(yīng)用的Ticket。
所以,用完webapp1的時候,注銷,然后再關(guān)閉掉IE就徹底Logout了。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1503551
posted @
2008-03-28 16:16 雪地孤鴻 閱讀(882) |
評論 (0) |
編輯 收藏
今天花了一個下午的時間,終于完成的cas配置的一次完整的運行。cas前世今生我就不介紹了,有興趣的朋友谷歌或是百度一下就可以有很詳細的了解了,重點記錄一下今天的配置過程和遇到的問題及解決方法。
環(huán)境:瀏覽器(ie6.0,windows xp)
cas server 在一臺Linux服務(wù)器,cas client在另外一臺linux服務(wù)器
應(yīng)用服務(wù)器為tomcat5.5.26
初步的配置實用過程參考了http://m.tkk7.com/yida/archive/2007/04/03/55466.html的描述,各位亦可以訪問阿木的blog。整理如下:
1.請下載到cas的官方網(wǎng)站下載cas-server(我用的是3.2)和cas-client(2.0.11),tomcat5.5.26
cas的官方網(wǎng)站:http://www.ja-sig.org/products/cas/
2.安裝cas-server,我們假定安裝cas-server的服務(wù)器為server1
(1)請在server1服務(wù)器上安裝好jdk1.5或以上版本的jdk,tomcat5.5.26,并配置環(huán)境變量JAVA_HOME
(2)將cas-server-3.2-release.zip解壓,將moudels目錄下cas-server-webapp-3.2.war拷貝到tomcat的webapps目錄下,修 改名稱為cas.war.
(3)生成server1的安全證書:
keytool -genkey -alias my-alias-name -keyalg RSA -keystore keystore-file
(4)在server1配置https
在$CATALINA_HOME/conf/server.xml里修改為一下配置
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/path/keystore-file" keystorePass="your-password"
/>
(5)導出server1的證書,用來給所有需要用到的客戶端導入
keytool -export -file myserver.cert -alias my-alias-name -keystore keystore-file
(6)將導出的證書上傳的client1服務(wù)器上。
(7)啟動server1上的tomcat,檢驗cas配置是否成功,訪問http://ip:8443/cas/login,如果能看到cas的登錄頁面則表示配 置成功。
3.配置 cas-client,我們以tomcat下自帶的servlet-example為例子進行說明
(1)請在client1服務(wù)器上安裝好jdk1.5或以上版本的jdk,tomcat5.5.26,并配置環(huán)境變量JAVA_HOME
(2)將cas-client-2.0.11.zip解壓,把java/lib/casclient.jar拷貝到client1服務(wù)器上的
webapps/servlets-examples/WEB-INF/lib目錄下(如果沒有就建一個)
(3)在要使用CAS的客戶端client1里設(shè)置(以servlets-examples這個APP為例),我們使用ServletFilter(CAS client里提供 的)來實現(xiàn)SSO的檢查,修改servlets-examples/WEB-INF/web.xml,添加以下內(nèi)容:
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://your.cas.server.name(eg:server1):port/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://your.cas.server.name(eg:server1):port/cas/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>your.client.server.name(eg:client1):port</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
(4)在客戶端的JVM里導入信任的SERVER的證書(根據(jù)情況有可能需要管理員權(quán)限)
keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file myserver.cert -alias my-alias-name
此時需要輸入密碼,默認密碼為changeit
通過以上配置,基本完成cas-server和cas-client的配置,但是還有以下問題需要注意和解決
由于cas的證書需要域名才能正確的進行認證信息的交互,不支持ip,如果server和client在同一臺機器上,可以使用localhost,如果像我們上面描述的三臺服務(wù)器這樣的環(huán)境,使用localhost或者ip是不能正常運行的。如果使用ip,運行時會拋出 HTTPS hostname wrong 的錯誤,解決的方法如下:
假設(shè)server1的ip為:192.168.10.1,client1的ip為192.168.10.2,開發(fā)機器(xp)的ip為:192.168.10.3
在server1和client1上設(shè)置本機的域名映射:
vi /etc/hosts 添加以下行
192.168.10.1 cas.server
在開發(fā)機器(xp)下,在C:\WINDOWS\system32\drivers\etc目錄下,編輯hosts文件,添加以下行
192.168.10.1 cas.server
重新生成cas-sever的服務(wù)器端的證書,在開始問“你的名字”或“DName”的時候,必須填寫你服務(wù)器所在域名(cas.server)
然后重新到處服務(wù)器器端的證書,并將其導入到client1服務(wù)器的jvm
最后修改修改servlets-examples/WEB-INF/web.xml中關(guān)于cas過濾器的配置:請將your.cas.server.name(eg:server1)修改為cas.server即可。重新啟動server1和client1的服務(wù)器上的tomcat就可正常運行。
ttp://client1:8080/servlets-examples/servlet/HelloWorldExample
系統(tǒng)會自動跳轉(zhuǎn)到一個驗證頁面,隨便輸入一個相同的賬號,密碼,嚴正通過之后就會訪問
到真正的HelloWorldExample這個servlet了
posted @
2008-03-25 18:05 雪地孤鴻 閱讀(4731) |
評論 (0) |
編輯 收藏
使用jbossTools創(chuàng)建seam website項目的注意事項,由于seam2.0本身標榜的口號是“企業(yè)級的java應(yīng)用程序框框架”,關(guān)鍵的賣點是“JSF和ejb3.0的深度集成”,所以使用jbossTools工具生成項目結(jié)構(gòu)是,也就天然的對ejb3.0的支持較好,但是如果不使用實體bean之類的東東,就需要對生成的項目的進行適當?shù)男薷牟趴梢哉5倪\行。我想這是jbossTools或是seam框架本身需要改進的地方,jbossTools向?qū)Р荒芨鶕?jù)客戶的需求很好的定制生成項目框架,表現(xiàn)的很不友好,對于初學者來說,很容易產(chǎn)生混淆。經(jīng)過將近兩天的測試,現(xiàn)總結(jié)如下(以seam2.0的example中hibernate2為例):
1.重建為jboss4.2下的seam2.0+hibernate項目:
需要注意的是:1.通過jbosstools工具生成的項目下面仍然會有“
persistence.xml”這個文件存在,如果發(fā)布到j(luò)boss應(yīng)用服務(wù)器下,仍然會導致jboss在啟動時通過該文件進行相關(guān)的數(shù)據(jù)庫連接。2.通過jbossTools生成的項目框架,都會默認的生成<項目名稱>-ds.xml文件,如果需要使用該文件,需要單獨發(fā)布,如果不需要,則要修改hibernate-cfg.xml文件的配置信息。
2.重建為tomcat6.0下的seam2.0+hibernate項目:
1.通過jbossTools無法之間在tomcat5.×下建立下項目框架,由于jsf1.2,seam1.2或seam2.0均需要serlet2.5,如果需要在tomcat5.×下創(chuàng)建項目,則只能進行手工配置。
2.在tomcat創(chuàng)建seam website項目,通過jbossTools無法創(chuàng)建完整的項目,相關(guān)的第三方包,需要從seam2.0的發(fā)布包中手動copy到當前下項目的classpath下(/WEB-INF/lib),主要的第三方包包括:
commons-*.jar,jsf-api.jar,jsf-impl.jar,jstl.jar,dom4j.jar,hibernate.jar,hibernate-commons-annotations.jar,hibernate-annotations.jar,hibernate-entitymanager.jar,hibernate-validator.jar,javassist.jar,persistence-api.jar,cglib.jar,jta.jar,antlr.jar
3.數(shù)據(jù)源也需要手動配置,如果配置為tomcat的jndi,請參考tomcat的相關(guān)文檔。
4.注意修改src/action和src/module源文件編譯的輸出路徑到/WEB-INF/classes目錄下,否則項目發(fā)布后可能會找到相關(guān)類路徑的錯誤。
5.其他有jbossTools生成的無關(guān)文件可以刪除。
在jboss4.2和tomcat6.0下通過jbossTools創(chuàng)建seam website項目框架需要注意的,暫時總結(jié)如上。本blog將持續(xù)更新有關(guān)seam2.0的學習心得。
歡迎交流!
posted @
2008-03-17 14:16 雪地孤鴻 閱讀(1740) |
評論 (3) |
編輯 收藏
同樣,經(jīng)過不斷的摸索和網(wǎng)友的幫助,終于搞定了:),主要的問題還是出在我的服務(wù)器上的原因,不知道為什么,我的服務(wù)器上部署了sqlite3.0導致apache2.2.6始終無法運行,總是提示找不到"libsqlite3.so.0",不得以,只能換臺服務(wù)器測試,輕松搞定,現(xiàn)將過程描述如下,一共參考:
一.安裝apache2.2.6
1. tar fvxz httpd-2.2.2.tar.gz
2. 進入解壓后的目錄。進行配置:
./configure --prefix=/usr/apache --enable-module=so --enable-proxy --enable-proxy-ajp --enable-forward --enable-proxy-connect --enable-proxy-http --enable-so --enable-deflate --enable-headers --enable-include
解釋:
-- prefix=/usr/apache是配置將要安裝到的目錄位置;
--enable-module=so配置Apache支持Dynamic Shared Objects (DSO)模式;
--enable-* 配置添加相應(yīng)的模塊;
3. 編譯(編譯如果不成功,確認一下你的linux是否安裝有編譯所需要的c環(huán)境和其他需要的類庫):
make
4. 安裝:
make install
5. 編輯/usr/apache/conf/httpd.conf文件,把端口改為80(別跟tomcat的端口沖突):
ServerName:80
二、安裝tomcat5.5.17
直接解壓壓縮包到指定目錄就可以,再次就不多少說了(當然,最好在進行以上兩項操作前先按裝好jdk,1.5或以上版本)
三、簡單的apche2.2.6+tomcat5.5.17配置說明:
使用使用proxy_ajp整合apache和tomcat,由于Apache2.2對以往版本有較大改動,引進了proxy
模塊,所以Apache2.2和Tomcat5.5的配置需要用到mod_proxy.so等文件(不再使用jk 或 jk2 等tomcat連接器)
.基本配置如下:
(一)加載解析模塊
windows下,或linux采用動態(tài)加載(DSO)模式下需配置。前面我們的linux編譯時把下面的模塊嵌入到了 apache中,所以不用再加載,因此下面的兩行也不用再httpd.conf文件中添加了
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module
modules/mod_proxy_ajp.so
(二)使用proxy_ajp代理, 下面的配置,是把所有目錄全用代理
使用vi編輯器打開apache的配置文件/conf/httpd.conf,在#LoadModule××××××行的后面添加 以下兩行即可:
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse /
ajp://127.0.0.1:8009/
(三)禁止使用proxy_ajp代理的目錄:
如果對于某些目錄不想使用proxy_ajp代理轉(zhuǎn)發(fā),可以按照如下配置(配置方式同上面(二)的操 作):
ProxyPass /images/ !
(禁止images目錄下的內(nèi)容使用proxy_ajp代理轉(zhuǎn)發(fā))
配置到現(xiàn)在,重啟一下apache,就可通過apache來訪問tomcat的服務(wù)了。
特別鳴謝:http://groups.csdn.net/Apache/topic/b70ad273-f66f-4699-83c0-e11d354d262a.aspx
posted @
2007-12-24 18:03 雪地孤鴻 閱讀(949) |
評論 (1) |
編輯 收藏
exp user1/psw1@service1 owner=user1 file=d:\user_data_20060822.dmp log = d:\user_logout_20060822.log
imp user2/psw2@service2 file=d:\user_data_20060822.dmp log =d:\user_login_20060822.log fromuser=user1 touser=user2
posted @
2007-08-03 14:02 雪地孤鴻 閱讀(326) |
評論 (0) |
編輯 收藏
現(xiàn)在安裝netbeans 5.5默認的UI 語言為中文,如果需要修改為中文,只需在netbeans的安裝目錄中進行適當?shù)脑O(shè)置就可以了:
1.進入$netbeans/etc
2.使用文本編輯器打開netbeans.conf.
3.在“netbeans_default_options”項后添加“--locale language=en”。
4.重啟netbeans即可見到e文的netbeans 的UI
以上的設(shè)置在windows xp下測試通過,在linux的下的設(shè)置類似。
posted @
2007-07-15 15:17 雪地孤鴻 閱讀(1016) |
評論 (1) |
編輯 收藏
在部署roller3.0的源代碼的時候,每次啟動tomcat后訪問首頁的時候就報錯,提示找不到c.tld,但是standard.jar和jstl.jar都以放到lib目錄下了,郁悶之極,最后發(fā)現(xiàn)是因為在lib下放了一個jsp-api.jar的包導致的
,只要將該包從lib下移除即可了,在此感謝網(wǎng)絡(luò)上不吝賜教的朋友們:)
posted @
2006-12-04 15:27 雪地孤鴻 閱讀(2302) |
評論 (3) |
編輯 收藏
1.首先是去下載rller2.3的源代碼文件,下載地址:http://rollerweblogger.org/
由于roller采用了xdoclet,所以在下載的源代碼中有些內(nèi)容是沒有的,主要缺少的內(nèi)容如下:
???(1)package org.roller.presentation.forms
???(2)src下缺少相關(guān)的hbm文件
???(3)version.properties
???(4)roller.tld
2.由于缺少以上的東西,導致源代碼導入工程后,編譯都不能通過。我不是太懂xdoclet的使用,所以只好缺什么,就給他什么了,盡量滿足他的要求了。在roller-src(roller2.3解壓后的文件)下有ant的腳本,所以我猜想,通過腳本,一定可以生成所有缺少的文件,事實也確實如此,只是在使用ant腳本生成roller web的過程也是坎坷的:),主要是應(yīng)為roller開發(fā)小組為了省事,把一些開源的第三方包給去掉了,所以需要自己給補上。不然就會生成不成功。現(xiàn)記錄如下:
(1)加上hibernate3.2.1.jar
??????在/roller/src/tools目錄下建立/hibernate-3.1/lib文件夾,將hibernate3.jar文件copy到該目錄下面
(2)加上j2ee.jar
??? 將j2ee.jar(或jboss-j2ee.jar)copy到/roller-src/tools/buildtime/xdoclet-1.2.3/文件夾下
(3)添加javamail的相關(guān)包:mail.jar,actiivation.jar
???將mail.jar,activation.jar copy到/roller-src/tools/lib目錄下面。
然后在windows下進入roller-src目錄,使用下面命令即可生成roller web,同時可以生成以上缺省的文件:
> build all
然后就可以在roller-src/build目錄尋找你需要的文件,同時也有發(fā)布好的roller web了
roller2.3的安裝發(fā)布可以參考roller官方發(fā)布的安裝文檔即可。
大功告成,可以開始學習和修改roller2.3的源碼了!:)
posted @
2006-11-01 15:28 雪地孤鴻 閱讀(977) |
評論 (1) |
編輯 收藏
linux+php5.1.6+mysql5.0.2+apache2.0.55安裝配置說明:
一、mysql5.0.2的安裝配置過程及說明:
1、 #tar -zvxf mysql-5.0.2-alpha.tar.gz
2、 cd mysql5.0.2
3、 ./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql --with-charset=gbk
#--prefix=/usr/local/mysql mysql安裝的目標目錄
#sysconfdir=/etc my.ini配置文件的路徑
#localstatedir=/var/lib/mysql 數(shù)據(jù)庫存放的路徑
#--with-charset=gbk 數(shù)據(jù)庫默認的字符集(如果需要支持中文,則必須加上該選項)
4、make
5、make install
6、make clean
安裝完成......
7、初始化數(shù)據(jù)庫
cd /usr/local/mysql/bin
./mysql_install_db
如果系統(tǒng)沒有mysql這個用戶的話,最好做以下這步:
useradd -M -o -r -d /var/lib/mysql -s /bin/bash -c "MySQL Server" -u 27 mysql
然后我啟動mysql
/usr/local/mysql/bin/mysqld_safe &
ok,先看看mysql能否正常工作
mysql -uroot mysql
如果一切正常則表示數(shù)據(jù)庫啟動成功,恭喜你了... ...
8、做完上面的步驟,然后把你編譯目錄的一個腳本COPY過去
(mysql.server在/usr/local/mysql/share/mysql/目錄下)
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
以后啟動/停止數(shù)據(jù)庫就可以使用下面的命令:
/etc/rc.d/init.d/mysqld start
/etc/rc.d/init.d/mysqld stop
二、apache20.55的安裝配置說明:(DSO動態(tài)編譯)
# tar -zvxf httpd-2.0.55.tar.gz
# cd httpd-2.0.55
# ./configure --prefix=/usr/local/apache2 --enable-mods-shared=most --enable-so
# make
# make install
# make clean
apache2安裝完成,可以啟動apache,看看能否看到那可愛的羽毛... ...
三、php5的安裝配置說明:
在安裝php5的過程中,真是一波三折,后來還是參考了網(wǎng)上的文章,加載了N多的庫才搞定,所以這記錄如下
1、 libxml2安裝
源代碼:libxml2-2.6.26.tar.gz
操作指令:
# tar -zxvf libxml2-2.6.26.tar.gz
# cd libxml2-2.6.26
# ./configure
# make
# make install
# make clean
2、zlib安裝
源代碼:zlib-1.2.3.tar.tar
操作指令:
# tar -zxvf zlib-1.2.3.tar.tar
# cd zlib-1.2.3
# ./configure
# make
# make install
# make clean
3、libpng安裝
源代碼:libpng-1.2.12.tar.gz
操作指令:
# tar -zxvf libpng-1.2.12.tar.gz
# cd libpng-1.2.12
# cp scripts/makefile.std makefile
編輯 makefile 將 prefix 改為 prefix=/usr/local/libpng2
# make
# mkdir /usr/local/libpng2
# make install
# make clean
4、jpeg安裝
源代碼:jpegsrc.v6b.tar.tar
操作指令:
# tar -zxvf jpegsrc.v6b.tar.tar
# cd jpeg-6b
# ./configure --prefix=/usr/local/jpeg6 --enable-shared
# make
# mkdir /usr/local/jpeg6
# mkdir /usr/local/jpeg6/include
# mkdir /usr/local/jpeg6/lib
# mkdir /usr/local/jpeg6/bin
# mkdir /usr/local/jpeg6/man
# mkdir /usr/local/jpeg6/man/man1
# make install-lib
# make install
# make clean
5、GD安裝
源代碼:gd-2.0.33.tar.gz
操作指令:
# tar -zxvf gd-2.0.33.tar.gz
# cd gd-2.0.33
# ./configure --prefix=/usr/local/gd2 --with-zlib --with-png=/usr/local/libpng2 --with-jpeg=/usr/local/jpeg6
編輯 Makefile 231行 將
CPPFLAGS = -I/usr/local/jpeg6/include (該選項也可能為空,只要參考下面的修改就可以了)
改為
CPPFLAGS = -I/usr/local/jpeg6/include -I/usr/local/libpng2/include
# make
# make install
# make clean
6、libiconv安裝
源代碼:libiconv-1.9.2.tar.gz
操作指令:
# tar -zxvf libiconv-1.9.2.tar.gz
# cd libiconv-1.9.2
# ./configure --prefix=/usr/local/libiconv
# make
# make install
# make clean
將iconv.h連接到php的安裝源程序中(php的安裝源程序必須要和iconv.h在同一磁盤目錄下面,否則link會出錯),否則會php make會出錯
# cd /usr/home/ty/php-5.1.6/ext/iconv/(該目錄為php的安裝源程序目錄)
#這里的php-5.1.6就是下面解壓縮的路徑
# link /usr/local/libiconv/include/iconv.h iconv.h
7、開始安裝PHP5
源代碼:php-5.1.6.tar.gz
操作指令:
# tar -zxvf php-5.1.6.tar.gz
# cd php-5.1.6
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-xml --with-mysql=/usr/local/mysql --with-zlib --with-jpeg-dir=/usr/local/jpeg6 --with-png-dir=/usr/local/libpng2 --with-iconv=/usr/local/libiconv --with-config-file-path=/usr/local/lib --disable-debug --enable-safe-mode --enable-trans-sid --enable-memory-limit --enable-short-tags --disable-posix --enable-exif --enable-ftp --enable-sockets
# make
# make install
# make clean
# cp /usr/src/php-5.1.6/php.ini-dist /usr/local/lib/php.ini
php安裝完成 ... ...
8、把php加到apache里去
操作指令:
# vi /usr/local/apache2/conf/httpd.conf
(1)在httpd.conf文件相應(yīng)的地方添加下面幾行(如果在安裝php5時,有的配置可以已經(jīng)加上了,就不需要再重新添加了)
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
在DirectoryIndex index.html index.html.var 后面添加index.php
配置完成... ...
四、測試
然后放個info.php文件上去測試看看成功
vi /usr/local/apache2/htdocs/test.php
輸入以下代碼,保存。
<?
phpinfo();
?>
然后啟動apache,訪問http://your ip(or your website)/info.php
如果能夠看看php的相關(guān)信息,恭喜你,你的所有的配置成功了。!
以上的配置,一共花了我將經(jīng)兩天的時間,終于成功了,衷心的感謝網(wǎng)上無償提供幫助的朋友,在此記錄下來,希望對其他人也能提供一定的幫助!
時隔多日,重新安裝apache2.2.11+php5.2.9+mysql6.0
三個應(yīng)用的安裝基本沒有太大的變化,只是更加友好了:),關(guān)鍵是配置讓我花了點時間,很是郁悶,幾天沒有關(guān)注,事情就變樣了。IT界發(fā)展的就是快啊:),下面就詳細說說配置中遇到的問題吧:
一、apache2.2.11配置
相對以前的版本,apache的配置文件分成了多個配置文件,本想配置一個vhost,但是在httpd.conf中就是沒有找到,最后G了一下才發(fā)現(xiàn),虛擬主機的配置已經(jīng)被單獨為一個配置文件了。在httpd.conf文件中去掉“Include conf/extra/httpd-vhosts.conf”該行前面的注釋,讓后進入conf/extra目錄,打開httpd-vhosts.conf進行配置即可。
二、mysql6.0的安裝:
由于mysql已經(jīng)被sun收購,發(fā)布方式也有所變化了,目前官方網(wǎng)站上提供的了都是rpm的安裝方式,及其方便:rpm -ivh ***.rpm即可。但是和以前自己編譯的方式有點不一樣,需要安裝server,client,MySQL-devel-community-6.0.9-0.rhel5.x86_64.rpm,有可能還要share包。不然在和php結(jié)合使用時會有問題。
三、php5.2.9的安裝配置
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-xml --with-gettext=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613 --with-mysql=/usr/lib/mysql
上面是我的配置,主要用來運行g(shù)allery2.3.這里需要說明的有g(shù)ettext(多語言支持)的配置:
1.首先進入到php源碼包中
cd /opt/php-5.1.2/ext/gettext
2. 在gettext文件夾下產(chǎn)生configure文件
/opt/php/bin/phpize
3. 配置編譯
./configure --with-php-config=/opt/php/bin/php-config --with-gettext
make && make install
4. 在/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613下產(chǎn)生一個gettext.so文件
5.重新配置編譯安裝php
mysql6.0配置:
安裝php的時候,之前一直提示msyql client包找不到,由于我使用的是linux as 5 x86_64的操作信息,mysql client 包是存放在/usr/lib64下面,而php默認是在/usr/lib下尋找,所以需要如下解決:
1.做個軟連接即刻解決 ln -s /usr/lib64/mysql /usr/lib
2.按上面的配置執(zhí)行即可。
鳴謝:http://www.oschina.net/p/php/thread/87
posted @
2006-10-20 15:05 雪地孤鴻 閱讀(15313) |
評論 (4) |
編輯 收藏
本想使用打包后的war來控制發(fā)布的版本,但是在發(fā)布后,編譯jsp文件時卻出現(xiàn)編譯錯誤:
Exception compiling Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK
ERROR 09-14? 14:07:56,726 [TP-Processor3] (ApplicationContext.java:675) - Exception:
Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK
?at org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:105)
?at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:924)
?at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:757)
?at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:320)
?at org.apache.jasper.compiler.Compiler.compile(Compiler.java:370)
?at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:473)
?at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:190)
?at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
?at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
?at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
?at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
?at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
?at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
?at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
?at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
?at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
?at com.mdcchina.util.Validates.FromFilter.doFilter(Unknown Source)
?at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
?at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
?at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
?at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
?at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
?at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
?at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
?at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
?at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
?at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
?at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
?at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)
?at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)
?at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)
?at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
?at java.lang.Thread.run(Thread.java:595)
ERROR 09-14? 14:07:56,734 [TP-Processor3] (ApplicationDispatcher.java:704) - Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP
An error occurred at line: -1 in the jsp file: null
Generated servlet error:
??? [javac] Compiling 1 source file
需要將jdk下面的tools.jar包加入到應(yīng)用的classpath下面,或是將其copy到tomcat的/common/lib下
才能解決該問題:)
posted @
2006-09-14 16:59 雪地孤鴻 閱讀(4419) |
評論 (2) |
編輯 收藏
最近,運行的tomcat服務(wù)器在正常運行將近2個月后,拋出如下錯誤:
警告: Reinitializing ServerSocket
2006-7-28 15:07:40 org.apache.tomcat.util.net.PoolTcpEndpoint acceptSocket
嚴重: Endpoint ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=80] ignored exception: java.net.SocketException: Too many open files
java.net.SocketException: Too many open files
?at java.net.PlainSocketImpl.socketAccept(Native Method)
?at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
?at java.net.ServerSocket.implAccept(ServerSocket.java:450)
?at java.net.ServerSocket.accept(ServerSocket.java:421)
?at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
?at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:407)
?at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:70)
?at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
?at java.lang.Thread.run(Thread.java:595)
原本以為是tomcat的配置或是應(yīng)用本身的問題,"谷歌"一把后才發(fā)現(xiàn),該問題的根本原因是由于系統(tǒng)文件資源的限制導致的。具體可以參考
http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html的說明。具體的解決方式可以參考一下:
1。ulimit -a 查看系統(tǒng)目前資源限制的設(shè)定。
???[root@test security]# umlimit -a
-bash: umlimit: command not found
[root@test security]# ulimit -a
core file size??????? (blocks, -c) 0
data seg size???????? (kbytes, -d) unlimited
file size???????????? (blocks, -f) unlimited
max locked memory???? (kbytes, -l) unlimited
max memory size?????? (kbytes, -m) unlimited
open files??????????????????? (-n) 1024
pipe size????????? (512 bytes, -p) 8
stack size??????????? (kbytes, -s) 8192
cpu time???????????? (seconds, -t) unlimited
max user processes??????????? (-u) 7168
virtual memory??????? (kbytes, -v) unlimited
[root@test security]#
通過以上命令,我們可以看到open files 的最大數(shù)為1024
那么我們可以通過一下命令修改該參數(shù)的最大值
2. ulimit -n 4096
[root@test security]# ulimit -n 4096
[root@test security]# ulimit -a
core file size??????? (blocks, -c) 0
data seg size???????? (kbytes, -d) unlimited
file size???????????? (blocks, -f) unlimited
max locked memory???? (kbytes, -l) unlimited
max memory size?????? (kbytes, -m) unlimited
open files??????????????????? (-n) 4096
pipe size????????? (512 bytes, -p) 8
stack size??????????? (kbytes, -s) 8192
cpu time???????????? (seconds, -t) unlimited
max user processes??????????? (-u) 7168
virtual memory??????? (kbytes, -v) unlimited
這樣我們就修改了系統(tǒng)在同一時間打開文件資源的最大數(shù),基本解決以上問題。
另外我們可以通過lsof? -p [進程的 pid]來查看系統(tǒng)當前打開的文件資源,可以了解不同時期系統(tǒng)的文件資源的使用情況,可根據(jù)情況進行系統(tǒng)資源的配置。
posted @
2006-07-31 11:39 雪地孤鴻 閱讀(4125) |
評論 (0) |
編輯 收藏
這幾天要用到一個簡單的權(quán)限管理,本來想用struts-Menu簡單搞定,但是很是郁悶的是不知道怎么樣將tomcat的角色應(yīng)用到struts-menu中,在網(wǎng)上搜了好久,終于在www.yahoo.com.cn中找了不知道是那位大俠的文章,在此感謝了,也希望能給他人方便,特轉(zhuǎn)貼到此:
剛剛接觸Struts Menu的時候,對Struts Menu基于角色的菜單顯示很好理解,但是如何將Web應(yīng)用中的角色管理映射到Struts Menu中,是困擾筆者良久的問題。經(jīng)過摸索,在查閱了Tomcat的手冊之后,筆者找到了答案。
?
Servlet容器和web應(yīng)用都可以控制web應(yīng)用資源的安全,因此Tomcat管理域有容器管理和應(yīng)用程序管理兩種,默認使用容器管理。通常web應(yīng)用中使用的登陸Servlet和JSP則是應(yīng)用程序管理。這就涉及到Realm的概念。
?
Tomcat在%CATALINA_HOME%/conf/server.XML文件中配置Realm,結(jié)合在%CATALINA_HOME%/WEB-INF/mywebapp/web.xml文件中配置的<security-constraint>,定義了存儲用戶和角色的信息,以及進行用戶驗證的方式。
?
Tomcat中定義的Realm有如下幾種實現(xiàn):UserDatabaseRealm、JDBCRealm、JNDIRealm和JAASRealm。下載Tomcat解壓縮后默認使用的是UserDatabaseRealm。該Realm從%CATALINA_HOME%/conf/tomcat-users.xml靜態(tài)文件中加載內(nèi)存,Tomcat運行期間不會動態(tài)加載。因此所有的用戶、角色和密碼都是在Tomcat啟動之前配置好的,只存在于內(nèi)存中。修改tomcat-users.xml文件后必須重新啟動Tomcat,該文件的具體配置請參考Tomcat手冊。
?
本文要著重介紹的是JDBCRealm,該Realm使用關(guān)系數(shù)據(jù)庫,能夠動態(tài)訪問數(shù)據(jù)。用戶、角色和密碼都保存在數(shù)據(jù)庫中,一旦數(shù)據(jù)庫有變化,JDBCRealm會立即訪問。相應(yīng),JDBCRealm的設(shè)置需要數(shù)據(jù)庫的訪問參數(shù)。Tomcat5.0.28中給出了幾種數(shù)據(jù)庫的配置參數(shù),示例如下:
?
<Realm? className="org.apache.catalina.realm.JDBCRealm"
?
debug="99" digest="MD5"
?
???????????? driverName="Oracle.jdbc.driver.OracleDriver"
?
????????? connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"
?
???????? connectionName="scott" connectionPassword="tiger"
?
????????????? userTable="users" userNameCol="user_name" userCredCol="user_pass"
?
????????? userRoleTable="user_roles" roleNameCol="role_name" />
?
?
?
屬性說明如下:
className是實現(xiàn)Realm的類名,對于JDBCRealm必須是org.apache.catalina.realm.JDBCRealm。
?
debug設(shè)置調(diào)試信息的詳細程度等級,0表示不調(diào)試,數(shù)字越大越詳細。
?
digest是數(shù)據(jù)庫中密碼字段的加密摘要算法名稱,有SHA、MD2或MD5,默認是cleartext,即不加密。
?
driverName是數(shù)據(jù)庫訪問的JDBC驅(qū)動
?
connectionURL是數(shù)據(jù)庫訪問URL參數(shù)
?
connectionName和connectionPassword是訪問數(shù)據(jù)庫的名稱和密碼
userTable是web應(yīng)用中存儲用戶信息的表名
userNameCol是用戶信息表中存儲用戶登陸名稱的字段名
userCredCol是用戶信息表中存儲用戶登陸密碼的字段名
userRoleTable是將用戶角色映射表名
roleNameCol是角色表中存儲角色名稱的字段名
有了這些定義,web應(yīng)用中定義的用戶和角色就可以在Struts Menu中,用于配置基于角色可見與否的菜單。
?
posted @
2006-04-12 10:26 雪地孤鴻 閱讀(784) |
評論 (0) |
編輯 收藏
在網(wǎng)上找了很久,看了很多的文檔,終于將appfuse成功的編譯,發(fā)布了:這樣感謝廣大網(wǎng)友的無私奉獻了,好了,閑話少說了,具體的操作如下:
Appfuse1.9,JDK1.5,ANT1.6.2,Mysql5.0,Tomcat5.5
一.環(huán)境設(shè)置:
以下環(huán)境變量均按本機的安裝路徑設(shè)置即可。
ANT_HOME,
JAVA_HOME,
CATALINA_HOME,
MYSQL_HOME
Path中加入
%JAVA_HOME%bin;%ANT_HOME%bin;%CATALINA_HOME%bin;%MYSQL_HOME%bin;
二 在eclipse中使用ant編譯,發(fā)布,測試appfuse
1.Create New Java Project in Eclipse
Open Eclipse (either with an existing or a new workspace) and to go File → New → Project. Then select "Java Project" and hit the Next button. In the Project Name field, enter the name of your project (i.e. appfuse) and the directory that your project lives (i.e. c:\source\appfuse) in the box below. If you're prompted to switch the Java Perspective, choose Yes.
If you try to build the project at this point, you'll likely get numerous errors. Most of them involve the fact that the UserForm class can not be found. This is because all of the ActionForms in AppFuse (if you're using the Struts version) are generated from POJOs with XDoclet.
All of the tasks for XDoclet are configured in the Ant build.xml file so the easiest thing to do is to run "ant gen-forms" to generate the ActionForms. If you have Ant 1.6.2+ installed and in your path, you can do this from the command line. The next step shows you how configure Eclipse to run your AppFuse build.xml.
2.Configuring Ant in Eclipse
The easiest way to configure Eclipse for AppFuse is to install Ant on your hard drive (i.e. c:\Tools\apache-ant-1.6.2) and then point Eclipse's ANT_HOME to this directory. To do this, go to Window → Preferences → Ant → Runtime. Then click the "Ant Home" button and select the installation folder on your hard drive.
If you'd rather use Eclipse's built-in Ant, you'll need to add junit.jar to its classpath. To do this, go to Window → Preferences → Ant → Runtime. Then click the "Add JARs" button and select junit.jar from appfuse/lib/junit3.8.1/lib/junit.jar. Click OK until you arrive back at the workbench view.
Next, add the catalina-ant.jar (from $CATALINA_HOME/server/lib) to the ant classpath. Then in the property tab, add tomcatTasks.properties (in lib/ant-contrib) file as a global properties file.
Below is a screenshot of what your Ant Runtime classpath should look like after the above modifications:

3.Add build.xml to Ant View
Now we need to add the build.xml to Eclipse's Ant View. To do this, go to Window → Show View → Ant. Then click on the first icon in this view (screenshot below) to add AppFuse's build file.

4.Run Ant
After adding the build.xml, you should be able to expand it in the Ant View and execute any of the targets. I usually do "test-all" to verify all the tests pass in my initial project. For a list of targets I use most often, see AppFuse Ant Targets.
Now if you run the "compile" target and then refresh the project (right-click on project → Refresh) you shouldn't see any errors in the "Problems" pane. You should now be able to compile and create classes as you normally would. Sometimes when my imports aren't resolving correctly in Eclipse, I do have to run Project → Clean in Eclipse.
NOTE: If you're using the internal version of Ant, you may get an error message like the one below:
BUILD FAILED: C:\source\appfuse\build.xml:802: The following error occurred while executing this line:
C:\source\appfuse\build.xml:780: The following error occurred while executing this line:
java.lang.NoClassDefFoundError: org/apache/xml/serialize/OutputFormat
This is because there are tasks that require Xerces to be in your Ant classpath [reference]. I added xercesImpl.jar and xml-apis.jar (from my self-installed version of Ant) to Eclipse's Ant classpath to solve this.
5.Run JUnit Tests in Eclipse
It's also possible to run your JUnit tests in Eclipse. But before running them, you need to run the "war" target. After this target completes, refresh your project.
After you have successfully done so, in Eclipse open a test you'd like to run (i.e. UserDaoTest) and go to Run → Debug As → JUnit Test. Note that you may have to run the "db-load" target before you run your tests every so often. I did have the following method in the Base*TestCase class for each layer, but this caused DBUnit to reload the database before every test in a Test class. Removing it reduces the execution time of "test-all" by more than 30 seconds.
?
??? protected void setUp() throws Exception {
??????? DataSource ds = (DataSource) ctx.getBean("dataSource");
??????? IDatabaseConnection conn = new DatabaseConnection(ds.getConnection());
??????? IDataSet dataSet =
??????????? new XmlDataSet(new FileInputStream("metadata/sql/sample-data.xml"));
??????? // clear table and insert only sample data
??????? DatabaseOperation.CLEAN_INSERT.execute(conn, dataSet);
??????? conn.close();
??? }?
If the instructions above don't work for running JUnit tests in Eclipse, I suggest just using the command line - i.e. ant test-dao -Dtestcase=UserDAO. Running tests from the command line always works. ;-)
好了 ,在eclipse中基本按以上操作就可以成功了,等有時間,我來翻譯一下,雖然我的e文比較爛,但是還是樂于讓大家校正的
:)原文的地址:http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuseEclipse
問題描述
1.剛開始的時候,我們的mysql的用戶名和密碼可能和appfuse的默認的用戶和密碼會不一樣的,這個可以到properties.xml文件中修改為我們安裝mysql是設(shè)置的用戶名和密碼,我的修改如下:
?<!-- Defaults for database.properties -->
??? <property name="database.jar" location="${mysql.jar}"/>
??? <property name="database.type" value="mysql"/>
??? <property name="database.name" value="appfuse"/>
??? <property name="database.host" value="localhost"/>
??? <property name="database.username" value="root"/>
??? <property name="database.password" value="780121"/>
???
??? <!-- database URL for creating other dbs - used in db-create target -->
??? <property name="database.admin.url" value="jdbc:${database.type}://${database.host}/mysql"/>
??? <property name="database.admin.username" value="root"/>
??? <property name="database.admin.password" value="780121"/>
??? <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
??? <property name="database.driver_class" value="com.mysql.jdbc.Driver"/>
??? <property name="database.url"
??????? value="jdbc:${database.type}://${database.host}/${database.name}?useUnicode=true&amp;characterEncoding=utf-8"/>
??? <property name="database.show_sql" value="true"/>
我是修改了root用戶的密碼,當然你也可以建立test用戶并給初始密碼:)
2.連接數(shù)據(jù)庫的問題解決后,另外一個問題有出來了,建立user_role表的時候出問題了:org.dbunit.dataset.NoSuchTableException: user_role
這個問題的解決方式如下:
setup-tomcat deploy
ant setup -Ddatabase.username=foo -Ddatabase.password=bar
這個主要是先執(zhí)行以下build.xml中的setup-tomcate deploy指令就可以了:)
原載地址:http://b0r0j0.blogbus.com/logs/2005/12/1725103.html
posted @
2006-04-07 19:55 雪地孤鴻 閱讀(1889) |
評論 (0) |
編輯 收藏
最近在一個充值平臺上使用了HSQL來記錄用戶的充值記錄,本來所有的記錄是寫到文件里面的,但是由于使用ORACLE的慣性思維導致我浪費了半天的時間.具體情況是這樣:
我使用的是HSQL的IN-PROCESS(Standalone)模式,這樣在WEB啟動的時候,我就會去創(chuàng)建數(shù)據(jù)庫,按照HSQL的文檔,如果存在<dbname>.script文件的話,數(shù)據(jù)庫就會將歷史數(shù)據(jù)插入到數(shù)據(jù)庫中,但是在這里我放了一個慣性的錯誤,我們在ORCALE或是其他的常用數(shù)據(jù)庫中創(chuàng)建表時,一般要先刪除就表,讓后在創(chuàng)建新的表,這樣我就把HSQL的歷史記錄都刪除了,郁悶啊,這可是用戶的充值記錄啊,以后我怎么對帳啊,:)還好我有備份.
在HSQL更本不需要這樣的操作,他自己會去做這樣的事情:如果<dbname>.script存在,他就直接執(zhí)行了這個script,如果沒有他才回去創(chuàng)建新的數(shù)據(jù)庫和表結(jié)構(gòu).
posted @
2005-12-26 21:44 雪地孤鴻 閱讀(1287) |
評論 (1) |
編輯 收藏
最近將手上的項目(tomcat5.0+spring+struts)的jdk1.4升級到1.5的時候,出現(xiàn)了一堆的問題,經(jīng)過不懈的努力和網(wǎng)上朋友的提示終于將問題解決了,現(xiàn)在記錄如下
1.java.lang.UnsupportedClassVersionError: com/mdcchina/userinfo/logic/UserManager (Unsupported major.minor version 49.0)提示如上的錯誤,很是郁悶
經(jīng)過研究和比較在兩個不同環(huán)境下的編譯運行,終于發(fā)現(xiàn)這個主要是由于我的機子上安裝了兩個不同版本的JDK導致的,我想很多的朋友在嘗試新的JDK的時候,可能不會刪除1.4的版本,但是要注意的是要將JAVA_HOME,CLASS_PATH,PATH等等的環(huán)境變量都修改成相關(guān)的JDK1.5的目錄下面去,因為1.5相對于以前的版本的變化比較大.
2.上面的問題排除后,在運行TOMCAT5.0時候由出現(xiàn)了如下的錯誤:
2005-11-17 19:38:47 StandardWrapperValve[action]: Servlet.service() for servlet action threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP
Generated servlet error:
C:\application\Tomcat 5.0\work\Catalina\localhost\mlinkweb\org\apache\jsp\layouts\layout_005findex_jsp.java:7: cannot access java.lang.Object
Generated servlet error:
bad class file: C:\application\Java\jdk1.5.0\jre\lib\rt.jar(java/lang/Object.class)
class file has wrong version 49.0, should be 48.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
public final class layout_005findex_jsp extends org.apache.jasper.runtime.HttpJspBase
^
1 error
這個問題這是讓我郁悶之極啊(^_^)
最后在SUN的JAVA論壇里面找到了答案,只要將JDK1.5的LIB下面的TOOLS.JAR覆蓋TOMCAT5.0目錄/common/lib下面的tools.jar,然后重啟TOMCAT5.0就可以了
posted @
2005-11-17 20:28 雪地孤鴻 閱讀(3210) |
評論 (3) |
編輯 收藏
http://www.swig.org
這是一個很好的工具,可以再不同的平臺和不同語言之間進行協(xié)作,JAVA調(diào)C,C調(diào)JAVA,這樣就可以對資源進行重新的整合和利用了,而且還省了不少的事情吼吼......
posted @
2005-10-28 11:37 雪地孤鴻 閱讀(628) |
評論 (0) |
編輯 收藏
以下五步可以讓 Struts 1.1 和 Tiles 共同工作:
1. 創(chuàng)建一個 JSP 以表示站點的布局。這是主 JSP,并帶有頁頭、頁體和頁腳的占位符。分別用 Tiles 標記添加到主 JSP 頁面中。
2. 創(chuàng)建一個 Tiles 定義文件并定義每個集成頁面的每個占位符中必須包括哪個 JSP 頁面。用惟一的名稱標識出每一個合成頁面定義。
3. 在 struts-config.xml 文件中改變?nèi)趾捅镜剞D(zhuǎn)發(fā)以使用上一步驟中給出的惟一名稱而不是別名。
4. 在啟動時用
TilesPlugIn
裝載 Tiles 定義文件。將
TilesPlugIn
項加入到 struts-config.xml 文件中。
5. 將
TilesRequestProcessor
項添加到 struts-config.xml 文件中。這是支持 Tiles 的 Struts 應(yīng)用程序的默認請求處理程序。
在現(xiàn)在的一個項目中使用了STRUTS和titles結(jié)合的方式來構(gòu)建VIEW,特別是第5項,讓我花了將近2個小時才搞定,正式郁悶,這都是沒有好好讀文檔的結(jié)果啊,引以為戒啊,最后還是在
Srikanth Shenoy,和
Nithin Mallya的文章<<
集成 Struts、Tiles 和 JavaServer Faces>>中找到答案.
posted @
2005-10-21 14:49 雪地孤鴻 閱讀(865) |
評論 (0) |
編輯 收藏
總于有時間來繼續(xù)這篇文章的翻譯,以后一定要計劃好,計劃好:),好了,下面進入正題吧:
在對syncml的協(xié)議的使用工程進行描述之前我們先來看看同步類型的分類:
syncML協(xié)議描述了七種不同的同步類型:
(1)Two-way sync:雙向同步是客戶端和服務(wù)器端交換有關(guān)任何修改的數(shù)據(jù)信息的一種常用的同步類型。
(2)Slow sync:慢同步是雙向同步的一種特別的形式。慢同步就是將客戶端數(shù)據(jù)庫的數(shù)據(jù)和服務(wù)器端的數(shù)據(jù)庫數(shù)據(jù)逐個進行比較。如果客戶端和服務(wù)器端的同步錨不匹配或客戶端或是服務(wù)器端的修改日志遺失時將會請求一個慢同步。實際上,慢同步就意味著客戶端發(fā)送所有的數(shù)據(jù)到服務(wù)器端,服務(wù)器端對客戶端的所有數(shù)據(jù)進行逐個字段的分析,比較,并將服務(wù)段的數(shù)據(jù)發(fā)送到客戶端。在同步分析完成后,服務(wù)端將所有的修改信息返回客戶端。然后,客戶端返回所有的數(shù)據(jù)的映射信息,并添加到服務(wù)端。
(3)One-way sync from client only:客戶端優(yōu)先同步,是客戶端發(fā)送修改信息到服務(wù)端,但是服務(wù)端的修改信息并不被發(fā)送到客戶端。
(4)Refresh sync from client only:
從客戶端同步刷新,這里客戶端為服務(wù)端提供所有數(shù)據(jù)的瀏覽,服務(wù)器根據(jù)客戶端的修改來更新服務(wù)端的數(shù)據(jù)。
(5)One-way sync from server only:服務(wù)端同步優(yōu)先,這個同步方式是客戶端從服務(wù)獲取所有的修改信息,但是客戶端不發(fā)送修改信息到服務(wù)端。
(6)Refresh sync from server only:從服務(wù)端刷新同步,這里假設(shè)服務(wù)端為客戶端提供所有的數(shù)據(jù)的預覽,客戶端將更新目標數(shù)據(jù)庫中的數(shù)據(jù),更新數(shù)據(jù)由服務(wù)器端發(fā)送到客戶端。
(7)Server-alerted sync: 服務(wù)通告同步,服務(wù)器端通知客戶端需要發(fā)起的同步類型指令給服務(wù)端。
好了,同步的幾種基本類型我們都描述過了(不過其中有兩種4,6我自己也不知道描述被人是否能夠看的懂,很難表達,e文還需要加強啊),下面就讓我們一起來看看同步的全過程吧。
為了理解基本的同步過程,我們開始講解一些在客戶端和服務(wù)端的同步工程的一些細節(jié)。由于雙向同步是最通常的同步過程,我們就使用這種同步過程作為例子。
一個雙向同步的過程可以分為下面幾步:
1.同步初始化
2.雙向同步
3.數(shù)據(jù)映射
NOW,讓我們一步一的揭開同步的神秘面紗吧:
(1)同步初始化:
任何的同步過程首先都必須進行同步初始化的工作,在一個同步初始化的工程種,服務(wù)端和客戶端設(shè)備通常要叫化一下信息:
a.同步服務(wù)器和設(shè)備的能力描述
b.請求訪問的數(shù)據(jù)庫和同步類型
c.認證信息
同步錨也是在同步初始化中被交換的信息。
下面的過程圖介紹了基本的同步初始化過程:

(2)雙向同步:
posted @
2005-10-15 16:27 雪地孤鴻 閱讀(1222) |
評論 (4) |
編輯 收藏
sync4j.framework的基本結(jié)構(gòu)描述:
sync4j.framework.core:這個包的基本功能是描述一個合法的SyncML消息.該模塊主要的功能是根據(jù)SyncML描述協(xié)議構(gòu)建一個SyncML通訊的XML消息,并對消息的合法性進行檢查.
sync4j.framework.protocol:這個包主要是對同步初始化協(xié)議規(guī)則的描述.
sync4j.framework.config:這個包主要是對sync4j整體結(jié)構(gòu)的描述,包括服務(wù)和功能模塊的配置說明
sync4j.framework.security:主要處理用戶的安全問題
sync4j.framework.logging:主要處理服務(wù)端的日志問題(和security模塊同屬于系統(tǒng)的services層)
sync4j.framework.engine:這個是sync4j的核心模塊,他提供了同步引擎的基本接口,容許通過插件的方式實現(xiàn)客戶定制同步引擎
sync4j.framework.server:這個包提供了在SYNC4J的同步引擎的基礎(chǔ)上開發(fā)應(yīng)用服務(wù)的通用的類.
sync4j.server:
提供了一個SyncML服務(wù)的基本架構(gòu)
posted @
2005-10-08 17:40 雪地孤鴻 閱讀(1570) |
評論 (2) |
編輯 收藏
SyncML 是一種為了結(jié)束終端用戶,設(shè)備制造廠商,服務(wù)提供商(SP)和應(yīng)用開發(fā)者之間的無線數(shù)據(jù)無法同步的數(shù)據(jù)同步協(xié)議.下面讓我們一起來看看無線開發(fā)者Chandan Pabla 對SyncML協(xié)議(version1.1)的理解和使用客戶端/服務(wù)器端兩邊覆蓋的同步過程.
1.SyncML的基礎(chǔ):
SyncML是一種主要的開發(fā)式的工業(yè)標準,為了使遠程數(shù)據(jù)和個人信息通過不同的網(wǎng)絡(luò),平臺和設(shè)備進行同步而制定的.SyncML使的數(shù)據(jù)非常的容易在不同的網(wǎng)絡(luò)和網(wǎng)絡(luò)設(shè)備之間進行傳輸,因為它支持多種傳輸協(xié)議.
SyncML的有點可以總結(jié)為一下幾點:
(1)可以在不同的網(wǎng)絡(luò)上工作--包括有限網(wǎng)絡(luò)和無限網(wǎng)絡(luò).
(2)支持多種傳輸協(xié)議,包括HTTP,WSP(Wireless Session Protocol),OBEX(Bluetooth,IrDA),SMTP,pure TCP/IP.
(3)支持通用的個人數(shù)據(jù)格式,如vCard,vCalendar和E-MAIL等.
(4)對移動設(shè)備的存儲空間進行了優(yōu)化.
(5)建立在internet協(xié)議和web技術(shù)上,是可執(zhí)行而且有很好的協(xié)作性的.
2.SyncML的協(xié)議描述:
SyncML程序框架是建立在同步描述協(xié)議(SyncML Representation protocol)和同步協(xié)議(SyncML Synchronization protocol)兩個協(xié)議的基礎(chǔ)上的.同步描述協(xié)議定義了同步消息(in XML)的格式描述和在同步框架內(nèi)工作的細節(jié).同步協(xié)議定義了同步客服端和同步服務(wù)器端的交互.
為了建立一個適當?shù)腟yncML產(chǎn)品,我們必須要了解這個兩個協(xié)議的相關(guān)要求,下面我們開始看看同步協(xié)議的最重要的幾個組成部分:
(1)Change log
開始一個同步協(xié)議的操作時,SyncML協(xié)議需要在客戶端和服務(wù)器端的各自的數(shù)據(jù)庫中維護信息的交換或修改(如替代,增加,刪除數(shù)據(jù)等).SyncML通過一種被稱為change log的信息跟蹤機制來解決客戶端和服務(wù)器端的信息交換或修改的問題.SyncML并沒有描述change log的格式信息,但是進行同步的每個設(shè)備必須能夠詳細的描述設(shè)備上每個數(shù)據(jù)項從上次同步時的修改的詳細情況.
(2)Map operation(操作的映射)
同步操作是基于客戶端和服務(wù)器端的數(shù)據(jù)庫中每個數(shù)據(jù)元素都有一個唯一標識(IDS)的原則來進行的.客戶端ID被稱為本地唯一標識(locally unique indentifier LUID),服務(wù)器ID被稱為全局唯一標識(globally unique identifier GUID).這個ID在服務(wù)器和客戶端可以相同,也可以不同.如果這個IDS是不同的,那么服務(wù)器端就必須保留一個ID的映射,保證服務(wù)端和客戶端的數(shù)據(jù)交換的一致性.LUIDS總是由客戶端設(shè)備來分配的.這就意味者即使是通過服務(wù)端添加一個數(shù)據(jù)項到客戶端設(shè)備,也是由客戶端為這個數(shù)據(jù)項分配LUID.分配完成后,客戶端將通過Map operation把LUID發(fā)送到服務(wù)端,服務(wù)端將更新MAPPING表中數(shù)據(jù)項的LUID.
(3)Sync anchors(同步錨)
當一個同步會話被初始化的時候,總是有兩個錨被發(fā)送,一個是最后一次同步的錨一個是下一次同步的錨.最后一次的錨描述了發(fā)起同步設(shè)備發(fā)起最后一次同步事件的時間點;下次同步錨描述了發(fā)起同步動作設(shè)備的當前的同步事件的時間點.通過這種方式,在服務(wù)端和客戶端交換各自的同步錨.當接收一個NEXT SYNC ANCHOR時,接收設(shè)備必須保存它直到下次同步,當下次同步到來的時候,接收設(shè)備將比較兩次的同步錨并發(fā)送最后一次的同步錨,以判斷是否在同步時有數(shù)據(jù)失敗.如果最后一次同步錨和下次同步錨匹配,接收設(shè)備將認為沒有錯誤并結(jié)束同步會話的初始化.如果不匹配,接收設(shè)備將從其他設(shè)備請求一個適當?shù)膭幼?比如慢同步.當同步會話成功并結(jié)束后,同步錨將被保存.
(4)Confict resolution(沖突解決方式)
當同一個數(shù)據(jù)項在客戶端和服務(wù)器端同時被修改后,數(shù)據(jù)的版本沖突就產(chǎn)生了,對同一數(shù)據(jù)項將產(chǎn)生兩個不同版本的數(shù)據(jù).同步協(xié)議必須有一種策略解決這樣的沖突.在SyncML中,沖突策略是同步引擎的一個基本功能,通常是由同步引擎的同步服務(wù)器來解決版本沖突問題,也有可能有寫客戶端設(shè)備提供解決這一問題的解決方式.
在同步描述協(xié)議提供了通過通知同步客戶端沖突決定和狀態(tài)碼的通用解決方案.如果同步引擎的服務(wù)端確定一個沖突,服務(wù)端將使用狀態(tài)碼和通知功能通知同步客戶端并定義解決方案.下面是一些常用的狀態(tài)碼和沖突解決策略:
<1>207:數(shù)據(jù)合并
<2>208:客戶端優(yōu)先
<3>209:數(shù)據(jù)復制
5.Security(安全性)
SyncML為了安全的數(shù)據(jù)同步提供了框架.SyncML本身并沒有提供新的安全機制,但是它提供了安全驗證框架和在不同的網(wǎng)絡(luò)層進行安全驗證的機制.
SyncML協(xié)議在三個不同的層次定義了用戶驗證機制,這個三個層分別是:服務(wù)器層,數(shù)據(jù)庫層和對象層.SycnML只要求它的安全驗證機制在服務(wù)器端被支持就可以了.為了使用SycnML協(xié)議,同步的客戶端和服務(wù)器端必須支持基本的MD5驗證.在數(shù)據(jù)庫層面和對象層面的安全驗證是可以選擇的.
6.Device capabilities(設(shè)備性能)
SyncML協(xié)議通過一個初始化設(shè)置可以使不同性能的客戶端設(shè)備和服務(wù)器端進行信息的交換.任意一個設(shè)備(客戶端或服務(wù)端)都能請求信息交換,只要客戶端設(shè)備性能和服務(wù)端能協(xié)同工作,他們就能讓一個同步會話繼續(xù)下去.
有兩種類型的信息在設(shè)備和服務(wù)器端進行交換:
(1)設(shè)備信息:包括設(shè)備類型,數(shù)據(jù)模塊和制造廠商信息.
(2)服務(wù)器信息:描述了客戶端或服務(wù)器端支持的數(shù)據(jù)對象的特性.如果客戶端支持vCard version 2.1數(shù)據(jù)格式和慢同步及雙向同步,那么服務(wù)器就必須具有這樣的能力,否則,同步就不能繼續(xù)下去.
同步的客戶端必須在第一次同步或者在設(shè)備的靜態(tài)的信息更新后的時候發(fā)送設(shè)備信息到服務(wù)端。同時,當服務(wù)器端請求客戶端設(shè)備信息的時候,客戶端應(yīng)將自身的設(shè)備信息發(fā)送到服務(wù)端。而一個同步服務(wù)器應(yīng)具備接受和處理設(shè)備信息的能力,不論它是否接受過客戶端的設(shè)備信息或是通過自己請求過客戶端設(shè)備信息。
今天先寫道這里,具體的協(xié)議使用流程明天給出(備注:這是本人首次翻譯相關(guān)技術(shù)文檔,請各路高手指教)
posted @
2005-09-08 22:35 雪地孤鴻 閱讀(1320) |
評論 (2) |
編輯 收藏