Contextos do JSF

Olá pessoal,

Preciso fazer 3 aplicações diferentes, uma em cada contexto ou pelo menos em diretórios diferentes (dominio.com.br/aplicacao1, dominio.com.br/aplicacao2, dominio.com.br/aplicacao3)

Mas um grande detalhe, é que essas aplicações acessam algumas tabelas em comum (estamos usando JPA, então acessam as mesmas classes de entidade)
não queria criar 3 projetos JSF, porque se não teria que replicar essas classes.

Qual a melhor solução?

Criar um 1 projeto JSF (com um único contexo e 3 diretórios dentro desse contexto) ?

Por ex:
Contexto/aplicacao1
Contexto/aplicacao2
Contexto/aplicacao3

Estou meio perdido quanto a isso!

Obrigado

Cria uma lib commons. Depois vc adiciona esta lib nos projetos e voala! Todo mundo tem acesso a tudo!

Att. 8)

Legal a idéia da lib.

Agora, em se tratando de banco de dados?

Tenho algumas tabelas que serão acessadas por todas aplicações (que são as mapeadas nessas entidades que se tornarão uma Lib commons)
Mas também tenho tabelas específicas de cada aplicação.

Por exemplo:

Cidades => Todas aplicações acessam
Estados => Todas aplicações acessam
Paises => Todas aplicações acessam
Clientes_Aplicacao1 = Somente aplicação 1 acessa
Clientes_Aplicacao2 = Somente aplicação 2 acessa
Clientes_Aplicacao3 = Somente aplicação 3 acessa

Queria separar por base de dados, tipo, BaseGenerica, Base_Aplicacao1, Base_Aplicacao2, Base_Aplicacao3

mas como ficaria isso no persistence.xml?
Crio 3 unidades de persistência, sendo que sempre trabalharei com duas?
A genérica e a específica?

E se quisesse fazer alguma relação entre elas (já que Foreign Key entre bases não é permitido)
Por exemplo, colocar um idCidade na tabela Clientes_Aplicacao1.

Estou confuso nessa organização inicial.

Trabalhe com schemas, e use apenas uma base de dados. O que for comun entre aplicações, bote em um squema padrao, e o que for distinto em squemas distintos.

esse Schema é do JPA?

não entendi,
Pq se tratando de MySQL, schema é um sinônimo para a base da dados.

bem, não sei se é isso que vc quis dizer, mas fiz da seguinte forma:

Bancos diferentes, sendo 1 genérico e 2 específicos.
Minha unidade de persistência no persistence.xml aponta para o banco genérico.
Todas as entidades genéricas não estão com o atributo @Table(schema=)

Porém, as entidades específicas, estão cada um com sua anotação e seu schema.
ex:

@Entity
class EntidadeGenerica {
  // ...
}

@Entity
@Table(schema="banco1")
class EntidadeEspecifica1 {
   @Id
   private int id;
   @OneToOne
   @JoinColumn(name="idEntidadeGenerica")
   private EntidadeGenerica entidadeGenerica;
}

@Entity
@Table(schema="banco2")
class EntidadeEspecifica2 {
   @Id
   private int id;
   @OneToOne
   @JoinColumn(name="idEntidadeGenerica")
   private EntidadeGenerica entidadeGenerica;
}

pelo meus testes iniciais, funcionou certinho.
o JPA fez os relacionamentos, mesmo que no próprio MySQL esses relacionamentos não existam (por estarem em bancos diferentes)

Alguem sabe se esta forma está correta?