`
wzf7065
  • 浏览: 247548 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

项目从tomcat迁移到weblogic下报错的解决方案

 
阅读更多
项目在tomcat下运行正常,部署到weblogic下,出现问题

1、Caused by: java.lang.ClassNotFoundException:org.joda.time.LocalDate

   原因:缺少joda-time-2.1.jar
   这个包在tomcat下不需要加载,在weblogic下会报缺少这个文件,把这个jar包加进去即可

2、Caused by: java.lang.ClassNotFoundException:org.apache.el.ExpressionFactoryImpl
   原因:缺少jasper-el.jar
   由于项目在tomcat下运行时,默认会加载tomcat的lib的jar包,因此运行正常,迁移到weblogic下后,就会报缺少el的jar包,加进去即可;

3、classnotfoundexception:org.hibernate.hql.ast.hqltoken
   这是由于hibernate3的antlr-2.7.6.jar和weblogic自带的antlr.jar冲突了,在hibernate3以前的解决方案里,多是在配置文件里增加一个property或者在startWebLogic.cmd文件里增加一个set配置,我试了后,均报错,最后采用的解决方案是在WEB-INF里增加一个weblogic.xml文件,设置为默认采用项目里的antlr.jar来执行。

weblogic.xml配置文件:

[code="java"]
true

[/size]

4、java.lang.outofmemoryerror:permgen space
原因:内存溢出,PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。
weblogic默认给出的内存太小,解决方案是加大内存,找到D:\oracle\Middleware\user_projects\domains\base_domain\bin\ setDomainEnv.cmd文件,打开后将
set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=128m
修改为set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=256m

注:查到的资料上有要求把MaxPermSize值改成1024m,我改了后weblogic启动不起来,因此改为256m,目前启动还没发现再报内存溢出

5、org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken
如果你是通过eclipse启动weblogic的,那么依次点击windows-preferences-myeclipse workbench-servers-weblogic-weblogic10.x-path,在prepend to classpath选项中,把hibernate要用到的包antlr.jar添加到weblogic的classpath中。
这样在weblogic便可以通过myeclipse正常启动,以上提到的问题解决。


如果你是通过weblogic自带的脚本运行,即通过startWebLogic.cmd启动:
将工程里的antlr.jar拷贝到weblogic的wlserver_10.3\server\lib文件夹下面,在domains\base_domain\bin里找到startWebLogic.cmd文件,在set classpath 的上下分别增加了两句话,如下:
    set PRE_CLASSPATH=%WL_HOME%\server\lib\antlr-2.7.6rc1.jar

    set CLASSPATH=%SAVE_CLASSPATH%

    set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%

然后启动WebLogic,系统正常运行

6、java weblogic session 丢失
最近遇到一个很郁闷的问题:
我在同一个weblogic下创建了两个domain,部署了两个系统A和B。其中系统A有一个按钮可打开系统B,并自动登录。通过A系统打开B系统后session会发生无规律丢失的情况。经过两天的研究,baidu,goolge了无数次后找到了一个帖子,里面写了一下方法:
        

         这主要是sessionid在影响,你登录第一个web时默认使用jsessionid来记录session id的,放在cookie里 或者url后面,登录第二个时还是默认使用的jsessionid来做的,这样第二个会覆盖第一个jsessionid,所 以表现为session丢失了。

         解决办法如下:两个web使用不同的sessionid来标识,如第一个web使用jsessionid1,第二个web使用 jsessionid2就可以了。 直接在每个web程序下配置weblogic.xml
即将第一个web app的session id标识改为jsessionid1,同理将第二个改为jsessionid2 ,这样你再来做你 的就不会有问题了。

经过实验,果然是因为session id的原因,特写在blog中备份
<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<session-descriptor>
<cookie-name>JSESSIONID1</cookie-name>
</session-descriptor>

<jsp-descriptor></jsp-descriptor>
  <container-descriptor></container-descriptor>
  <servlet-descriptor>
    <servlet-name>action</servlet-name>
  </servlet-descriptor>
  <context-root>/ehrp</context-root>

</weblogic-web-app>


7、
weblogic下用@Resource出现No unique bean of type [cn.xx.dao.QueryDAO] is defined的解决办法
最近在使用weblogic时,出现各种问题,其中,有一个问题是这样,在某一个类中,通过@Resource注入一个DAO时,在tomcat时,没有问题,但是在weblogic下,就会出现以下错误:

Caused by: com.bea.core.repackaged.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [cn.xx.dao.QueryDAO] is defined: No beans of type cn.xx.dao.QueryDAO; owner=com.bea.core.repackaged.springframework.context.support.GenericApplicationContext@1af4318: display name [com.bea.core.repackaged.springframework.context.support.GenericApplicationContext@1af4318]; startup date [Wed Jun 04 16:06:59 CST 2014]; parent: com.bea.core.repackaged.springframework.context.support.GenericApplicationContext@11a4ce8
at com.oracle.pitchfork.inject.Jsr250Metadata.getUniqueInstanceOfType(Jsr250Metadata.java:354)
at com.oracle.pitchfork.inject.Jsr250Metadata.resolveByType(Jsr250Metadata.java:348)
at com.oracle.pitchfork.inject.Jsr250Metadata.resolve(Jsr250Metadata.java:278)
at com.oracle.pitchfork.inject.Jsr250Metadata.applyInjections(Jsr250Metadata.java:231)

试了各种方法:

办法1:

将以下代码

@Resource("queryDAO")
public QueryDAO queryDAO;

修改为

@Autowired(required = false)
@Qualifier("queryDAO")
public QueryDAO queryDAO;

办法2:

出现这个问题的根本原因,其实还是因为weblogic加载jar包时,默认加载weblogic自己的jar包,但是其jar包版本过低,所以根本解决办法是:

修改WEB-INF下的weblogic.xml,我的工程的weblogic.xml的完整代码为:

    <?xml version="1.0" encoding="UTF-8"?>  
    <wls:weblogic-web-app  
    xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app"  
    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/ejb-jar_3_0.xsd  
    http://xmlns.oracle.com/weblogic/weblogic-web-app  
    http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">  
      
         <wls:container-descriptor>  
             <wls:prefer-application-packages>  
                 <wls:package-name>com.google.common.*</wls:package-name>  
                 <wls:package-name>javax.jws.soap.*</wls:package-name>  
                 <wls:package-name>javax.xml.ws.*</wls:package-name>  
                 <wls:package-name>javax.annotation.*</wls:package-name>  
             </wls:prefer-application-packages>  
         </wls:container-descriptor>  
         <wls:resource-env-description>  
             <wls:resource-env-ref-name>queryDAO</wls:resource-env-ref-name>  
             <wls:jndi-name>dataSource</wls:jndi-name>  
         </wls:resource-env-description>  
         <wls:resource-env-description>  
             <wls:resource-env-ref-name>updateDAO</wls:resource-env-ref-name>  
             <wls:jndi-name>dataSource</wls:jndi-name>  
         </wls:resource-env-description>  
    </wls:weblogic-web-app>  


8、Spring + JAX-WS : ‘xxx’ is an interface, and JAXB can’t handle interfaces 错误解决方法
错误栈:
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
demo.order.dao.ParamDao is an interface, and JAXB can't handle interfaces.
        this problem is related to the following location:
                at demo.order.dao.ParamDao
                at private demo.order.dao.ParamDao demo.jaxrs.server.jaxws_asm.SetParamDao.arg0
                at demo.jaxrs.server.jaxws_asm.SetParamDao
demo.order.dao.ParamDao does not have a no-arg default constructor.
        this problem is related to the following location:
                at demo.order.dao.ParamDao ....



解决方法:标记该方法为非web method
    private ParamDao paramDao;
   
    @WebMethod(exclude = true)
        public void setParamDao(ParamDao paramDao) {
                this.paramDao = paramDao;
        }

ref: http://www.mkyong.com/webservices/jax-ws/spring-jax-ws-xxx-is-an-interface-and-jaxb-cant-handle-interfaces/

9、信息: Your platform does not provide complete low-level API for accessing direct buffers reliably. Unless explicitly requested, heap buffer will always be preferred to avoid potential system unstability.
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:159)
at $Proxy64.getCaseStatusCount(Unknown Source)
at com.hjdf.cnmsa.cxf.webservice.punishmentSnapshotService.client.ClientTest.main(ClientTest.java:19)
Caused by: org.apache.cxf.binding.soap.SoapFault: Cannot create a secure XMLInputFactory
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:84)
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:51)
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:40)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113)
at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:798)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1636)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1525)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1330)
at org.apache.cxf.transport.http.netty.client.NettyHttpConduit$NettyWrappedOutputStream.close(NettyHttpConduit.java:153)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:638)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:326)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:279)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:137)
... 2 more

10、weblogic启动后获取不到session的问题
    增加一个weblogic.xml文件,将jsessionid设为固定,不由系统分配
分享到:
评论

相关推荐

    weblogic项目移植到tomcat,配置说明

    WebLogic 项目移植到 Tomcat 配置说明 在进行 WebLogic 项目移植到 Tomcat 之前,需要确保已经成功安装了 Tomcat。下面将对 WebLogic 项目移植到 Tomcat 的配置进行详细说明。 配置 Tomcat 1. 在 Tomcat 安装目录...

    tomcat工程迁移至weblogic文档

    综上所述,从Tomcat迁移到WebLogic的过程中,涉及到的不仅仅是简单的文件复制,还需要细致地调整配置文件,并充分考虑到两个平台之间的差异性。通过上述步骤,可以有效确保应用程序在WebLogic环境下能够顺利部署和...

    项目框架从tomcat到weblogic

    "项目框架从 Tomcat 到 WebLogic" 项目框架从 Tomcat 移植到 WebLogic 需要注意以下几个方面: 1. JDK 版本:由于项目使用 JDK 1.5 版本,因此需要使用 WebLogic 9 或以上版本。这里使用 WebLogic 10 作为示例。 ...

    weblogic安装步骤以及报错解决

    但是,安装 Weblogic 可能会遇到各种问题,本文将提供详细的安装步骤和报错解决方案,以帮助用户顺利安装和使用 Weblogic。 一、配置 JDK 环境 在安装 Weblogic 之前,需要先配置 JDK 环境。首先,创建一个目录来...

    技术文章(迁移问题解决方案)-从WebLogic 6_1迁移到 WebLogic 8_1.mht

    技术文章(迁移问题解决方案)-从WebLogic 6_1迁移到 WebLogic 8_1.mht

    Tomcat和weblogic中文乱码问题解决方案

    Tomcat和WebLogic中文乱码问题解决方案 在 Java Web 开发中,中文乱码问题一直是困扰开发者的主要问题之一。 Tomcat 和 WebLogic 是两个常用的 web 服务器,都是支持 Servlet 和 JSP 的。然而,在使用这些服务器时...

    Nginx实现tomcat与weblogic集群的负载均衡及故障处理

    在IT行业中,构建高效、可靠的Web服务架构是至关重要的,特别是在高并发和高可用性需求的场景下。本文将详细讲解如何使用Nginx作为负载均衡器,实现对Tomcat和WebLogic集群的负载均衡以及故障处理。我们将遵循...

    tomcat 调用weblogic EJB

    - 将WebLogic安装目录下的`bea\weblogic91\server\lib\`文件夹中的`weblogic.jar`复制到Tomcat的`Tomcat 5.5\shared\lib`目录下。这一步是为了让Tomcat能够识别WebLogic的类库,从而支持调用WebLogic中的EJB。 2. ...

    AIX关于Weblogic的报错_Too_many_open_files_的处理

    ### AIX关于Weblogic的报错“Too many open files”的处理 #### 背景与问题概述 在AIX环境中部署Weblogic时,可能会遇到一个常见的错误提示:“Too many open files”。这一错误提示通常出现在系统资源限制不当的...

    weblogic 遇到的报错 解决办法.docx

    错误现象通常表现为WebLogic Server无法正常启动,给出的错误信息可能涉及到文件权限问题,例如"EmbeddedLDAP.tran"文件的权限被设置为了root用户。这是因为在使用root用户启动WebLogic Server时,系统创建或修改了...

    sunone8.1到weblogic10.3转移配置

    本文将详细介绍如何解决从Sun ONE 8.1到WebLogic 10.3迁移过程中出现的Hibernate配置问题,并提供具体的解决方案。 #### 二、问题背景与分析 当尝试在WebLogic 10.3环境中运行原先部署在Sun ONE 8.1上的应用时,...

    weblogic 可迁移目标讲解

    可迁移目标是指可以在WebLogic集群中从一个管理服务器迁移到另一个管理服务器的服务器实例或集群。这种迁移可以在不中断服务的情况下进行,从而提高系统的灵活性和可靠性。当某个节点出现故障时,运行在其上的可迁移...

    weblogic部署项目jar冲突解决

    在将一个已经在Tomcat上正常运行的应用迁移到WebLogic时,可能会遇到各种问题,其中最常见的是配置问题和JAR包冲突。 标题"weblogic部署项目jar冲突解决"指出的核心问题是JAR包冲突。这是因为不同的应用服务器可能...

    WebLogic应用优化解决方案

    WebLogic应用优化解决方案是针对Oracle WebLogic Server这一企业级Java EE应用服务器的性能提升策略。WebLogic Server作为业界广泛使用的中间件平台,其性能优化对于整个企业应用的效率和稳定性至关重要。以下是一些...

    weblogic启动失败问题解决

    WebLogic 启动失败解决方案 WebLogic 是一款功能强大且广泛应用的 Java EE 服务器,但是在实际操作中,可能会遇到启动失败的问题。那么,如何解决 WebLogic 启动失败问题呢?下面我们将详细介绍。 问题原因 ...

    CXF项目部署weblogic9.2终极解决方案

    本文将详细解析如何将CXF项目部署到WebLogic Server 9.2,提供一个终极解决方案。 首先,`CXFServiceServlet.java`是CXF中的核心组件之一,它是一个Servlet,用于处理SOAP和RESTful请求。这个类是服务的入口点,当...

    weblogic集成多个Tomcat服务,自动分配tomcat服务,80端口访问

    在某些场景下,可能需要结合两者的优点,即利用WebLogic的管理能力和高可用性,结合Tomcat的轻便性与性能。 集成过程的核心在于配置WebLogic集群和Tomcat代理。在WebLogic中创建一个集群,可以将多个服务器实例组织...

    服务器tomcat和weblogic区别[参考].pdf

    Tomcat是一个免费的开放源代码的Web应用服务器,由Apache软件基金会Apache Software Foundation的Jakarta项目中的一个核心项目。它是由Apache、Sun和其他一些公司及个人共同开发的。由于有了Sun的参与和支持,最新的...

Global site tag (gtag.js) - Google Analytics