一,Remote EJB
服务接口定义:
1 package yjmyzz.ejb.server.helloworld;
2
3 public interface HelloWorldService {
4
5 public String sayHello(String name);
6
7 }
实现:
1 package yjmyzz.ejb.server.helloworld;
2
3 import javax.annotation.security.RolesAllowed;
4 import javax.ejb.Remote;
5 import javax.ejb.Stateless;
6
7 @Stateless
8 @Remote(HelloWorldService.class)
9 @RolesAllowed({ "guest" })
10 public class HelloWorldBean implements HelloWorldService {
11
12 public String sayHello(String name) {
13 return "hello , " + name + " , welcome to EJB's world!";
14 }
15
16 }
注意: @RoleAllowed({"guest"}) 该注解表示只有guest这个角色的用户才能调用HelloWorldBean
对应maven的pom.xml内容如下:
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>yjmyzz</groupId>
<artifactId>ejb-server-helloworld</artifactId>
<version>1.0</version>
<packaging>ejb</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.jboss.maven.plugin>7.4.Final</version.jboss.maven.plugin>
<version.jboss.spec.javaee.6.0>3.0.2.Final</version.jboss.spec.javaee.6.0>
<version.ejb.plugin>2.3</version.ejb.plugin>
<maven.compiler.target>1.6</maven.compiler.target>
<maven.compiler.source>1.6</maven.compiler.source>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
<version>${version.jboss.spec.javaee.6.0}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.spec.javax.annotation</groupId>
<artifactId>jboss-annotations-api_1.1_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.1_spec</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.jboss.as.plugins</groupId>
<artifactId>jboss-as-maven-plugin</artifactId>
<version>${version.jboss.maven.plugin}</version>
<configuration>
<filename>${project.build.finalName}.jar</filename>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>${version.ejb.plugin}</version>
<configuration>
<ejbVersion>3.1</ejbVersion>
<generateClient>true</generateClient>
</configuration>
</plugin>
</plugins>
</build>
</project>
二,EJB Client
1 package yjmyzz.ejb.client.helloworld;
2
3 import java.util.Hashtable;
4
5 import javax.naming.Context;
6 import javax.naming.InitialContext;
7 import javax.naming.NamingException;
8
9 import yjmyzz.ejb.server.helloworld.HelloWorldService;
10
11
12 public class EjbClientApp {
13 public static void main(String[] args) throws NamingException {
14 System.out.println(lookupRemoteBean().sayHello("jimmy"));
15 }
16
17 @SuppressWarnings("unchecked")
18 private static HelloWorldService lookupRemoteBean() throws NamingException {
19 @SuppressWarnings("rawtypes")
20 final Hashtable jndiProperties = new Hashtable();
21 jndiProperties.put(Context.URL_PKG_PREFIXES,
22 "org.jboss.ejb.client.naming");
23 final Context context = new InitialContext(jndiProperties);
24 return (HelloWorldService) context
25 .lookup("ejb:/ejb-server-helloworld/HelloWorldBean!"
26 + HelloWorldService.class.getName());
27 }
28 }
注: lookupRemoteBean用于查找远程EJB.
jboss环境中,需要在classpath路径下放置jboss-ejb-client.properties文件,内容参考下面:
1 remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
2 remote.connections=default
3 remote.connection.default.host=localhost
4 remote.connection.default.port = 4447
5 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
6 remote.connection.default.username=msgUser
7 remote.connection.default.password=Password1!
注: msgUser为jboss中创建的一个application user,而且属于guest组(不熟悉jboss下创建用户的朋友,可参考JMS + jboss EAP 6.2 示例 中的相关内容)
对应maven项目的pom.xml为:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>yjmyzz</groupId>
<artifactId>ejb-client-helloworld</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>ejb-client-helloworld</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>yjmyzz</groupId>
<artifactId>ejb-server-helloworld</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.transaction</groupId>
<artifactId>jboss-transaction-api_1.1_spec</artifactId>
<version>1.0.1.Final-redhat-2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.1_spec</artifactId>
<version>1.0.2.Final-redhat-2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jboss-ejb-client</artifactId>
<version>1.0.21.Final-redhat-1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jboss.xnio</groupId>
<artifactId>xnio-nio</artifactId>
<version>3.0.7.GA-redhat-1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jboss.sasl</groupId>
<artifactId>jboss-sasl</artifactId>
<version>1.0.3.Final-redhat-1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jboss.marshalling</groupId>
<artifactId>jboss-marshalling-river</artifactId>
<version>1.3.16.GA-redhat-1</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
示例源码: remote-ejb-with-security-sample.zip