How To: Run Tapestry5 On JBoss 6/7
Tapestry 5.x cannot find the core pages and components from the URLs provided from classloaders in JBoss 6.1. We will override Tapestry's ClasspathURLConverter with one customised for JBoss 6.1. This builds on the work done for JBoss 5 inhttps://issues.apache.org/jira/browse/TAP5-576
.
public class ClasspathURLConverterJBoss6Dot1 implements ClasspathURLConverter
{
private static Logger log = Logger.getLogger(ClasspathURLConverterJBoss6Dot1.class);
public URL convert(URL url)
{
// If the URL is a "vfs" URL (JBoss 6.1 uses a Virtual File System)...
if (url != null && url.getProtocol().startsWith("vfs"))
{
// Ask the VFS what the physical URL is...
try
{
String urlString = url.toString();
// If the virtual URL involves a JAR file,
// we have to figure out its physical URL ourselves because
// in JBoss 6.1 the JAR files exploded into the VFS are empty
// (see https://issues.jboss.org/browse/JBAS-8786).
// Our workaround is that they are available, unexploded,
// within the otherwise exploded WAR file.
if (urlString.contains(".jar")) {
// An example URL: "vfs:/devel/jboss-6.1.0.Final/server/default/deploy/myapp.ear/myapp.war/WEB-INF/lib/tapestry-core-5.2.6.jar/org/apache/tapestry5/corelib/components/"
// Break the URL into its WAR part, the JAR part,
// and the Java package part.
int warPartEnd = urlString.indexOf(".war") + 4;
String warPart = urlString.substring(0, warPartEnd);
int jarPartEnd = urlString.indexOf(".jar") + 4;
String jarPart = urlString.substring(warPartEnd, jarPartEnd);
String packagePart = urlString.substring(jarPartEnd);
// Ask the VFS where the exploded WAR is.
URL warURL = new URL(warPart);
URLConnection warConnection = warURL.openConnection();
Object jBossVirtualWarDir = warConnection.getContent();
// Use reflection so that we don't need JBoss in the classpath at compile time.
File physicalWarDir = (File) invoke(jBossVirtualWarDir, "getPhysicalFile");
String physicalWarDirStr = physicalWarDir.toURI().toString();
// Return a "jar:" URL constructed from the parts
// eg. "jar:file:/devel/jboss-6.1.0.Final/server/default/tmp/vfs/automount40a6ed1db5eabeab/myapp.war-43e2c3dfa858f4d2//WEB-INF/lib/tapestry-core-5.2.6.jar!/org/apache/tapestry5/corelib/components/".
String actualJarPath = "jar:" + physicalWarDirStr + jarPart + "!" + packagePart;
return new URL(actualJarPath);
}
// Otherwise, ask the VFS what the physical URL is...
else {
URLConnection connection = url.openConnection();
Object jBossVirtualFile = connection.getContent();
// Use reflection so that we don't need JBoss in the classpath at compile time.
File physicalFile = (File) invoke(jBossVirtualFile, "getPhysicalFile");
URL physicalFileURL = physicalFile.toURI().toURL();
return physicalFileURL;
}
}
catch (Exception e)
{
logger.error(e.getCause().toString());
}
}
return url;
}
private Object invokerGetter(Object target, String getter) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException
{
Class<?> type = target.getClass();
Method method;
try
{
method = type.getMethod(getter);
}
catch (NoSuchMethodException e)
{
method = type.getDeclaredMethod(getter);
method.setAccessible(true);
}
return method.invoke(target);
}
}
To override the default implementation of ClasspathURLConverter, just add the above ClasspathURLConverterJBoss6Dot1.java to your project and add the following piece of code to yourAppModule.java.
public static void contributeServiceOverride(MappedConfiguration<Class,Object> configuration)
{
configuration.add(ClasspathURLConverter.class, new ClasspathURLConverterJBoss6Dot1());
}
The above just override the default ClaspathURLConverter service. For more information on overriding a general service, please seehttp://tapestry.apache.org/ioc-cookbook-overriding-ioc-services.html.
The above fix has been tested with Tapestry 5.2 on JBoss 6.1.0.
Reference:
http://wiki.apache.org/tapestry/HowToRunTapestry5OnJBoss6Dot1?action=CopyPage
How To: Run Tapestry5 On JBoss 6/7的更多相关文章
- 【JBOSS】 JBOSS目录结构
JBOSS在默认情况下可以用3种方式启动minimal,default和all.三种模式内部的模块数量依次递增 例如: 1-执行JBOSS_HOME/bin/run.bat批量处理文件启动JBos ...
- jboss eap 6.3 域(Domain)模式配置
jboss提供了二种运行模式:standalone(独立运行模式).domain(域模式),日常开发中,使用standalone模式足已:但生产部署时,一个app,往往是部署在jboss集群环境中的, ...
- 以Debug模式启动JBoss
JBoss服务器的启动方法: 假设JBoss的安装目录为$JBOSS_HOME,Windows以及Linux环境下的Debug模式的启动方法分别为:Windows环境:找到Windows下的JBoss ...
- jboss使用(eap 6.0以后版本)
以6.3版本为例,下载地址 https://www.jboss.org/products/eap/download/,这个地址现在有问题了,下不了好像要redhat账号还要花钱?不知咋回事 下载完成后 ...
- eclipse 在jboss的debug配置(ubuntu系统)
转自:https://blog.csdn.net/iteye_3878/article/details/81695877 由于我在ubuntu下权限设置分开,如 /home/jboss/ (jboss ...
- win7怎么安装和启动 jboss
本文以JBoss Application Server 4.2.1 GA(以下简称JBoss)为例,介绍它在Windows平台上的启动过程.为了方便叙述,对平台环境做以下假定:Java运行时的安装路径 ...
- jboss之启动加载过程详解
今天看了看jboss的boot.log和server.log日志,结合自己的理解和其他的资料,现对jboss的启动和加载过程做出如下总结: boot.xml是服务器的启动过程的日志,不涉及后续的操作过 ...
- CWMP开源代码研究3——ACS介绍
声明:本文涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文介绍自己用过的ACS,其中包括开源版(提供下载包)和商业版(仅提供安装包下载 ...
- JavaEE&Docker 容器示例
准备:jboss.jdk.一个javaee的war包.Dockerfile 注:jboss和jdk可以不用提前准备好,在命令中wget也可以,因为我恰好有,就直接复制了 Dockerfile内容: # ...
随机推荐
- Python中模块json与pickle的功能介绍
json & pickle & shelve 1. json的序列化与反序列化 json的使用需要导入该模块,一般使用import json即可. json的序列化 方法1:json. ...
- C语言设计第一次作业
1 (1)题目:求圆面积和周长 (2)流程图: (3)测试数据及运行结果: (4)实验分析:暂时没问题. 2 (1)题目:输入一个四位年份,判断其是否是闰年.闰年的判别条件是该年年份能被4整除但不能被 ...
- Zookeeper 快速入门(上)
来源:holynull, blog.leanote.com/post/holynull/Zookeeper 如有好文章投稿,请点击 → 这里了解详情 Zookeeper是Hadoop分布式调度服务,用 ...
- electron-vue 初体验
注意事项 首先确保node和npm是最新版本 避免使用镜像(我淘宝镜像安装有报错现象) 避免window的一些坑 若上一项检查完成,我们可以继续设置所需的构建工具.使用 windows-build-t ...
- Springboot项目maven多模块拆分
多模块拆分的必要性 使用Java技术开发的工程项目,无论是数据处理系统还是Web网站,随着项目的不断发展,需求的不断细化与添加,工程项目中的代码越来越多,包结构也越来越复杂这时候工程的进展就会遇到各种 ...
- 【python进阶】Garbage collection垃圾回收1
前言 GC垃圾回收在python中是很重要的一部分,同样我将分两次去讲解Garbage collection垃圾回收,此篇为Garbage collection垃圾回收第一篇,下面开始今天的说明~~~ ...
- 谷歌刚发布的求梯度的工具包-Tangent
安装很简单sudo pip install tangent. 我机器上,终端上用python,tangent报错,但在终端上用ipython,tangent不报错. 我检验是否可用tangent的方法 ...
- ubuntu14.04 安装PIL库出现OError: decoder jpeg not available 的解决方案
出现 OError: decoder jpeg not available 的原因是,没有装JPEG的库,同时要支持png图片的话还要装 ZLIB.FREETYPE2.LITTLECMS的库文件. 先 ...
- JS基础速成(二)-BOM(浏览器对象模型)
.t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.BOM(浏览器对象模型) 1.screen对象. console.lo ...
- 操作系统内核Hack:(四)内核雏形
操作系统内核Hack:(四)内核雏形 在本系列的前一篇文章<操作系统内核Hack:(三)BootLoader制作>中,我们制作出了一个两阶段引导BootLoader,并进入了一个内核的空壳 ...