Tôi đang cố gắng tạo ứng dụng khách/máy chủ RMI Java. Tôi đang gặp sự cố khi khởi động phía máy chủ của ứng dụng, vì nó tiếp tục chạy vào một ClassNotFoundException trong khi gọi đến phương thức Registry.bind() khi tôi cố gắng khởi động phía máy chủ của ứng dụng.Làm cách nào để đặt classpath mà rmiregistry sử dụng?
Tôi bắt đầu với hướng dẫn đơn giản tại đây: http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html. Sau khi làm theo các hướng dẫn đó, ban đầu nó đã ném một ClassNotFoundException phàn nàn rằng nó không thể tìm thấy "example.hello.Hello". Tôi đã có thể giải quyết điều đó bằng cách bắt đầu quá trình rmiregistry từ thư mục destDir trong hướng dẫn, vì rõ ràng là, sử dụng thư mục khởi đầu ban đầu của nó như là một phần của classpath của nó.
Tôi bắt đầu trên ứng dụng thử nghiệm khác của mình sau đó và tôi đã ổn cho đến khi tôi bắt đầu sử dụng các tệp jar của bên thứ ba trong lớp máy chủ của tôi. Bây giờ Registry.bind() ném ClassNotFoundException nếu lớp máy chủ của tôi tham chiếu bất cứ thứ gì trong bất kỳ tệp jar nào kể từ khi ứng dụng rmiregistry không biết về các tệp jar đó.
Theo như tôi có thể nói, rmiregistry không chấp nhận bất kỳ loại classpath khởi động arg, vì vậy tôi tự hỏi làm thế nào tôi có thể nói cho nó những gì classpath tôi muốn nó thừa nhận. Theo hướng dẫn tại đây: http://docs.oracle.com/javase/tutorial/rmi/running.html, "bạn phải đảm bảo rằng vỏ hoặc cửa sổ mà bạn sẽ chạy rmiregistry hoặc có no biến môi trường CLASSPATH hoặc có biến môi trường CLASSPATH không bao gồm đường dẫn đến bất kỳ lớp nào mà bạn muốn tải xuống cho khách hàng của các đối tượng ở xa của bạn. " Nghe có vẻ như trái ngược với những gì tôi cần ... hoặc tôi đọc nó không chính xác? Có ai có thành công trong việc khởi động máy khách/máy chủ RMI sử dụng các lọ bên thứ ba (commons-io, commons-logging, và rmiio, trong trường hợp của tôi) không?
Đây là trên Windows, theo cách của họ.
Cập nhật Tôi tìm thấy một con đường xung quanh nó. Xem câu trả lời của tôi dưới đây.
Làm việc tốt. Như một lời nhắc thân thiện, bạn có thể tự mình đăng câu trả lời cho câu hỏi và sau đó chấp nhận câu trả lời đó để chúng tôi có thể đóng câu hỏi này không? Ngoài ra, bạn cần chấp nhận câu trả lời cho các câu hỏi trước nếu chúng khắc phục được sự cố của bạn. – Zecas