tomcat迁移到weblogic的几个问题

来源:互联网 发布:动作数据 编辑:程序博客网 时间:2024/05/18 03:41

标签: tomcat weblogic 问题| 发表时间:2015-08-30 02:54 | 作者:lkl

出处:http://www.iteye.com

第1个问题:

异常描述:VALIDATION PROBLEMS WERE FOUND problem: cvc-enumeration-valid: string value '3.0' is not a valid enumeration value for web-app-versionType in namespace http://java.sun.com/xml/ns/javaee:<null>

因为创建项目的时候用的是JAVAEE6,所以生成web.xml文件的时候是这样的:

[java] view plain copy

<web-app version="3.0"   xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">   


weblogic10.3.6并不支持web-app_3_0.xsd的定义。所以报错了。

改为如下就ok了:

<web-app version="2.5"     xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

或者部署到weblogic 12。

第2个问题:

异常描述:

Caused by: weblogic.management.DeploymentException: [HTTP:101170]The servlet default is referenced in servlet-mapping *.js, but not defined in web.xml.

原因:用默认servlet处理静态资源。

<servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.js</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.css</url-pattern></servlet-mapping>


每个web容器都有一个默认servlet,在tomcat默认servlet的名字是:defalut。而在weblogic是:FileServlet。

下面列出各容器的默认servlet的名字Tomcat, Jetty, JBoss, and GlassFish 默认 Servlet的名字"default"

WebLogic 默认 Servlet的名字 "FileServlet"

WebSphere默认 Servlet的名字 "Simpledefault" 。

将上面的default改成FileServlet就可以了。

第3个问题:

异常描述:

Annotation-specified bean name 'containerTransactionType.Factory' for bean class [com.sun.java.xml.ns.javaee.ContainerTransactionType$Factory] conflicts with existing, non-compatible bean definition of same name and class [com.sun.java.xml.ns.j2Ee.ContainerTransactionType$Factory]

原因:

mvc-dispatcher-servlet.xml里有这样一个配置,<!-- 需要扫描的标注了@Controller的类 --><context:component-scan base-package="com"><context:include-filter type="regex"expression=".*.action.*" /><!-- 这里排除service,防止事务失效 --><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/></context:component-scan>


我的包名是com.公司名.模块名。由于weblogic的包里也有以com开头action结尾的包,spring把它的包也扫描了,并注入容器。出现了同名的bean。所以报错。

解决方法,   将<context:component-scan base-package="com">中包名加一层, 改成: <context:component-scan base-package="com.公司名">。

第4个问题:

异常描述:

Caused by: java.lang.Throwable: Substituted for missing class org.springframework.beans.factory.BeanCreationException - Error creating bean with name 'ditemAction': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.jfpal.riskmanage.item.service.IDitemService 

这是在createing 控制器 ‘ditemAction’时出的错。原因是无法注入属性com.jfpal.riskmanage.item.service.IDitemService 。代码肯定没问题的,tomcat上运行正常。

经过分析,断定spring没扫描com.jfpal.riskmanage.item.service.IDitemService 所在的包。

然后查看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.xml,classpath:applicationContext-myBatis.xml</param-value></context-param>


后面那个数据源的配置。改后部署成功。原因是weblogic和tomcat解析<param-value>有点不一样。

第5个问题:

访问项目时出错,报404,说找不到**/**/dwz.frag.xml。查看web.xml,没有配置xml静态资源的访问,加上如下配置

<servlet-mapping><servlet-name>FileServlet</servlet-name><url-pattern>*.xml</url-pattern></servlet-mapping>


至此迁移成功。


支持原创  转载地址  http://www.tuicool.com/articles/uAfuaqq



1 0
原创粉丝点击