TongWeb上应用移植常见问题

萝卜白菜。 2019-08-14 10:06:55
本文章适用TongWeb6, TongWeb7版本

一、JPA引起的问题 
TongWeb自带JPA实现,但实际应用中多采用hibernate的JPA,这样就导致TongWeb的JPA与应用自带JPA冲突,处理方法:
1.应用使用JPA,则TongWeb增加参数:-DenableJPA=false,不启动TongWeb的JPA,否则会报一些OpenJPA异常。
2.出现如下类似异常,缺少javax.persistence中的类或方法,说明应用带的JPA版本比TongWeb新。则把应用的javax.persistence.*包放在TongWeb的lib下,同时将TongWeb6或TongWeb7的lib下javaee-api-*.jar中 javax\persistence目录删除。

Caused by: java.lang.ClassNotFoundException: javax.persistence.Converter
java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey

二、validation引起的问题
因为tomcat不带javax.validation,而TongWeb带javax.validation,但不带具体实现,所以tomcat上应用移植到TongWeb上后,常会遇到validation相关问题。

1. 出现如下类似异常,说明应用带的validation版本比TongWeb新。则把应用里的validation-XXXX.jar 放在TongWeb的lib\endorsed下,并把TongWeb的lib\endorsed 里validation-api.jar 删除(这里优先级最高)

java.lang.NoSuchMethodError:javax.validation.spi.ConfigurationState.getValueExtractors()Ljava/util/Set;
Caused by: java.lang.ClassNotFoundException: javax.validation.ParameterNameProvider

2.出现如下类似异常,应用里要放javax.validation的实现类,通常为hibernate-validator 实现类,主要有classmate-*.jar、 hibernate-validator-*l.jar 、jboss-logging-*.jar要根据hibernate版本来放

Caused by: javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator
(RI) to your classpath.


三、annotation引起的问题

JavaEE CDI等规范经常性的对应用jar包的annotation进行扫描,导致的一些异常。例如:

[COM/ibm/db2os390/sqlj/custom/DB2SQLJEntryInfo.class] from Jar [jar:file:/home/tongweb/TongWeb6.0/deployment/bbsp/WEB-INF/lib/db2jcc-0.0.1.jar!/] for annotations]
com.tongweb.web.webutil.util.bcel.classfile.ClassFormatException: null is not a Java .class file
[2016-11-13 15:29:21] [WARNING] [System.out] [Caused by: java.lang.StackOverflowError]
[2016-11-13 15:29:21] [WARNING] [System.out] [ at com.tongweb.web.thor.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2265)]
[2016-11-13 15:29:21] [WARNING] [System.out] [ at com.tongweb.web.thor.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2278)]

所以当看到一些annotation相关的异常时,可先试着把出错的jar加在conf/tongweb.properties中,对指定的jar不进行annotation。

#TongWeb6, 也可以用通配符common*.jar过滤大部分jar
tongweb.util.scan.DefaultJarScanner.jarsToSkip=db2jcc-0.0.1.jar,.....

四、支持jersey1.X版本的问题

部署带有jersey1.X版本的应用包,报错如下:
java.lang.RuntimeException: javax.naming.NameNotFoundException: Name "com" not found.
 at com.sun.jersey.server.impl.cdi.CDIExtension.getInitializedExtension(CDIExtension.java:182)
 at com.sun.jersey.server.impl.cdi.CDIComponentProviderFactory.<init>(CDIComponentProviderFactory.java:95)

jersey CDI提供一个使用外部BeanManager的办法,在TongWeb启动脚本中加上-Dcom.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true  参数即可
---------------------
版权声明:本文为CSDN博主「realwangpu」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/realwangpu/article/details/99542654
...全文
1188 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧