JBoss 7 与之前的版本有了巨大的变化,最核心的类的加载方式变了,有点类似OSGI那样搞起来了分模块的类加载方式,而不是以前的分层类加载。按以前的类加载方式,在加载树底下的那些类,总是能看到父节点已经加载过的类。但是分模块加载后就不一样了。
碰到的第一个问题就是,到哪里存放项目以来的那些第三方库 (不只是第三方库,同一个项目里也会有一些jar是需要在不同ejb间共享的)。以前的方式是放在common/lib或者server/{部署模块}/lib下面,这样所有的部署模块下的应用都可以访问到这些库里的类了。不过JBoss 7里已经没有这2个目录,这可让人怎么活啊. 这一段时间我一边查资料,一边看书,一边写代码测试,总算有了一点认识。
首先说资料,JBoss 7确实是太新了,基本上没有靠谱的博客或者其他文章是有价值的,最好的是JBoss的官方指南:https://docs.jboss.org/author/display/AS71/Documentation,还有JBoss 官方讨论社区中关于JBoss 7的问答: https://community.jboss.org/。
其次是书本,我只看到一本《JBoss.AS.7.Configuration.Deployment.and.Administration》,绝对值得通读一遍,这本书的书好处是让你对JBoss 7 的方方面面有了了解,缺点是给的例子有点含糊不清,尤其是教你写EJB Client那一章,根本没告诉你要引入哪些jar。不依赖那些jar,编译也没什么问题,就是出来的错误让人一头雾水。
写代码测试的话,我用的Eclipse Indigo + JBoss Tools for Indigo,话说这个最新的Indigo好像有时反应很迟钝,郁闷。
下面详细说说几种发布jar的方式。
1. 在modules目录创建新的module
2. 把jar文件直接部署到deployments目录中
3. 配置全局的module
4. 把jar文件打包到ear的lib目录中。
5. 把jar所在的Eclipse工程部署到deployment中。