信息化 频道

动物公司

    Web服务支持

    Spring远程控制功能的另一个方面是它对RPC风格Web服务的支持。WebLogic Server提供基于Ant的工具,用于基于Web服务的WSDL描述生成JAX-RPC存根。Web服务客户端使用这些生成的存根来获取代表服务器端操作的一个远程接口。Spring提供了一个JaxRpcPortProxyFactoryBean来简化了这个过程。我们发现,在WebLogic Server环境中配置JaxRpcPortProxyFactoryBean有些棘手,所以为了节约客户的时间,我们给出下面这个代码片断,演示如何为一个包含复杂类型的Document Literal包装的Web服务配置代理生成。

    大部分属性都是自解释的。其中有一些属性比较有名:

    serviceInterface是Spring的setter注入的副产品。这个类将表示Web服务操作。
    customProperties属性支持定制的WebLogic Server Web服务存根属性。
    jaxRpcService值被设置为WebLogic Server生成的JAX-RPC实现服务。JAX-RPC服务负责验证Web服务和加载复杂的类型映射。为了实现后者,必须把WebLogic Server的JAX-RPC服务实现配置为Spring bean。这确保了JAX-RPC服务构造函数的执行,这也是加载类型映射文件的地方。
    把JaxRpcPortProxyFactoryBean上的lookupServiceOnStartup设置为false,可以关闭启动期间的JAX-RPC服务查找。这样,查找将在首次访问时进行。这对于与WebLogic Server的可靠请求/响应Web服务通信的客户端来说是必需的,而且此处的客户端也必须是一个Web服务。通常在这些情况下,始发客户端是与Web服务客户端一起部署的。因为直到应用程序部署完成才会激活Web服务,所以客户端Web服务对于Spring的上下文加载是不可用的。

<!-- reliable asynchronous Web service for sending new medical records to medrec --><bean id="reliableClientWebServicesPortType" class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean" lazy-init="true"> <property name="wsdlDocumentUrl" value="http://:/ws_phys/PhysicianWebServices?WSDL"/> <property name="portName" value="PhysicianWebServicesPort"/> <property name="jaxRpcService"> <ref bean="generatedReliableService"/> </property> <property name="serviceInterface" value="com.bea.physician.webservices.client.PhysicianWebServicesPortType"/> <property name="username" value="medrec_webservice_user"/> <property name="password" value="weblogic"/> <property name="customProperties"> <props> <prop key="weblogic.wsee.complex">true</prop> </props> </property></bean><!-- allows the jaxRpcService class to execute its constructor which loads in type mappings --><bean id="generatedReliableService" class="com.bea.physician.webservices.client.PhysicianWebServices_Impl"></bean>
    参见WebLogic Server的调用Web服务概览和通过Spring使用远程控制和Web服务,可以获得进一步的信息。

    安全性

    WebLogic Server安全系统支持和扩展了J2EE安全性,同时提供一组丰富的安全提供程序,您可以对它们进行定制,然后使用它们来处理不同的安全性数据库或安全性策略。除了使用标准的J2EE安全性之外,应用程序程序员还可以使用很多专有扩展,这些扩展使应用程序可以与安全系统紧密集成。WebLogic Server带有几个安全提供程序,例如,可以选择包含大部分流行LDAP服务器的身份验证数据库、Active Directory、本地Windows和一个内置的身份验证解决方案。可以使用定制的提供程序对内置的提供程序进行扩充,从而几乎可以与任意身份验证数据库、授权机制和凭证映射服务相集成。因为部署为webapp的Spring应用程序使用的是J2EE安全性,所以无需修改应用程序就可以获得WebLogic Server的安全性优点。

    经验丰富的Spring用户还会熟悉Acegi?D?DSpring自身的安全框架。目前,可以在应用程序中使用Acegi、WebLogic Server安全性,或同时使用二者,因为它们是相互独立的。稍后我们将讲述与此相关的更多信息。

    分布式事务

    Spring为事务管理提供了基础架构。除了对各家数据库供应商提供支持之外,Spring还通过一家J2EE供应商的JTA实现支持分布式事务。通过WebLogicJtaTransactionManager,可以把Spring的JTA管理器配置为与WebLogic Server的JTA实现一起工作。

    WebLogicJtaTransactionManager把责任直接委派给WebLogic Server的Java Transaction API。WebLogic Server的JTA TransactionManager接口可以通过JNDI为客户端和bean提供者所用,而由Spring来管理这种交互。事务管理器还支持事务的作用域;事务可以作用于集群和域内部或二者之间。

    WebLogicJtaTransactionManager最强大的特性是管理分布式事务的能力和用于企业应用程序的两阶段提交协议。通过采用WebLogicJtaTransactionManager,应用程序可以通过WebLogic Administration Console来进行事务监控。WebLogicJtaTransactionManager还支持按数据库(per-database)隔离级别,这种级别支持复杂的事务配置。

<!-- spring's transaction manager delegates to WebLogic Server's transaction manager --><bean id="transactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager"> <property name="transactionManagerName" value="javax.transaction.TransactionManager"/></bean><!-- base transaction proxy for which medrec spring beans inherit--><bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <props> <prop key="activate*"> PROPAGATION_REQUIRED</prop> <prop key="create*"> PROPAGATION_REQUIRED</prop> <prop key="compose*"> PROPAGATION_REQUIRED</prop> <prop key="deny*"> PROPAGATION_REQUIRED</prop> <prop key="getRecord*"> PROPAGATION_REQUIRED,readOnly</prop> <prop key="getPatient*"> PROPAGATION_REQUIRED,readOnly</prop> <prop key="getLog*"> PROPAGATION_NOT_SUPPORTED</prop> <prop key="process*"> PROPAGATION_REQUIRED</prop> <prop key="save*"> PROPAGATION_REQUIRED</prop> <prop key="send*"> PROPAGATION_REQUIRED</prop> </props> </property>< /bean><!-- single point of service for all medrec clients --><bean id="medRecClientServiceFacade" parent="baseTransactionProxy"> <property name="target"> <bean class="com.bea.medrec.service.MedRecClientServiceFacadeImpl"> <property name="adminService"> <ref bean="adminService"/> </property> <property name="patientService"> <ref bean="patientService"/> </property> <property name="recordService"> <ref bean="recordService"/> </property> <property name="recordXmlProcessorService"> <ref bean="recordXmlProcessorService"/> </property> </bean> </property></bean>
    想要了解更多信息,请参见Overview of Transactions in WebLogic Server Applications 和 在Spring中实现事务挂起。

    Java Management Extension

    Java Management Extension(Java管理扩展,JMX)是用于监控和管理Java应用程序的规范。它使一般的管理系统能够监控应用程序,当应用程序需要注意时发出通知,并修改应用程序状态来补救问题。Spring提供广泛的JMX支持,包括通过Spring的MBeanServerConnectionFactoryBean公开WebLogic Server的MBeanServer的能力。MBeanServerConnectionFactoryBean是一个使用方便的工厂,它附带了一个MBeanServerConnection。在应用程序部署期间,连接被建立并缓存,以便稍后由引用bean对其进行操作。

    可以配置MBeanServerConnectionFactoryBean,使其返回WebLogic Server的Runtime MBean Server,它会公开特定WebLogic Server实例的监控、运行时控制和活动配置。这包括对WebLogic Server的Diagnostics Framework的访问。此外,Runtime MBean还为当前服务器提供对运行时MBean和活动配置MBean的访问。]

    还可以配置MBeanServerConnectionFactoryBean,获得一个到WebLogic Server的Domain Runtime MBean Server的连接。Domain Runtime MBean Server提供对域范围内服务的访问,比如应用程序部署、JMS服务器和JDBC数据源。它还是访问域中所有服务器的所有运行时MBean和活动配置MBean层次结构的单点。这个MBean Server还用作访问位于托管服务器上的MBean的单点。

    此外,可以配置MBeanServerConnectionFactoryBean,获得一个到WebLogic Server的Edit MBean Server的连接。Edit MBean Server为管理当前WebLogic Server域配置提供入口点。

  注意,WebLogic Server的Domain Runtime MBean Server在部署期间不是活动的。因此,需要使用延迟初始化来配置bean,它会在调用bean时获取该bean。
下面给出了一个使用WebLogic的MBean Server配置Spring的MBeanServerConnectionFactoryBean的例子:

<!-- expose WebLogic Server's runtime mbeanserver connection --><bean id="runtimeMbeanServerConnection" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean"> <property name="serviceUrl" value="service:jmx:t3://:/jndi/weblogic.management.mbeanservers.runtime"/> <property name="environment"> <props> <prop key="java.naming.security.principle"> </prop> <prop key="java.naming.security.credentials"> </prop> <prop key="jmx.remote.protocol.provider.pkgs"> weblogic.management.remote</prop> </props> </property></bean>
    想要了解更多信息,请参见Understanding WebLogic Server MBeans 和Spring的 JMX支持。 

    结束语

    我们已经花了一些时间来考察Spring、WebLogic Server以及这两种技术的集成。正如我们所说的那样,Spring可以提高开发人员的效率,而WebLogic Server可以提高应用程序的服务质量。这两种技术都是高度非侵入性的,因此用户可以把精力集中在开发应用程序的业务功能之上,而不是纠缠于特定于技术的API的错综复杂性。

0
相关文章