snappy jetty error:SnappyNative.maxCompressedLength(I)I

需要用snappy继续数据压缩时,出现了标题中的错误。

纠结了很久之后,终于发现问题所在。

可惜对jetty不熟,又纠结了很久jetty的配置问题。

希望能对有同样问题的亲们有所帮助。


问题解决方案参考:

https://groups.google.com/forum/#!topic/xerial/ActV3936iKY


问题描述:

snappy 报错:SnappyNative.maxCompressedLength(I)I

采用在pom.xml中将snappy的<scope>compire</scope>改为<scope>provided</scope>后报NoDefClassFound错误


环境:

JDK: 1.6

maven: 2.3.2

snappy: 1.0.5

jetty: 6.1.26

os: windows8 x64


原因:

jetty的配置(org.mortbay.jetty.webapp.WebAppContext)中  parentLoaderPriority(默认为false)应设置为true

因为snappy中jetty的默认支持上有问题,查阅资料后发现,在早起版本的snappy(1.0.4.x以下),在tomcat等server中也会存在问题,主要是其jar要存在于tomcat的lib下而不是自己的lib下。具体原因没有仔细看,不过貌似是以为snappy为了通行用,使得所有application都可以使用snappy,所以配置策略使用了这种方式。由于本人对jetty不熟悉,只是结合出错的原因猜测可以jetty也是由于这个策略的原因,造成了这个错误(如果有大牛能详细科普一下就万分感谢了)。


解决方案:

1、利用xml文件

2、自己写server类

由于写程序不符合自己的要求,采用了xml文件的方式(写server类的可以自行百度,例子很多),具体操作如下:

1、pom.xml配置不变(仍为<scope>compire</scope>),增加配置jetty文件:  WEB-INF/jetty-web.xml (注意不是jetty.xml,jetty-web.xml是面向单个application的,而jetty.xml是面向jetty的server的,jetty.xml中可以配置端口等信息)

2、jetty-web.xml文件内容如下(这里最精简的例子,其他也可以配置很多内容,具体可以参考网上的例子):

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
 	<Set name="parentLoaderPriority">true</Set>  
</Configure>
3、重新运行程序即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值