Os nomes de partições são extraídos de pedidos HTTP utilizando as expressões de pedidos. Uma expressão de pedido consiste em duas cadeias: a expressão de correspondência e a fórmula de classificação. Juntas, essas cadeias fornecem um mecanismo para classificar pedidos HTTP com base em expressões regulares suportadas por Java. A expressão de correspondência determina como corresponder uma parte da URL e a cadeia de consulta. A fórmula de classificação indica a parte da URL e da cadeia de consulta que especifica a partição quando a expressão for correspondida.
Para determinar se é necessário particionar um pedido HTTP, o ODR (On Demand Router) utiliza o padrão e as classes correspondentes do pacote java.util.regex. Se for encontrada uma correspondência de qualquer expressão de correspondência especificada pelo aplicativo, o pedido possui uma partição associada. O ODR primeiro concatena a URL e a cadeia de consulta para formar uma única cadeia e chama os padrões construídos de todas as expressões de correspondência especificadas pelo aplicativo. Durante uma correspondência, a fórmula de classificação determina como o nome da partição será construído. Um caractere especial, um cifrão, indica a parte da expressão de correspondência a ser utilizada.
Considere um caso em que a expressão de correspondência seja (user=)(*)$ e a fórmula de classificação seja $2. O $2 utiliza a parte da correspondência relacionada à parte (.*), pois é a segunda parte do padrão de correspondência. Por exemplo, se a URL consistir em www.ibm.com/something/user=fred, $1 corresponderá a user=, enquanto $2 corresponderia a fred.
Considere a expressão de correspondência (user=)(*)(rodriguez)$. Suponha que tenha chegado um pedido com uma URL contendo user=adolforodriguez. Com uma fórmula de classificação de $2, o nome da partição resultante seria adolfo. Com uma fórmula de classificação de mypartition$2, o pedido teria um nome de partição de mypartitionadolfo. De forma semelhante, com uma fórmula de classificação de $2$3, o nome da partição resultante seria adolforodriguez.
Observe também que as expressões de correspondência podem se sobrepor. Por exemplo, se você tiver duas expressões de correspondência: (user=)(*)$ e (user=)(*)& e se for recebida uma URL com uma cadeia de consulta contendo user=adolfo&Submit=Enter, as duas expressões corresponderiam. A expressão antiga extrairia adolfo&Submit=Enter com uma fórmula de classificação $2, enquanto a última extrairia adolfo. Como apenas adolfo é um nome de partição válido, ele seria escolhido como o nome da partição. Embora seja típico que a expressão comum "mais específica" seja o destino pretendido, o particionamento HTTP faz uma tentativa para beneficiar uma expressão específica sobre a outra. Em vez disso, todas as expressões são aplicadas até que seja localizado um nome de partição válido ou não exista nenhum.
Related concepts
Particionamento de HTTP