在Web服务中包装存储过程的最简单方法是什么?

时间:2009-04-08 14:25:50

标签: java eclipse web-services stored-procedures jboss

我们有一个Legacy系统,其中包含许多我们希望作为Web服务向其他应用程序公开的存储过程。我们正在使用JBoss构建Web服务。存储过程可以从Oracle,DB2或MS SQL Server数据库运行。

JDeveloper有一个向导来生成存根并部署到可在Oracle App Server(OC4J)上运行的ear文件。我们正在迁移到JBoss并使用Eclipse作为我们的首选IDE。

我宁愿使用框架,然后自己重​​建和维护基础架构。理想情况下,我想使用开源库或JBoss工具/ IDE根据连接池定义和存储过程名称生成Web服务。

我有什么选择?

5 个答案:

答案 0 :(得分:4)

如果存储过程的编写不打算直接作为Web服务操作公开,那么公开它们可能是一个非常糟糕的主意。如果他们被直接调用,他们可能会做出不符合的假设。

另一种方法是根据需求设计外部API。如果事实证明实现一个特定操作的最佳方法是调用存储过程,那么就这样做。如果事实证明实现所有操作的最佳方法是调用现有的存储过程,那么你是对的,我只是浪费你的时间。

但我认为通过直接调用现有存储过程可能会有一些操作无法实现。

答案 1 :(得分:2)

您可能希望在此上下文中调查EJB的用法。所有J2EE 1.4容器都应该支持JSR 109,这允许将EJB作为Web服务公开。

特别是,您可以将存储过程调用包装在无状态会话EJB中,然后将EJB公开为Web服务。

OC4J 10.1.3JBoss 4支持此部署模式。任何其他符合J2EE 1.4的容器也是如此。您只需要查找如何重新配置​​(而不是重新编码)该容器上的应用程序的支持文档。

答案 2 :(得分:1)

我找到了一个名为Data Services from WS02的开源(Apache许可)框架。有没人试过这个?有任何建议/提示/警告吗?

答案 3 :(得分:1)

不确定你会找到你想要的东西,所以,如果自己写一些东西是不可能的,这里有两个选择:

  1. 使用将接收SP名称,参数并调用该过程的通用Web服务。这对调用者来说不是很友好,也不是类型安全的,但它可以完成工作。

  2. 使用两步法。第一步 - 将存储过程包装在Java类(POJO或EJB)中。第二步 - 使用Apache Axis2将类公开为Web服务,Apache Axis2非常受欢迎,经过测试和测试。

  3. 快速搜索我们this framework用于包装EJB中的SP,但我自己没有测试过它。此外,我认为一些供应商为此目的拥有专有工具。这肯定是一个更简单的问题。

答案 4 :(得分:1)

在JBoss下,公开这些服务的最简单方法是使用EJB3无状态会话bean。使用此模型,您可以访问许多可以提供帮助的附加功能(资源池,事务支持等)。

@WebService
@SOAPBinding(style = Style.RPC)
public interface StoredProcedureWrapper extends Remote {
        String invokeStoredProc();
}

@Stateless
@WebService(endpointInterface = "path.to.StoredProcedureWrapper")
@Remote(StoredProcedureWrapper.class)
public class StoredProcedureWrapperBean {
        public String StoredProcedureWrapper() {
                // do business logic
                return "success";
        }
}