写一个EJB的跨机器访问的例子
时间: 2024-03-12 20:47:50 浏览: 15
好的,下面是一个简单的EJB跨机器访问的例子:
1. 创建EJB接口
```java
import javax.ejb.Remote;
@Remote
public interface GreetingService {
String sayHello(String name);
}
```
2. 创建EJB实现类
```java
import javax.ejb.Stateless;
@Stateless
public class GreetingServiceImpl implements GreetingService {
public String sayHello(String name) {
return "Hello, " + name + "!";
}
}
```
3. 在服务器端配置EJB
在服务器的EJB容器中配置EJB,例如,在Wildfly中,可以将EJB部署为WAR包,并在WEB-INF目录下创建一个名为jboss-ejb3.xml的文件,配置EJB的JNDI名称和访问地址,例如:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/schema/jbossas/jboss-ejb3-2_0.xsd
http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_2.xsd"
version="3.2">
<enterprise-beans>
<session>
<ejb-name>GreetingService</ejb-name>
<ejb-class>com.example.GreetingServiceImpl</ejb-class>
<session-type>Stateless</session-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>GreetingService</ejb-name>
<method-name>*</method-name>
</method>
</container-transaction>
</assembly-descriptor>
</jboss:ejb-jar>
```
4. 在客户端访问EJB
在客户端,使用JNDI API查找远程EJB,并调用它的方法:
```java
import javax.naming.InitialContext;
import com.example.GreetingService;
public class Client {
public static void main(String[] args) throws Exception {
InitialContext ctx = new InitialContext();
GreetingService service = (GreetingService) ctx.lookup("ejb:/myapp/GreetingService!com.example.GreetingService");
String message = service.sayHello("World");
System.out.println(message);
}
}
```
其中,"ejb:/myapp/GreetingService!com.example.GreetingService"是EJB的JNDI名称和接口类型,myapp是服务器上部署EJB的应用程序名称,可以根据具体情况进行修改。
注意,客户端需要在classpath中添加EJB接口的实现类和依赖库。