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内容: # ...
随机推荐
- Automap sqlalchemy.ext.automap 自动映射数据库表结构
from sqlalchemy.ext.automap import automap_base from sqlalchemy.orm import Session from sqlalchemy i ...
- jquery easyui combobox 高度自适应
data-options="required:true,editable:false,panelHeight:'auto'" 加上panelHeight:'auto'即可 列合并 ...
- Redis学习汇总
[Redis教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用redis 4.学会安装redis 5.学会启动redis 6.使用redis客户端 7.redis数据结构 – ...
- Ubuntu14.04和Windows双系统时无法挂载磁盘解决方法
基本状况:我电脑Ubuntu14.04 和 Windows10 双系统,一个固态磁盘,一个机械磁盘.Ubuntu14.04装固态里面了,固态里没有Windows内容. 问题:Ubuntu14.04系统 ...
- 谷歌刚发布的求梯度的工具包-Tangent
安装很简单sudo pip install tangent. 我机器上,终端上用python,tangent报错,但在终端上用ipython,tangent不报错. 我检验是否可用tangent的方法 ...
- 【阿里聚安全·安全周刊】Google“手枪”替换 | 伊朗中央银行禁止加密货币
本周七个关键词:Google"手枪"替换丨IOS 漏洞影响工业交换机丨伊朗中央银行禁止加密货币丨黑客针对医疗保健丨付费DDoS攻击丨数据获利的8种方式丨MySQL 8.0 正式版 ...
- 码农代理免费代理ip端口字段js加密破解
起因 之前挖过爬取免费代理ip的坑,一个比较帅的同事热心发我有免费代理ip的网站,遂研究了下:https://proxy.coderbusy.com/. 解密 因为之前爬过类似的网站有了些经验,大概知 ...
- Template基础
模板系统的介绍 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now ...
- 两行代码搞定Android视图扩散切换效果
用最简单的方式来实现Android视图扩散切换效果. 一.概述 这两天时间动手撸了个视图扩散切换效果的控制器,API兼容至Android4.0,更方便我们在视图切换过程中有炫酷的过渡效果.本来是想实现 ...
- android NDK的下载-文件太大
需要FQ,建议使用VPN,下载前准备点时间配置网络环境.我的百度网盘好像有~~不过忘记地址了,改天共享,或者私聊我. 2015.4 Android 5.1 Android Studio https:/ ...