원격 EJB 사용

4768 단어 jbossJ2EE
urn:jboss:domain:remoting
Socket 포트 구성
ejb-security-realm
EJB를 원격으로 호출하려면 다음 단계를 수행합니다.
첫 번째 쓰기 서버 사이드 서비스
2단계 사용자 구성
3단계 포트 구성
4단계 EJB 구성
5단계 클라이언트 구성
6단계 쓰기 클라이언트
첫 번째 쓰기 서버 사이드 코드
원격 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!";
}
 
}

그러면 간단한 서버 사이드 코드가 완성됩니다.
2단계, 사용자 구성
사용자를 설정하는 것은 필수적입니다. 안전을 위해서입니다. 만약에 원격 EJB가 인터넷에 놓여 있으면 누구나 접근할 수 있습니다. 그러면 상업 데이터는 임의로 수정되고 접근할 수 있기 때문에 발생할 손실은 예측할 수 없습니다!
먼저 JBOSS Wildfly의add-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>

3단계 포트 구성
<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>

4단계 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>

5단계 클라이언트 구성
classpath의 루트 디렉터리에 이 파일을 쓰십시오
/jboss-ejb-client.properties
실제 응용 프로그램에서 이 파일을 생성된 jb-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

6단계 클라이언트 코드 쓰기
위에 쓴 서버 인터페이스 코드를 복사해 보세요.
그리고 호출
복잡한 구축 환경을 피하기 위해서, 나는 여기에서 직접 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());
}
}

마지막 실행:

좋은 웹페이지 즐겨찾기