架構概覽
- 伺服器:JBoss AS
- 客戶端需引入
jbossall-client.jar
- 元件:Remote/Local 介面 + 無狀態 Bean 實作 + 客戶端 JNDI 查找
程式碼結構
// HelloBeanRemote.java
@Remote
public interface HelloBeanRemote {
String sayHello(String name);
}
// HelloBeanLocal.java
@Local
public interface HelloBeanLocal { }
// HelloBean.java
@Stateless
public class HelloBean implements HelloBeanLocal, HelloBeanRemote {
public String sayHello(String name) {
System.out.println("伺服器端輸出:" + name);
return "Hello, " + name;
}
}
// HelloBeanClient.java
public class HelloBeanClient {
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "127.0.0.1:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
InitialContext ctx = new InitialContext(props);
HelloBeanRemote remote = (HelloBeanRemote) ctx.lookup("HelloBean/remote");
System.out.println(remote.sayHello("Beijing"));
ctx.close();
}
}
關鍵點解析
@Stateless 宣告無狀態 Session Bean,容器管理生命週期與池化。
@Remote/@Local 分離遠端與本地介面,客戶端透過 JNDI 名稱 EJB名/remote 查找。
- JBoss 專屬 JNDI 參數:
org.jnp.interfaces.NamingContextFactory、jnp://host:1099。
- 部署打包為
.jar 放入 server/default/deploy,JBoss 自動偵測註解部署。