如何在 WildFly 中配置 EJB WebServices(入耳式)

Posted

技术标签:

【中文标题】如何在 WildFly 中配置 EJB WebServices(入耳式)【英文标题】:How to configure EJB WebServices in WildFly (in ear) 【发布时间】:2017-02-04 17:42:51 【问题描述】:

我有一个 EAR 项目,部署在 WildFly 10.1.0.Final 上 这个 EAR 由一些罐子和战争组成。我的 jar 文件中有一个 WebService。

我不清楚如何配置我的项目。 我在谷歌和调试器上花了很多时间......所以我需要帮助)

我的 AIM:在耳朵/服务器级别的 JAR 中为我的 EJB WebService 设置默认 AuthType/Security-domain。

对于安全域,我在以下位置找到了配置:

Standalone.xml -> 子系统 xmlns="urn:jboss:domain:ejb3:4.0(服务器级别,高优先级) 标签:子系统 xmlns="urn:jboss:domain:ejb3:4.0 范围:所有 EJB

Standalone.xml -> 子系统 xmlns="urn:jboss:domain:undertow:3.0"(服务器级别,仅适用于 Undertow,高优先级) 属性:default-security-domain(服务器级别,中等优先级) 范围:所有网络服务

在 EAR META-INF 中的 jboss-app.xml(中优先级!)中 示例:https://developer.jboss.org/thread/177666 范围:所有 EJB

EAR 子 jar 项目中的 XML 文件 jboss-ejb3.xml(低优先级) http://wildscribe.github.io/Wildfly/8.1.0.Final/subsystem/ejb3/index.html 范围:所有 EJB

WebService 类上的安全域注释: 注释:org.jboss.security.SecurityDomain 范围:单一WebService

另外,我怎么能理解 - ejb bean webservices 的 ejb 属性比 webservices 属性更优先

但是如何设置默认的身份验证方法 BASIC?类上没有注释。我找不到( WEB-INF/web.xml 和 jboss-web.xml 不会影响我的 web 服务。

【问题讨论】:

尝试使用jboss-webservices.xml 描述符。见docs.jboss.org/author/display/JBWS/… 哪里是一个减号,我们从 web 服务模式中获得: 我不能在这个地方使用通配符。定义所有 ejb webservices 对我们来说是非常多余的。但是感谢这个例子,因为有人可以尝试这个解决方案。我正在等待其他建议。 【参考方案1】:

正在使用 maven 吗?

在此存储库https://github.com/wildfly/quickstart 中,您可以找到许多在 Wildfly 中部署的项目示例。特别是对于使用 ejb 的 Web 服务,此示例很有用 https://github.com/wildfly/quickstart/tree/10.x/jaxws-ejb。请注意,在这个项目中需要在 jboss-web.xml 上指明上下文根:

<jboss-web>
    <context-root>/yourpath</context-root>
</jboss-web>

Web 服务的配置是通过注解进行的。

/**
* @author rsearls@redhat@com
*/
@Stateless
@Remote(EJB3RemoteInterface.class)
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class EJB3Bean01 implements EJB3RemoteInterface 
    @WebMethod
    public String echo(String input) 
        return "EJB3Bean01 returning: " + input;
    

【讨论】:

【参考方案2】:

来自 web.xml 的属性仅适用于战争部署。 我发现只有一种方法可以使用 web 服务配置 ejb jar 部署(所有端点和部署在一个地方)。

众所周知,WildFly 使用 Undertow。 我们可以定义Servlet Extension:http://undertow.io/undertow-docs/undertow-docs-1.2.0/#servlet-extensions

添加 src/main/resources/META-INF/services/io.undertow.servlet.ServletExtension。 然后,在这个文件中添加我们的 UndertowDeploymentExtension(实现 ServletExtension)。

然后,在 handleDeployment 方法中添加如下内容: deploymentInfo.setLoginConfig(new LoginConfig(javax.servlet.http.HttpServletRequest.BASIC_AUTH, REALM_NAME));

现在,我们没有 LoginConfig 的 jar 部署将使用我们自定义的 LoginConfig 进行初始化(我们可以省略 @WebContext)。 有关更多信息,您可以在 WebMetaDataCreator.createLoginConfig (wildfly-webservices-server-integration-10.1.0.Final.jar)

进行调试

快速预览:https://github.com/wildfly/wildfly/blob/master/webservices/server-integration/src/main/java/org/jboss/as/webservices/tomcat/WebMetaDataCreator.java#L276

此外,您可以从以下地址阅读此建议:http://lists.jboss.org/pipermail/undertow-dev/2016-December/001801.html

【讨论】:

以上是关于如何在 WildFly 中配置 EJB WebServices(入耳式)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JPA/EJB3 和 WildFly 读取未提交的数据?

在 Wildfly 10 上运行 EJB 2.1

EJB 未使用 @EJB 在 Wildfly 9.0.0 中初始化

wildfly / jboss-eap:如何命名 JMS 资源以匹配 EJB2 ejb-jar.xml

Wildfly 远程 EJB 调用

WildFly JNDI 查找部署在 WAR 中的本地 EJB