当前位置: 首页 > 知识库问答 >
问题:

在JSF和Tomcat中使用RMI

穆正祥
2023-03-14
import java.rmi.Remote;

public interface Foo extends Remote {
   public String exec(String test) throws Exception;
}
import java.rmi.server.UnicastRemoteObject;

public class FooImpl extends UnicastRemoteObject implements Foo {

    public FooImpl() throws Exception {
        java.rmi.registry.LocateRegistry.createRegistry(1099);
        java.rmi.Naming.rebind("myFoo",this);
    }

    public String exec(String test) {
        return "This is a Test";
    }

    public static void main(String[] args) {
        try {
            FooImpl fooImpl = new FooImpl();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

@ManagedBean
@RequestScoped
public class IndexBean {

    public void execute() {
        try {
            Foo foo = (Foo) java.rmi.Naming.lookup("//localhost/myFoo");
            System.out.println(foo.exec());
        } catch (NotBoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

}

unmarshalException:解组返回错误;嵌套异常为:java.lang.ClassNotFoundException:Foo(无安全管理器:禁用RMI类加载器),地址为sun.RMI.registry.registryimpl_stub.lookup(未知源),地址为java.RMI.naming.lookup(naming.java:101),地址为bean.indexbean.execute(indexbean.java:15),地址为sun.reflect.nativeMethodAccessorImpl.invoke(Native Method),地址为Method.java:606)在org.apache.el.parser.astvalue.invoke(astvalue.java:245)在org.apache.el.methodExpressionImpl.invoke(methodExpressionImpl.java:277)在org.apache.myfaces.view.facelets.el.contextawareTagMethodExpression.invoke(contextawareTagMethodExpression.invoke(位于javax.faces.component.component.uicommand.broadcast(uicommand.java:409)的omponentbase.broadcast(uicommand.java:103)的javax.faces.component.uiviewroot._broadcastall(uiviewroot.java:1013)的javax.faces.component.component.uiviewroot.broadcastEvents(uiviewroot.java:284)的javax.faces.component.uiviewroot._processing在org.apache.myfaces.lifecycle.lifecycleimpl.executePhase(Lifecycleimpl.java:170)在org.apache.myfaces.lifecycleimpl.execute(Lifecycleimpl.java:117)在javax.faces.webapp.facesservlet.service(facesservlet.java:197)在org.apache.catalina.core.applicationFilterChain.InternaldoFilter(applicationFilterChain.java:291)在cat.websocket.server.wsfilter.doFilter(wsfilter.java:52)atinternaldoFilter(applicationFilterChain.java:239)在org.apache.catalina.core.applicationFilterChain.doFilter(applicationFilterChain.java:206)在org.apache.catalina.core.standardWrapperValve.invoke(standardWrapperValve.invoke(standardWrapperValve.java:219)在org.apache.catalina.core.standardContextValve.invoke(standardContextValve.invoke在org.apache.catalina.valves.errorReportValve.invoke(errorReportValve.java:79)在org.apache.catalina.valves.abstractAccessLogValve.invoke(abstractAccessLogValve.java:610)在org.apache.catalina.core.standardEnginEvalve.invoke(StandardEnginEvalve.java:88)在ache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)在org.apache.coyote.http11.http11NioProtocol$http11ConnectionHandler.process(http11NioProtocol.java:222)在org.apache.tomcat.util.net.nioEndpoint$socketProcessor.dorun(NioEndpoint.java:1566)在org.apache.tomcat.util.net.nioEndpoint$socketProcessor.run$worker.run(threadpoolexecutor.java:615)在org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61)在java.lang.thread.run(thread.java:744)由:java.lang.thread.run(thread.java:744)引起:java.lang.thread.run(taskthread.java:61)在sun.RMI.server.loaderhandler.loader.loader:553)在XyClass(rmiclAssLoader.java:311)位于sun.RMI.server.MarshalInputStream.resolv在java.io.objectinputstream.readProxyDesc(objectinputstream.java:1558)在java.io.objectinputstream.readClassDesc(objectinputstream.java:1514)在java.io.objectinputstream.readOrdinaryObject(objectinputstream.java:1771)在java.io.objectinputstream.readObjectinputstream.readObject0(objectinputstream.java:

另外,我更改了Tomcat使用的端口,以避免与RMI端口发生冲突。

共有1个答案

司寇祖鹤
2023-03-14

客户机的类路径上没有远程接口,也可能没有存根。若要避免使用存根,请添加

super(0);

作为构造函数的第一行。

NB必须将createRegistry()的结果存储在静态变量中,以防止注册表退出。

 类似资料:
  • 问题内容: 不仅仅是一个问题,我需要使用jsf执行身份验证。我开发了一个登录名,该登录名接收存储在MySQL中的用户名和密码。从Active Directory登录后,它应该使用AD的用户名和密码,我想应该与MySQL的用户名和密码相同。 然后,要进入系统,您将不再看到登录名,而是直接看到主页或主页。 希望您的帮助和预先感谢。 问候。 问题答案: 这是我的解决方案,对我有用:编辑faces-con

  • 问题内容: 我在JSF托管bean中使用了Hibernate Validation批注。当我使用时,或者它们似乎没有以任何方式被触发。 视图: 这是怎么引起的,我该如何解决? 问题答案: 介绍 由于您未对使用的是哪个容器的问题发表评论,因此我在您的问题历史记录中进行了了解,以了解所有使用的容器。到目前为止,我只找到了Tomcat。因此,对于这个答案,我将假设您确实使用了我最初在发布评论时所猜测的T

  • 我正在创建一个新的JSF2.0项目,并获得:

  • 问题内容: 我想在我的JSF Web项目上实现Ajax。我搜索了一下,发现ICEFaces正在通过JSF支持Ajax。但是我不知道它的可用性。 任何人都有Ajax / JSF的经验,请指导我搬到哪里。 [编辑] 如果有人有类似经验,请也分享可用性。好与坏.. 问题答案: JSF 2.0使用f:ajax标记内置了对Ajax的支持。ICEFaces,OpenFaces和RichFaces的所有三个都还

  • 问题内容: 我正在用Apache My Faces编写JSF 1.2应用程序。我不能使用任何自定义的组件库- 例如tomahawk或a4j等。有没有一种方法可以使用Ajax调用JSF的操作方法?完成JSF动作后,我想通过Javascript处理JSF动作的响应,并在客户端填充DIV标记?可能吗?谢谢。 问题答案: JSF 1.2不提供任何内置的ajax功能。您基本上有2个选择: Homegrow一

  • 这快把我逼疯了。欢迎提出任何建议。