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内容: # ...
随机推荐
- C++11的原子量与内存序浅析
一.多线程下共享变量的问题 在多线程编程中经常需要在不同线程之间共享一些变量,然而对于共享变量操作却经常造成一些莫名奇妙的错误,除非老老实实加锁对访问保护,否则经常出现一些(看起来)匪夷所思的情况.比 ...
- 好久没用IJ写Java 之 《求输入的一个数中包含奇数、偶数、零的个数》
/** *Created by xuzili at 22:12 on 2018/4/4 */ // 以上注释使用了IntelliJ Idea的File-Settings-Editor-Live Tem ...
- Tomcat性能调优-JVM监控与调优
参数设置 在Java虚拟机的参数中,有3种表示方法用"ps -ef |grep "java"命令,可以得到当前Java进程的所有启动参数和配置参数: 标准参数(-),所有 ...
- webstorm2017破解
选择"license server" 输入:http://idea.imsxm.com/ 2017支持vue了
- C#系统之垃圾回收
1. using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syste ...
- 【SSH系列】初识spring+入门demo
学习过了hibernate,也就是冬天,经过一个冬天的冬眠,当春风吹绿大地,万物复苏,我们迎来了spring,在前面的一系列博文中,小编介绍hibernate的相关知识,接下来的博文中,小编将继续介绍 ...
- 本人正竞选CSDN博客之星,欢迎各位来访的朋友能为我投上一票
投票网址:http://blog.csdn.net/vote/candidate.html?username=morixinguan&from=timeline 谢谢各位!
- Unity插件 - MeshEditor(八)模型镜像特效
将静态模型(带MeshFilter)按指定轴向.指定距离克隆一个镜像物体出来,思路很简单,将模型的顶点坐标按指定轴取反,并累加上设定的距离值,然后就完毕了!不过,因为镜像体的顶点镜像于之前模型的顶点, ...
- WmS详解(二)之如何理解Window和窗口的关系?基于Android7.0源码
上篇博客(WmS详解(一)之token到底是什么?基于Android7.0源码)中我们简要介绍了token的作用,这里涉及到的概念非常多,其中出现频率最高的要数Window和窗口这一对搭档了,那么我们 ...
- Memcached - In Action
Memcached 标签 : Java与NoSQL With Java 比较知名的Java Memcached客户端有三款:Java-Memcached-Client.XMemcached以及Spym ...