2014-11-21 4 views
1

Я использую glassfish 4 и java EE 7. Мне нужно будет определить пул соединений, который будет отличаться для каждого приложения, которое я буду использовать в стеклянной платке.Как определить другой пул соединений с помощью развернутого приложения в стеклянной платке

У меня есть одно приложение (.war файл) на каждого клиента, и каждый клиент имеет свой собственный пользователь/пароль/схему в моей mysql db, поэтому данные не распределяются между клиентами. Я знаю, как определить пул соединений в стеклянной платке, но тогда все мои приложения могут использовать только те же настройки (я использую bonecp btw). Я хотел бы иметь возможность изменять пользователь/пароль/схему для каждого развертываемого приложения. Можно ли полностью определить пул соединений в файле persistence.xml, а не в стеклянной платке, так что у меня может быть другой в моих разных файлах .war? При использовании 10 .war-файлов (10 клиентов), я хотел бы иметь 10 разных пулов соединений (разные параметры пользователя/пароля/схемы).

ответ

0

Если вы создаете источник данных программным путем, вы можете ввести его в JPA без необходимости объявлять его в своем файле persistence.xml. Вот пример

Определение персистенции-XML:

<persistence-unit name="foo-PU" transaction-type="RESOURCE_LOCAL"> 
    <!-- the provider: Hibernate, EclipseLink or another --> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 

    <!-- No need to define any connection parameter nor the data source --> 

    <!-- class definitions here --> 
</persistence-unit> 

Определение файла .properties для хранения конфигурации для источника данных:

db.driver=com.mysql.jdbc.Driver 
db.url=jdbc:mysql://localhost:3306/foo_db 
db.user=user 
db.password=s3cr3t 
db.bonecp.idleConnectionTestPeriod=60 
db.bonecp.idleMaxAge=240 
db.bonecp.maxConnections=10 
# more properties... 

Определение класса, который будет генерировать источник данных

public class DataSourceGenerator { 
    public static DataSource getDataSource(String properties) { 
     Properties conf = new Properties(); 
     try { 
      conf.load(
       DataSourceFactory.class 
       .getClassLoader().getResourceAsStream(
        properties)); 
     } catch (IOException e) { 
      //handle the error 
      //naive handling shown here 
      e.printStacktrace(); 
     } 
     BoneCPDataSource dataSource = new BoneCPDataSource(); 
     //set the properties from the .properties file 
     dataSource.setDriverClass(conf.getProperty("db.driver")); 
     dataSource.setJdbcUrl(conf.getProperty("db.url")); 
     dataSource.setUsername(conf.getProperty("db.user")); 
     dataSource.setPassword(conf.getProperty("db.password")); 
     dataSource.setIdleConnectionTestPeriodInMinutes(
      Long.parseLong(
       conf.getProperty("db.bonecp.idleConnectionTestPeriod"))); 
     dataSource.setIdleMaxAgeInSeconds(
      Long.parseLong(
       conf.getProperty("db.bonecp.idleMaxAge"))); 
     dataSource.setMaxConnectionsPerPartition(
      Integer.parseInt(
       conf.getProperty("db.bonecp.maxConnections"))); 
     //more properties to load... 
     return dataSource; 
    } 
} 

Создайте ваш EntityManagerFactory программно а также:

public class EntityManagerFactoryGenerator { 
    public static EntityManagerFactory createEMF() { 
     Map<String, Object> properties = new HashMap<>(); 
     String dataSourceKey = ""; 
     //uncomment here depending on your needs... 
     //using Hibernate 
     //dataSourceKey = org.hibernate.cfg.AvailableSettings.DATASOURCE; 
     //using EclipseLink 
     //dataSourceKey = org.eclipse.persistence 
     // .config.PersistenceUnitProperties.NON_JTA_DATASOURCE; 
     properties.put(
      dataSourceKey, 
      DataSourceGenerator.getDataSource("mysql-con.properties")); 
     return Persistence.createEntityManagerFactory("foo-PU", properties); 
    } 
} 
0

Шаг 1. Перейдите в консоль администратора Glassfish, чтобы настроить детали соединения JDBC.

Внутри ресурсов - JDBC создает один пул для каждого набора сведений о соединении, а затем создает источник данных JDBC для каждого созданного пула.

Шаг 2. Перейдите в файл персистентности каждого приложения и укажите нужный источник данных.

Не указывайте провайдера, если вам ничего не нужно, поскольку Glassfish уже поставляется с EclipseLink, который отлично работает.

Смежные вопросы