0 0

web服务动态加载自己的类包(jar包) URLClassLoader 10

菜鸟 请教个问题哈 用URLClassload来加载自己打包的jar包,在控制台测试通过,为什么发布成服务后就load不进来那个jar包了呢,

//URL url = Transmission.class.getResource("agent.jar");
URL url = new URL("file:/E:/AB_F/BPEL/AgentPro/Transmission/build/classes/agent.jar");
System.out.println(url);
URLClassLoader loader = new URLClassLoader(new URL[] { url }, Thread.currentThread().getContextClassLoader());

急求啊!!!

问题补充:是在本机上!不过将来是要到不同机子上做测试的,用tomcat做测试。还有您说用相对路径是指把ar包拷到tomcat的webapps下么,然后用http://localhost:8080/XXXX/agent.jar么?如果能这样就更好了!好吧 贴出全部代码:求教:


import java.net.URL;
import java.net.URLClassLoader;


public class Transmission {
        //path为传输过来的agent.jar包路径
public String invokeFun(String path){
boolean bo = true;
while (bo) {
try {
//i++;
Thread.sleep(1000);
//找到已经传输过来的agent
//URL url = Transmission.class.getResource("agent.jar");
URL url = new URL(path);
//System.out.println(url);
URLClassLoader loader = new URLClassLoader(new URL[] { url }, Thread.currentThread().getContextClassLoader());
//System.out.println(loader);
//把agent jar包中的类load进来
        Class clazz = loader.loadClass("ImInterf");
        //System.out.println(clazz);
    if (clazz == null) {
    bo = true;
    return "False!";
}else{
//实例化类对象
Object obj = clazz.newInstance();
//声明一个接口对象,以用来调用接口中的方法
interf mai = (interf) obj;
mai.fun("Josh", "Cindy");
bo = false;
//System.out.println("Succed!");
}

} catch (Exception e) {
System.out.println("error");

}
}
return "";
}

//public static void main(String[] arg0){
// Transmission T = new Transmission();
// T.invokeFun("file:/E:/4.jar");
//}

}

说明:
interf是在另一个工程中定义的接口,然后导出jar包,再导入到本Transmission 类中;
agent.jar是打包了的实现了interf接口的方法的类;
运行思路:大概就是把Transmission类发布成服务,服务端通过调用这个服务来实现动态加载agent.jar包。

恩 就是这个样子了 还请给出详细解决办法 谢谢!
2013年5月15日 20:14

1个答案 按时间排序 按投票排序

0 0

引用
发布成服务后
这个描述清楚一点,是在本机,还是换机器了,如果换机器的话就是绝对地址的问题,URL url = new URL("file:/E:/AB_F/BPEL/AgentPro/Transmission/build/classes/agent.jar");
这个还是建议用相对地址。

2013年5月16日 08:39

相关推荐

Global site tag (gtag.js) - Google Analytics