Download + Arquivos + Struts 2 + Hibernate + Blob

Senhores,

Vou desenvolver um sistema que permitirá o download de mp3 para usuários cadastrados e com créditos.
Gostaria de saber algumas respostas antes de começar a programar.

  1. Como armazeno as mp3 no servidor para que ninguém consiga fazer download, só quem for cadastrado e tiver créditos. Ouvi falar de arquivos no banco com blob, se for o caso, como mapear do banco para um byte[] em Hibernate?

  2. Respondida a dúvida acima, como seria o download do arquivo usando struts 2?

  3. Respondida a dúvida acima, como que fica a memória nisso tudo? digamos que mil usuários decida baixar uma mp3 “ao mesmo tempo”, as mp3 de cada usuário vai para a memória antes de soltar para download, será mil mp3 na memória, isso é normal?

  4. Respondida as dúvidas tem essa que é bonus. Como funcionaria o upload de mp3 para o banco de dados (blob), isso envolve mapeamento Hibernate, não sei como mapear e nem como fazer upload.

PS: não pensem que sou preguiçoso e quero tudo na mão, estou fazendo as pesquisas, já vi sobre result stream do struts 2, e já vi algo sobre hibernate campos byte para colunas blob. Mas tudo tá meio “verde” ainda, sem eu compreender direito como funciona.

PS2: Se puderem responder essas perguntas ficaria muito grato!