首页 > Web开发 > 详细

Rribbit 与Weblogic集成

时间:2015-11-10 02:10:29      阅读:347      评论:0      收藏:0      [点我收藏+]

Rribbit不支持直接部署进Weblogic,原因在于Weblogic解析jar文件的协议是zip,而其它如tomcat,jetty是jar协议。

解决办法如下:

import java.io.File;

import java.io.IOException;

import java.net.URL;

import java.net.URLDecoder;

import java.util.ArrayList;

import java.util.Collection;

import java.util.Enumeration;

import java.util.jar.JarFile;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import java.util.zip.ZipEntry;

import java.util.zip.ZipFile;

?

import org.rribbit.creation.SpringBeanClassBasedListenerObjectCreator;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

?

/**

?*?

?* @author wangx

?* @date Nov 4, 2015

?* @version

?*/

?

public class CustomListenerObjectCreator extends SpringBeanClassBasedListenerObjectCreator {

private static final Logger log = LoggerFactory.getLogger(SpringBeanClassBasedListenerObjectCreator.class);

?

/*

* (non-Javadoc)

*?

* @see

* org.rribbit.creation.AbstractClassBasedListenerObjectCreator#getClasses

* (java.lang.String, boolean)

*/

@Override

protected Collection<Class<?>> getClasses(String packageName, boolean scanSubPackages) throws ClassNotFoundException, IOException {

?

String path = packageName.replace(‘.‘, ‘/‘);

Enumeration<URL> resources = getClassLoader().getResources(path);

Collection<Class<?>> classes = new ArrayList();

while (resources.hasMoreElements()) {

URL resource = (URL) resources.nextElement();

String filename = URLDecoder.decode(resource.getFile(), "UTF-8");

log.debug("Processing resource ‘{}‘ with filename ‘{}‘", resource, filename);

?

if (resource.getProtocol().equals("jar")) {

String jarFilename = filename.substring(5, filename.indexOf("!"));

JarFile jarFile = new JarFile(jarFilename);

classes.addAll(findClassesInJarFile(jarFile, path, scanSubPackages));

} else if (resource.getProtocol().equals("zip")) {

String zipFilename = filename.substring(0, filename.indexOf("!"));

ZipFile jarFile = new ZipFile(zipFilename);

classes.addAll(findClassesInZipFile(jarFile, path, scanSubPackages));

} else {

File directory = new File(filename);

classes.addAll(findClassesInDirectory(directory, packageName, scanSubPackages));

}

}

return classes;

}

?

protected Collection<Class<?>> findClassesInZipFile(ZipFile jarFile, String path, boolean scanSubPackages) throws ClassNotFoundException {

?

log.debug("Scanning jarFile ‘{}‘ for classes in package ‘{}‘", jarFile.getName(), path);

Collection<Class<?>> classes = new ArrayList<Class<?>>();

Enumeration<ZipEntry> jarEntries = (Enumeration<ZipEntry>) jarFile.entries();

while(jarEntries.hasMoreElements()) {

String entryName = jarEntries.nextElement().getName();

log.debug("Entry name: ‘{}‘", entryName);

Pattern p;

if(scanSubPackages) {

p = Pattern.compile("(" + path + "/[\\w/]+)\\.class");

} else {

p = Pattern.compile("(" + path + "/\\w+)\\.class");

}

Matcher m = p.matcher(entryName);

if(m.matches()) {

String className = m.group(1).replaceAll("/", ".");

log.debug("Adding Class {}", className);

classes.add(Class.forName(className));

}

}

return classes;

}

<bean id="creator"

class="com.geone.its.CustomListenerObjectCreator">

<property name="packageNames">

<list>

<value>com</value>

</list>

</property>

<property name="scanSubpackages" value="true" />

</bean>

Rribbit 与Weblogic集成

原文:http://wangxiang286.iteye.com/blog/2255644

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!