远程EJB使用

urn:jboss:domain:remoting

Socket端口配置

ejb-security-realm

远程调用EJB总共以下几个步骤

第一步 写服务器端service

第二步 配置用户

第三步 配置端口

第四步 配置EJB

第五步 配置客户端

第六步 写客户端

第一步 写服务器端代码

远程EJB一定要写接口,学过EJB的都知道本地EJB是可以无接口的。

这里为了简便,我不用EAR或者jar的方式去部署,我用war来部署远程EJB

接口

package ejbserver;
 
public interface HelloService {
 
String say();
}

实现类

package ejbserver;
 
import javax.ejb.Remote;
import javax.ejb.Stateless;
 
@Remote(HelloService.class)
@Stateless
public class HelloServiceBean implements HelloService {
 
@Override
public String say() {
return "Hello world!";
}
 
}
那么简单的服务器端代码就完成了。

第二步,配置用户

配置用户是必须的,是为了安全,如果远程EJB放在网上,谁都可以访问,那么商业数据就可以被任意修改和访问,造成的损失将不可预计!

首先使用JBOSS Wildflyadd-user程序添加用户。

我的电脑上该命令位于以下位置

D:\WebServer\wildfly-9.0.2.Final\bin\add-user.bat

添加完了用户之后,以下文件会插入一行数据

D:\WebServer\wildfly-9.0.2.Final\standalone\configuration\application-users.properties

ejb=5aeed860e2461b9cbda91264f3b600dd

仅仅这样就够了么?

NO!还需要配置standalone.xml中的安全域,

<management>
……
        <security-realms>
……
<security-realm name="ejb-security-realm">
<server-identities>
<secret value="dGVzdA=="/>
</server-identities>
</security-realm>
</security-realms>
……
</management>


第三步 配置端口

<socket-binding-group 
name="standard-sockets"
default-interface="public" 	port-offset="${jboss.socket.binding.port-offset:0}">
……
<outbound-socket-binding name="remote-ejb">
            <remote-destination host="localhost" port="8080"/>
</outbound-socket-binding>
</socket-binding-group>


第四步 配置EJB

这步配置的作用就是将上面两个配置连接起来,作为EJB。等于是说让服务器的远程EJB服务使用这个端口和这个用户!

<subsystem xmlns="urn:jboss:domain:remoting:3.0">
            <endpoint worker="default"/>
            <http-connector
name="http-remoting-connector"
connector-ref="default" 	security-realm="ApplicationRealm"/>
            <outbound-connections>
                <remote-outbound-connection name="remote-ejb-connection" 	outbound-socket-binding-ref="remote-ejb"
username="ejb"
security-realm="ejb-security-realm" 	protocol="http-remoting">
                    <properties>
                        <property 
name="SASL_POLICY_NOANONYMOUS" value="false"/>
                        <property name="SSL_ENABLED" value="false"/>
                    </properties>
                </remote-outbound-connection>
            </outbound-connections>
        </subsystem>


第五步 配置客户端

classpath的根目录下写下这个文件

/jboss-ejb-client.properties

在实际的应用中可以使用将这个文件放在生成的ejb-client中!

文件内容如下:

endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=9080
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.username=ejb
remote.connection.default.password=test

第六步 写客户端代码

把上面写的服务器端接口代码拷贝一下。

然后调用

为了避免复杂的搭建环境,我这里直接用servlet来调用。

/**
 * Servlet implementation class HelloServlet
 */
@WebServlet("/hello.html")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
 
/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Hashtable<String, String> jndiProperties = new Hashtable<>();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
try {
Context context = new InitialContext(jndiProperties);
HelloService ejb = (HelloService) context.lookup("ejb:/ejbserver/HelloServiceBean!ejbserver.HelloService");
response.getWriter().append(ejb.say());
} catch (Exception e) {
 
}
response.getWriter().append("Served at: ").append(request.getContextPath());
}
}


最后运行:

 

你可能感兴趣的:(jboss,J2EE)