JBoss(EJB)へのアクセスがエラーになります。
今回初めて、JBossを利用してステートレスJavaBeanをクライアントからアクセスしようとしています。クライアントでJBossサーバのアドレスを"localhost"または"127.0.0.1"とするとアクセスできますが、実際のIPアドレスを指定すると以下のエラーが出ます。
Could not obtain connection to any of these urls: 10.200.33.181:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out]
もし、原因などが判る方がいらっしゃれば、アドバイスをお願いします。
【環境】
JBoss jboss-4.2.0.GA
Java Sun JDK1.6.0
サーバOS Windows XP/Redhat Enterprise Linux4(両方とも同じ現象)
【インターフェースプログラム】
package sample;
public interface Bank {
String getName();
}
【Bean本体プログラム】
package sample;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
@Stateless
@Remote
@Local
public class BankBean implements Bank {
public String getName() {
return "Hello World";
}
}
【クライアントプログラム】
package sample;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.Properties;
public class Client {
public static void main(String[] args) {
Properties props = new Properties();
props.put("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
props.put("java.naming.factory.url.pkgs",
"org.jboss.naming:org.jnp.interfaces");
props.put("java.naming.provider.url", "10.200.33.181:1099"); // エラー
//props.put("java.naming.provider.url", "127.0.0.1:1099"); // OK
// props.put ("java.naming.provider.url", "158.214.125.162:1099"); // エラー
//props.put ("java.naming.provider.url", "MY-SERVER"); // エラー
// props.put ("java.naming.provider.url", "localhost:1099"); // OK
try {
Context ctx = new InitialContext(props);
Bank ejb = (Bank) ctx.lookup("BankBean/remote"); // エラー発生場所
System.out.println(ejb.getName());
} catch (NamingException e) {
System.err.println(e.getMessage());
e.printStackTrace();
}
}
}
お礼
ありがとうございます。 参考URLには Java BeansとEJBとの大きな違いの一つは、 Java Beansが一つのJVM(Java Virtual Machine)上でローカルに利用されるのに対して、EJBは、異なるJVM上のオブジェクトを、ネットワークを介して利用するものだということがあります。 とありました。 なるほどー。なんとなくのイメージはわかりました。