O WebSphere eXtreme Scale fornece um recurso para declarar Plain Old Java Objects (POJOs) para uso como pontos de extensão no arquivo objectgrid.xml, além de uma maneira de nomear os beans e especificar o nome da classe. Normalmente, as instâncias da classe especificada são criadas, e tais objetos são usados como plug-ins. Agora, o eXtreme Scale pode delegar que Spring obtenha instâncias destes objetos plug-in. Se um aplicativo utiliza o Spring, então, normalmente, tais POJOs possuem um requisito de serem conectados ao resto do aplicativo.
Em alguns cenários, você deve usar o Spring para configurar um plug-in, como no exemplo a seguir:
<objectGrid name="Grid">
<bean id="TransactionCallback" className="com.ibm.websphere.objectgrid.jpa.JPATxCallback">
<property name="persistenceUnitName" type="java.lang.String" value="employeePU" />
</bean>
...
</objectGrid>
A implementação de TransactionCallback integrada, a classe com.ibm.websphere.objectgrid.jpa.JPATxCallback, é configurada como a classe TransactionCallback. Esta classe é configurada com a propriedade persistenceUnitName, conforme mostrado no exemplo anterior. A classe JPATxCallback também tem o atributo JPAPropertyFactory, que é do tipo java.lang.Object. A configuração XML do ObjectGrid não pode suportar este tipo de configuração.
A integração Spring do eXtreme Scale soluciona este problema delegando a criação do bean à estrutura do Spring. A configuração revisada é a seguinte:
<objectGrid name="Grid">
<bean id="TransactionCallback" className="{spring}jpaTxCallback"/>
...
</objectGrid>
O arquivo Spring para o objeto "Grid" contém as seguintes informações:
<bean id="jpaTxCallback" class="com.ibm.websphere.objectgrid.jpa.JPATxCallback" scope="shard">
<property name="persistenceUnitName" value="employeeEMPU"/>
<property name="JPAPropertyFactory" ref ="jpaPropFactory"/>
</bean>
<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.
JPAPropFactoryImpl" scope="shard">
</bean>
Aqui, o TransactionCallback está especificado como {spring}jpaTxCallback, e os beans jpaTxCallback e jpaPropFactory estão configurados no arquivo Spring como mostrado no exemplo anterior. A configuração Spring torna possível a configuração de um bean JPAPropertyFactory como um parâmetro do objeto JPATxCallback.
Bean factory Spring padrão
Quando o eXtreme Scale encontra um plug-in ou um bean de extensão (como um ObjectTransformer, utilitário de carga, TransactionCallback e assim por diante) com um valor className que inicia com o prefixo {spring}, o eXtreme Scale usará o restante do nome como um nome Spring Bean e obterá a instância do bean usando o Spring Bean Factory.
Pelo padrão, se nenhum bean factory tiver sido registrado para um determinado ObjectGrid, então ele tenta localizar um arquivo ObjectGridName_spring.xml. Por exemplo, se sua grade de dados for chamada como "Grid", então o arquivo XML será chamado como /Grid_spring.xml. Este arquivo deve estar no caminho da classe ou em um diretório META-INF que está no caminho da classe. Se este arquivo for encontrado, então o eXtreme Scale construi um ApplicationContext usando tal arquivo e construi beans a partir desse bean factory.
Bean factory Spring customizado
O WebSphere eXtreme Scale também fornece uma API ObjectGridSpringFactory para registrar uma instância do Spring Bean Factory para usar para um ObjectGrid específico nomeado. Esta API registra uma instância de BeanFactory com eXtreme Scale ussando o método estático a seguir:
void registerSpringBeanFactoryAdapter(String objectGridName, Object springBeanFactory)
Desde a versão 2.0, o Spring possui um mecanismo para extensão baseado em esquema para o formato XML do Spring básico para definição e configuração de beans. O ObjectGrid usa este novo recurso para definir e configurar beans ObjectGrid. Com a extensão de esquema XML do Spring, algumas das implementações integradas dos plug-ins do eXtreme Scale e alguns beans do ObjectGrid são predefinidos no espaço de nomes "objectgrid". Ao escrever os arquivos de configuração Spring, não é necessário especificar o nome completo de classe das implementações integradas. Em vez disso, é possível referenciar os beans predefinidos.
Além disso, com os atributos dos beans definidos no esquema XML, é menos provável que você forneça um nome de atributo errado. A validação XML baseada no esquema XML pode capturar estes tipos de erros anteriormente no ciclo de desenvolvimento.
Estes beans definidos nas extensões de esquema XML são:
Estes beans são definidos no esquema XML objectgrid.xsd. Este arquivo XSD é enviado como arquivo com/ibm/ws/objectgrid/spring/namespace/objectgrid.xsd no arquivo ogspring.jar. Para obter descrições detalhadas do arquivo XSD e dos beans definidos no arquivo XSD, consulte o Arquivo XML descritor do Spring.
Use o exemplo JPATxCallback da seção anterior. Na seção anterior, o bean JPATxCallback é configurado como o seguinte:
<bean id="jpaTxCallback" class="com.ibm.websphere.objectgrid.jpa.JPATxCallback" scope="shard">
<property name="persistenceUnitName" value="employeeEMPU"/>
<property name="JPAPropertyFactory" ref ="jpaPropFactory"/>
</bean>
<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.JPAPropFactoryImpl" scope="shard">
</bean>
Usando este recurso de espaço de nomes, a configuração XML do Spring pode ser escrita da seguinte forma:
<objectgrid:JPATxCallback id="jpaTxCallback" persistenceUnitName="employeeEMPU"
jpaPropertyFactory="jpaPropFactory" />
<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.JPAPropFactoryImpl"
scope="shard">
</bean>
Observe que, em vez de especificar a classe com.ibm.websphere.objectgrid.jpa.JPATxCallback como no exemplo anterior, o bean objectgrid:JPATxCallback pré-definido foi usado diretamente. Como pode ser visto, esta configuração é menos detalhada e mais amigável para verificação de erro.
Para obter uma descrição de como trabalhar com beans Spring, consulte o Iniciando um Servidor de Contêiner com o Spring.