Um Servidor JMS necessita de um armazenamento persistente para que as mensagens fiquem armazenadas e, posteriormente, lidas. Com o servidor (JVM) é um processo sendo executado, está sujeito a falhas, seja de si próprio ou na máquina onde está sendo executado. Por este motivo é necessário armazenar as mensagens num recipiente que continue existindo mesmo após a falha do servidor, em certos casos, até mesmo da máquina onde roda. Desta forma, após a falha, quando o servidor se tornar disponível novamente, as mensagens possam ser recuperadas.
Na maioria dos sistemas as mensagens ficam armazenadas apenas por uma fração de segundo, que é o tempo em que foi enviada por um produtor/publicador e, na sequencia lida por um consumidor/assinante.Mesmo este tempo sendo mínimo, na maioria dos casos, existe a possibilidade do sistema falhar e cair. Para que não haja perda de informação, elas são armazenadas nos armazenamentos persistentes.
Com visto anteriormente, eles podem ser de dois tipos:
Na maioria dos casos a criação de uma “Área de Armazenamento de Arquivos” é mais rápida que “Armazenamento JDBC”, pois a gravação em um disco local é muito mais rápida do que em um banco de dados, que, geralmente, é acessado via rede.
Se a volume de mensagens for muito grande, muitas mensagens por segundo. Neste caso é recomendado gravar em disco, por ser muito rápido. Por exemplo: SMS (torpedo) enviados pelo celular são processados e roteados para o destino através de um Servidor JMS. Neste caso são muitos arquivos por segundo, pequenos e necessitam de velocidade.
Quando uma mensagem não pode ser perdida de forma alguma, ou seja, necessita mais de disponibilidade do que velocidade; é recomendado utilizar a gravação em banco de dados. Os bancos de dados geralmente têm redundância e armazenam todas as informações importantes de uma empresa, raramente falham ou perdem dados. Por exemplo: transações bancárias que são trafegadas através de um Servidor JMS.