【问题标题】:Deploying Axis2 service groups with generic service names many times多次部署具有通用服务名称的 Axis2 服务组
【发布时间】:2013-04-19 01:01:47
【问题描述】:

我目前有一个 Axis2 Web 服务,其中只有一个未命名的服务,Axis2 使用 .aar 文件或服务目录的名称为该服务生成一个服务名称,这取决于我部署的服务是否自动展开。这样,我可以在 Axis2 的服务目录中的不同服务文​​件夹下部署具有一些不同配置文件的相同服务,而无需配置不同的服务名称或其他。类似于以下内容:

  • [...]axis2\WEB-INF\services\service1\META-INF\service.xml
  • [...]axis2\WEB-INF\services\service2\META-INF\service.xml
  • [...]axis2\WEB-INF\services\service3\META-INF\service.xml

在此示例中,我将部署相同的服务 3 次,但它们的文件夹中只有不同的配置文件,这意味着 service.xml 对于所有服务都是相同的。如果我提供了一个服务名称,这将不起作用,因为服务名称在所有 Axis2 服务中必须是唯一的。

不,我想在上面提供的服务中添加第二个服务,这意味着每个服务都包含一个服务组,其中至少有两个服务。在这种情况下,Axis2 需要服务的名称,我希望它是通用的,并且在所有服务中都相同,因为我不想为每个部署的服务更改 service.xml。我想将我的服务称为“上传”、“下载”等。

Axis2 默认不能部署三个具有相同命名服务的服务,但我可以做的是实现接口 ServiceLifeCycle 并将 startUp 方法中的服务名称更改为唯一的名称,例如通过生成随机 UUID 或其他方式。这样,服务名称就不再是确定性的了,因此我更喜欢在 service.xml 中配置的服务名称前面加上服务部署文件夹的命名方案。类似于以下内容:

  • service1.上传
  • service1.下载
  • service2.上传
  • service2.下载 [...]

看来我是unable to get the deployment folder of the service during it's startUp method call,因此您知道部署由具有通用命名服务的服务组组成的服务的任何其他方法吗?请记住,总体目标是约定优于配置,我只是不想为每个部署的服务更改 service.xml,而只是将服务部署到不同的唯一文件夹中。

谢谢!

【问题讨论】:

    标签: java web-services deployment axis2


    【解决方案1】:

    可以使用 AxisService.getClassLoader().getResource() 访问服务文件夹中的文件并获取服务文件夹的绝对路径。根据访问的文件,您可以通过获取访问文件的父级和一些约定来简单地确定服务的部署文件夹。如果您有部署文件夹,则可以使用它的名称和服务组中配置的服务名称将其设置为生命周期类的 startUp 方法中的新服务名称。由于部署文件夹已经需要在 Axis2 的服务文件夹中是唯一的,因此您对所有服务都具有唯一性,并且可以使用任何您希望使用此命名约定命名部署文件夹的约定,以便 Web 服务客户端访问服务。

    重要的部分只是在生命周期类的startUp方法中更改服务名称,因为服务名称之后只需要唯一,并使用类加载器获取到服务目录的绝对路径。

    Thanks to Kenster for using the class loader.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      相关资源
      最近更新 更多