tomcat6.0向WebSphere6.1移值

最近做了一個普通的java web應用,一直是用tomcat6.0調試的,客戶購買了WebSphere服務器,需要把項目移植到websphere上,以下是項目移植時碰到的問題,現在總結如下。 
  
項目環境:  
引用
    JDK 1.6 
    IDE MyEclipse 6  
    Websphere 6 
    項目使用框架 spring2.5 spring mvc hibernate3.0 jstl2.0 數據庫連接池用的c3p0,項目中大量應用了泛型

   
   1)直接把現有的項目達成war包部署到WebSphere上,部署的步驟基本都一樣,折騰了半天,正與能進login登錄頁面了,但登錄後立馬報錯,某個bean沒有裝載。後來查看jvm日誌(我是用MyEclipse看的), 才知道是spring的配置問題,上網查到這個錯,有網友已經總結過了,"nested exception is org.xml.sax.SAXParseException: cvc-elt.1:找不到元素“beans”的聲明。",原因: 
   spring配置文件  引入DTD這種方式在websphere 6.1 下不成功,必須改成 使用schema這種方式。 

DTD: 
Xml代碼  
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
  3. <beans default-autowire="byName">  


修改爲SCHEMA: 

Xml代碼  
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3. xsi:schemaLocation="http://www.springframework.org/schema/beans  
  4. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  


重新部署,(哎!WebSphere這玩意部署起來還真是折騰人,慢死了) 

    2)開始出現傳說中的jdk版本不兼容的問題了,WebSphere用的是自家的jdk,6.1版本的jdk是1.5,到了WebSphere 7以後支持jdk1.6了(可以客戶買的就是6.1版,沒辦法) 
錯誤 "....bad major version at offset=6
將項目備份,Eclipse-->Preferences-->Java-->Compiler-->從6.0調到5.0,整個項目重新編譯(基本上有經驗的人士都推薦,這裏一定要調成和Websphere 兼容的JDK,不然鬼知道還要報多少錯呢), 項目一片紅叉,用查找替換了半天,終於不報錯了。用tomcat跑了一遍,沒問題。 

再次重新部署 

     3)登錄進入首頁了,竟然能正常顯示,但進入一個模塊後報錯了,jsp無法編譯,不支持泛型 
原因: 
引用
JSP 編譯器用 1.3 的規範來編譯 JSP 文件,如果您在 WAS V6.1 裏用了帶 JDK 1.5 的特性的 JSP,編譯會失敗


同時我也把網友的原文解決方法貼出來 
引用
爲了確保您的 JSP 被正確編譯,請在打包時的 JSP 屬性裏添加一個屬性:jdkSourceLevel,值爲:15,這是推薦的方法,如果您不能重新打包後重新發布應用,請按照下面的步驟修改相關文件: 
找到下面的兩個文件: 
<WAS-HOME>/profiles/AppSrv01/config/cells/<cellname>/applications/<appname>/deployments/<appname.war>/WEB-INF/ibm-web-ext.xmi 
<WAS-HOME>/profiles/AppSrv01/installedApps/<nodename>/<appname>/<appname.war>/WEB-INF/ibm-web-ext.xmi 


在最後面的 </webappext:WebAppExtension> 前添加下面一行: 

Xml代碼  
  1. <jspAttributes xmi:id="JSPAttribute_113" name="jdkSourceLevel" value="15"/>   


保存後重新啓動應用即可,也請同時刪除 jsp 已經編譯過的 class 文件: 

<WAS-HOME>/profiles/AppSrv01/temp/<nodename>/<appname>/<appname.war>/*.class


這次不用重新部署了,重啓了Websphere服務器,大部分功能都能正常運行了,(部分頁面,由於調用了delphi寫的 library 出了點問題,明天接着調 ) 淚流滿面啊。 

很多人寫web.xml的時候,部署在Websphere下出了問題,我在這一步上沒有遇到問題,除了spring配置文件的頂部命名空間有修改,web.xml沒有動過 

再補充一些關於數據庫連接的問題,項目本身用的c3p0連接池,在WebSphere下運行時正常的。 

c3p0連接池代碼 
Xml代碼  
  1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
  2.         <property name="driverClass"><value>${jdbc.driverClass}</value></property>  
  3.         <property name="jdbcUrl"><value>${jdbc.jdbcUrl}</value></property>        
  4.         <property name="user"><value>${jdbc.user}</value></property>  
  5.         <property name="password"><value>${jdbc.password}</value></property>  
  6.         <property name="minPoolSize"><value>${jdbc.minPoolSize}</value></property>  
  7.         <property name="maxPoolSize"><value>${jdbc.maxPoolSize}</value></property>  
  8.         <property name="maxIdleTime"><value>${jdbc.maxIdleTime}</value></property>  
  9. </bean>  


改成jndi方式連接,代碼如下 
Xml代碼  
  1. <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">  
  2.    <property name="jndiName" value="jdbc/db2"/>  
  3.    <property name="resourceRef" value="true"/>    
  4. </bean>   


“jdbc/db2”就是WebSphere數據源的jndi名稱,在WebSphere下測試連接是正常的,可在項目中就會報錯 
[jcc][t4][2013][11249][3.50.152] 發生了連接權限故障。原因:用戶標識或密碼無效 

納悶了半天,這個jndi數據源的配置方法是參考的這篇文章:http://xiaoduan.blog.51cto.com/502137/124414 
注意這篇文章裏後面關於用戶名密碼的方式,是增加了user和password的自定義屬性的。作者在Eclipse測試是成功的,但在我這是不成功的。 
後來找到另外一種配置方式 
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0512zhanghzh/ 
利用的數據源中的 JAAS - J2C 認證數據,增加了用戶名和密碼,並測試成功。在項目中重啓了WebSphere,連接成功。 
這兩種方式暫時還沒有時間深入研究到底什麼原因,萬幸系統終於沒什麼大問題了 

以下是項目遷移時參考過的url 

WebSphere數據源 
引用
http://xiaoduan.blog.51cto.com/502137/124414 
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0512zhanghzh/



JDK版本不一致(錯誤bad major version at offset=6 This is often caused by having a class defined at multiple locations within the classloader hierarchy) 
引用
http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14087324



修正WebSphere jsp默認的1.3規範 編譯版本(讓 WAS V6.1 的 JSP 編譯器用 JDK5.0) 
引用
http://wing123.iteye.com/blog/376857



實際在遷移過程中還走了很多彎路,查的網頁也比上面列的多很多。其實遷移完成後發現Websphere也沒想象的那麼恐怖,主要是不熟悉造成的,這裏記錄下來供各位網友參考一下。 

另外對WebSphere的實時調試,我還是沒弄好,好像是必須要建企業項目而不是一般web項目,所以我現在的修改還是在tomcat下修改,最後部署在WebSphere下面。修改量少的話,就不重新部署war包了(實在很慢),將修改的配置文件,或.class直接拷貝到Websphere的實際發佈目錄下替換,重啓WebSphere解決 


轉自:http://sind.iteye.com/blog/682498

發佈了18 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章