ssh项目部署到weblogic注意事项
部署到weblogic還是比較費勁的 ,不過基本上問題全是由于classloader順序的問題引起的。
首先在web-inf底下添加weblogic.xml文件如下
主要是確保先加載項目中的jar包,防止項目jar包和weblogic中jar包沖突,絕對路徑加載,在spring配置文件中確保classpath執行。
?
添加antlr-2.7.6.jar包到weblogic中
預防錯誤:在做查詢的時候,報出? org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken這? 個錯誤(是通過數據源連接的)
?
1.Could not load user defined filter in web.xml: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.
2.No bean named 'sessionFactory' is defined
以上問題發生原因:weblogic中的web.xml不支持通配符的寫法,如:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
?
解決辦法:
改為:
<context-param>
??<param-name>contextConfigLocation</param-name>
??<param-value>classpath:applicationContext-common.xml</param-value>
?</context-param>
把目錄寫全,不支持通配符
?
3.部署后報錯java.lang.ClassCastException: weblogic.xml.jaxp.RegistrySAXTransformerFactory cannot be cast to javax.xml.transform.TransformerFactory
??????????? 這個錯有幾種說法,一個老外的帖子說,要把xml解析的jar包去掉
* xercesImpl-2.9.1.jar
* xml-apis-1.3.04.jar
* xmlParserAPIs-2.0.2.jar
?
還找到一個帖子http://hi.baidu.com/zhoushugen/blog/item/27e1caf71bbc0024730eecdc.html?說,到apache官網上下載最新的xalan包替換你lib下面的一些包。
?
我是使用第二個方法解決的。
?
- dbcp錯誤 ,這個問題比較傻,一開始用tomcat在跑的,所以數據庫連接池用了dbcp,換了weblogic后,忘記了配成jndi了。解決方法很簡單,加上spring的jndi查找datasource即可,如:
?
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/?xxxDS" />
?
由于weblogic安全問題,可能會出現如下錯誤 ... invalid subject .. principles[weblogic,Administrators],這樣的話配置要按以下寫法:
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/xxxDS">
<jee:environment>
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.provider.url=t3://yourhost:yourport
java.naming.security.principal=yourprincipal
java.naming.security.credentials=yourcredentials
</jee:environment>
</jee:jndi-lookup>
?
另外需要在setDomainEnv.sh中設置WLS_JDBC_REMOTE_ENABLED="-Dweblogic.jdbc.remoteEnabled=true",默認值為false
?
cxf部署到weblogic ,這是我花了最長時間解決的問題,有的錯誤非常離奇。雖然解決了都沒搞明白為什么會發生。
前面提到版本,就是因為我部署在weblogic10.3.0時一點錯沒有,部署到10.3.2和10.3.3錯誤一堆。cxf官方也有說如何部署到weblogic中的說明,可惜它只驗證了weblogic9.2,至少我按照它的配置,一點效果沒有。
?
1、java.lang.LinkageError: loader constraints violated when linking javax/xml/namespace/QName class
?
這個問題搜索了很久,解決靈感來自于http://www.blogjava.net/security/archive/2008/07/06/java_lang_LinkageError_Problem.html
我是找到自己項目下包含QName的類的那個jar,jaxrpc.jar,把里面那個QName類刪了(這樣做好像不是很好)
?
2、org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: Invalid class loader hierarchy. You have more than one version of 'org.apache.commons.logging.Log' visible, which is not allowed.
?
這個錯非常神奇,我因為它搞了一天多,一直以為是我使用的commons-logging的版本和weblogic使用的不一樣,才出現的這個錯,然后搜索了weblogic目錄下的所有版本的commons-logging都換到我項目里試了一把,全都不行,搜遍國外論壇的大街小巷,就是沒有一個結果,后來仔細查看異常stack,里面居然包含了一個spring.orm拋出的信息,我部署的只是一個非常簡單的cxf項目,并沒有包含任何orm框架,配置也檢查了一遍,也沒有配過orm的東西,為什么異常會從這里拋出。最后發現是因為我使用了@Autowired和@Component注解來進行自動注入而引起的,但是還是搞不懂,我也只不過注入了一個plain?javabean,為什么使用@Autowired和@Component,異常會出現在orm上,然后我把spring-orm-2.5.6.jar扔到lib下,在部署一次,這個commons-logging的錯誤就消失了。真是神奇的錯誤。(滴汗)
?
3、java.lang.NoSuchMethodException: oracle .j2ee .ws .wsdl .extensions .soap .SOAPBindingImpl .getElementType()
?
這個錯誤也搜索了很久,沒有找到很直接的解決方案,最后自己摸索著解決了,cxf要用的是wsdl4j.jar,然后我的weblogic里安裝了webcenter中間件,然后在MW_HOME下面會多一個oracle_common目錄,這個目錄下的子目錄中會有一個jar叫orawsdl.jar里面就有上面描述的的那個oracle .j2ee .ws .wsdl .extensions .soap .SOAPBindingImpl 類,解決辦法是編輯startWeblogic.sh文件,把wsdl4j.jar加在weblogic自己的CLASSPATH的前面,就不會出現這個錯誤了。
?
?
weblogic做了cluster后,session復制問題
?
?
這個網上有很多說明,但是大部分好像都是針對舊版本的weblogic,網上流行的寫法:
?
在weblogic.xml中增加如下配置:
<session-descriptor>
<session-param>
<param-name>PersistentStoreType</param-name>
<param-value>replicated</param-value>
</session-param>
</session-descriptor>
?
?
weblogic11g下的寫法是:
<session-descriptor>
<persistent-store-type>replicated</persistent-store-type>
<sharing-enabled>true</sharing-enabled>
</session-descriptor>
?
這應該跟不同版本的DTD有關
?
注意任何需要持久化的session中的內容必須都實現java.io.Serializable接口,否則無法進行復制。
?
不同weblogic中資源的遠程查詢與安全問題
?
這個問題是能解決,但是也會引發其他問題,在我的項目中,我有3個weblogic,一個a部署了oracle bpm10g,
另外2個b和c做集群部署了oracle webcenter11g,b中包含了集群的管理服務器,webcenter項目中需要遠程查找bpm的topic,如果不加ADF Security的話,不會出現錯誤,但是加上ADF Security的話,就會出現... invalid subject .. principles[xxxxx,xxxxx]的錯誤,現在我目前通過啟用weblogic中的全局信任這個功能,暫時解決了這個遠程查找的問題,
但是又出現了新問題,這個問題很奇怪,啟用全局信任以后,b的管理服務器不知道什么時候會讀取到a的domain信息,一旦這個出現,一旦我想改b的domain的配置就必須重啟b的管理服務器,再次登錄才可以。這個問題我非常不明白,而且也不知道什么時候會發生,有時候讀取的正確,有時候不正確。目前還沒有辦法解決。
轉載于:https://www.cnblogs.com/arthur-winbo/archive/2013/01/24/2875088.html
總結
以上是生活随笔為你收集整理的ssh项目部署到weblogic注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何刷入recovery?
- 下一篇: 关于yii验证和yii错误处理