2015-05-08 5 views
4

Мое приложение размещено на центральном сервере, обслуживающем множество клиентов. Теперь ему необходимо перекрестно ссылаться на серверы баз данных, которые находятся на месте в месте нахождения клиента.Могу ли я указать динамический источник данных во время выполнения?

Я хочу сохранить информацию о сервере клиента вместе с данными своей учетной записи (например, имя dbname, хост, порт и т. Д.).

Однако, в зависимости от того, кто зарегистрировался в приложении, мне нужно предоставить данные о соединении данных в функцию <cfquery> для выполнения поиска. Что-то вроде этого:

<cfquery name="rsOrders" datasource="{dynamically provided connection string}"> 
SELECT * 
FROM 
CompanysDBTable 
</cfquery> 

Я понимаю, что есть API Администратор, который создает источник данных программно, однако использование это будет означать дополнительный процесс в моей системе, и что произойдет, если детали исходные данные были обновлены по желанию клиента?

Так есть ли способ сделать это на лету, как указано выше? То есть, подавая строку подключения данных в тег <cfquery>.

Или есть лучший способ сделать это в целом?

ответ

6

Вы можете создавать источники данных конкретных приложений во время выполнения в ColdFusion 11. См. Документы: «Application-specific datasources in Application.cfc». Я также обсуждаю это в своем блоге: «Defining datasources in Application.cfc».

Примером может быть:

// Application.cfc 
component { 

    this.name = "DSNTest02"; 
    this.datasources = { 
     scratch_mssql_app = { 
      database = "scratch", 
      host  = "localhost", 
      port  = "1433", 
      driver  = "MSSQLServer", 
      username = "scratch", 
      password = "scratch" 
     }, 
     scratch_embedded_app = { 
      database = "C:\apps\adobe\ColdFusion\11\full\cfusion\db\scratch", 
      driver  = "Apache Derby Embedded" 
     } 
    }; 
    this.datasource = "scratch_mssql_app"; 

} 

Это ближайший вы можете получить с ColdFusion.

Если вы хотите использовать JDBC напрямую, вы можете просто указать строку соединения при создании соединения, но тогда ваш код должен будет соответствовать наборам записей, возвращаемым драйвером JDBC, которые не будут объектами запроса CFML.

+0

Могу ли я обновить существующие источники данных, а также создать новые источники данных с помощью API администрирования? Если клиент должен был изменить данные своего сервера, мне нужно будет обновить соответствующий источник данных в CF, а не создавать новый каждый раз. –

+0

Почему бы вам просто не попробовать себя, а не попросить других людей сделать вашу работу за вас? –

+0

Я просто спрашиваю, возможно ли это, а не для того, чтобы вы делали работу. Кажется, что это возможно, поэтому, вероятно, это лучший способ сделать это. Спасибо Адаму –

4

Когда вы получаете учетные данные подключения, настройте подходящий источник данных в ColdFusion. Поместите имя этого источника данных в базу данных, в которой указаны другие данные учетной записи. Для клиентов, которые не отправили вам учетные данные, используйте источник данных по умолчанию.

Когда вы запускаете приложение, получите источник данных вместе с другой информацией о клиенте и используйте его в своих тэгах cfquery.

+0

Я думал по тем же линиям. Я просто задавался вопросом об обработке обновлений для источника данных, например. если изменяется клиентский сервер. Могу ли я обновлять существующие источники данных, а также создавать новые источники данных с помощью API администрирования? –

+0

Вы обрабатываете его так же, как и с любым другим обновлением данных. Что вы можете сделать в API администратора, войдите и убедитесь сами. –

+0

Я думал, что он может создавать только DSN, но похоже, что до тех пор, пока я укажу одно и то же имя, оно должно сделать обновление. Выглядит неплохо. –