2012-10-08 22 views
8

la fase de confirmación siempre produce este error:Problema de conexión al publicar dinámicamente en una base de datos de Tridion Broker con un nombre de instancia (JDBC)?

Committing Deployment Failed 
Phase: Deployment Prepare Commit Phase failed, Unable to prepare transaction: tcm:0515104-66560, 
org.hibernate.exception.JDBCConnectionException: Cannot open connection, 
org.hibernate.exception.JDBCConnectionException: Cannot open connection, Unable to prepare transaction: tcm:0-515104-66560, 
org.hibernate.exception.JDBCConnectionException: Cannot open connection, 
org.hibernate.exception.JDBCConnectionException: Cannot open connection 

Ésta es la configuración que funciona en bases de datos con las instancias predeterminadas (DEV/UAT):

<Storage Type="persistence" Id="brokerdb" dialect="MSSQL" Class="com.tridion.storage.persistence.JPADAOFactory"> 
      <Pool Type="jdbc" Size="5" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120" /> 
      <DataSource Class="com.microsoft.sqlserver.jdbc.SQLServerDataSource"> 
       <Property Name="serverName" Value="ourServerName" /> 
       <Property Name="portNumber" Value="1433" /> 
       <Property Name="databaseName" Value="Tridion_Broker" /> 
       <Property Name="user" Value="TridionBrokerUser" /> 
       <Property Name="password" Value="xxxxxxxxpassxx" /> 
      </DataSource> 
     </Storage> 

Sin embargo, para nuestra producción, utilizando una instancia nombrada es inevitable. Así que probamos esta configuración para pasar el nombre de la instancia pero fue en vano; todavía recibimos el error.

<Storage Type="persistence" Class="com.tridion.storage.persistence.JPADAOFactory" 
    Id="brokerdb" 
    Url="jdbc:sqlserver://ourServerName/Tridion_Broker;instanceName=THE_INSTANCE_NAME;domain=DOMAIN_NAME" 
    Username="TridionBrokerUser" 
    Password="xxxxxxxxpassxx" 
    Driver="com.microsoft.sqlserver.jdbc.SQLServerDataSource"> 
    <Pool Type="jdbc" Size="5" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120"/> 
</Storage> 

¿Hay algún problema con la cadena de conexión? ¿O hay una forma de pasar el nombre de instancia utilizando el primer patrón; decir <Property Name="instanceName" Value="THE_INSTANCE_NAME" /> por ejemplo?

Respuesta

6

Tanto Nikoli como Gertjan's reference me hicieron darme cuenta de que el nombre de la instancia no es obligatorio. Una alternativa es especificar el puerto en el que se está ejecutando la instancia.

Este article me mostró cómo saber qué puerto se está utilizando para la instancia.

Esta configuración funcionó:

<Storage Type="persistence" Id="brokerdb" dialect="MSSQL" Class="com.tridion.storage.persistence.JPADAOFactory"> 
     <Pool Type="jdbc" Size="5" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120" /> 
     <DataSource Class="com.microsoft.sqlserver.jdbc.SQLServerDataSource"> 
      <Property Name="serverName" Value="ourServerName" /> 
      <Property Name="portNumber" Value="43333" /> 
      <Property Name="databaseName" Value="Tridion_Broker" /> 
      <Property Name="user" Value="TridionBrokerUser" /> 
      <Property Name="password" Value="xxxxxxxxpassxx" /> 
     </DataSource> 
    </Storage> 

También probé el enfoque de cadena de conexión y funcionó, también:

<Storage Type="persistence" Class="com.tridion.storage.persistence.JPADAOFactory" 
    dialect="MSSQL" 
    Id="brokerdb" 
    Url="jdbc:sqlserver://ourServerName:43333;databaseName=Tridion_Broker;" 
    Username="TridionBrokerUser" Password="xxxxxxxxpassxx" 
    Driver="com.microsoft.sqlserver.jdbc.SQLServerDataSource"> 
    <Pool Type="jdbc2" Size="5" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120"/> 
</Storage> 
+0

Si alguna de las siguientes respuestas responde su pregunta, ¿podría aceptarla como respuesta para que sea útil para otros miembros de la comunidad? –

3

Usted puede intentar lo siguiente:

<Property Name="serverName" Value="ourServerName\ourInstanceName" /> 
+0

Gracias, Puntero. También probé esto pero no funcionó. –

2

Su sintaxis original de especificar la URL es correcta, sin embargo, al comprobar el documentation, no puedo parecer encontrar una propiedad válida llamado "dominio". Este puede ser tu culpable. Intenta especificar el dominio en el nombre de usuario con un '\'.

+0

Tiene razón, el dominio no es necesario en nuestro caso. Es parte integral de la solución. Gracias. –

2

De acuerdo con este artículo de MSDN: http://msdn.microsoft.com/en-us/library/ms378428.aspx

debe configurar de esta manera:

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]] 
+0

también parece que le falta el atributo dialect = "MSSQL" en el elemento de almacenamiento –

1

Usted debe combinar tanto el nombre del servidor y el nombre de la instancia.

<Storage Type="persistence" Id="brokerdb" dialect="MSSQL" Class="com.tridion.storage.persistence.JPADAOFactory"> 
    <Pool Type="jdbc" Size="5" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120" /> 
    <DataSource Class="com.microsoft.sqlserver.jdbc.SQLServerDataSource"> 
     <Property Name="serverName" Value="ourServerName\\THE_INSTANCE_NAME" /> 
     <Property Name="portNumber" Value="1433" /> 
     <Property Name="databaseName" Value="Tridion_Broker" /> 
     <Property Name="user" Value="TridionBrokerUser" /> 
     <Property Name="password" Value="xxxxxxxxpassxx" /> 
    </DataSource> 
</Storage>​ 

Otra forma, me han cambiado poco URL para esta antigua representación

<Storage Type="persistence" Class="com.tridion.storage.persistence.JPADAOFactory" Id="brokerdb" Url="jdbc:sqlserver://ourServerName;instanceName=THE_INSTANCE_NAME;databaseName=Tridion_Broker;integratedSecurity=true;" Username="TridionBrokerUser" Password="xxxxxxxxpassxx" Driver="com.microsoft.sqlserver.jdbc.SQLServerDataSource"> 
    <Pool Type="jdbc" Size="5" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120"/> 
</Storage> 

Pruebe estas URL para la representación Viejo arriba: -

  1. jdbc:sqlserver://ourServerName\\THE_INSTANCE_NAME;databaseName=Tridion_Broker;integratedSecurity=true;

  2. jdbc:sqlserver://ourServerName\THE_INSTANCE_NAME;databaseName=Tridion_Broker;integratedSecurity=true;

  3. jdbc:sqlserver://ourServerName;instanceName=THE_INSTANCE_NAME;databaseName=Tridion_Broker;integratedSecurity=true;​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

  4. jdbc:sqlserver://ourServerName/Tridion_Broker;instanceName=THE_INSTANCE_NAME;domain=DOMAIN_NAME;

para sus referencias: -

  1. Building the Connection URL
  2. Setting the Connection Properties
+0

El '' no funcionó. Esto es lo mismo que la respuesta de Puntero. En cuanto al enfoque de "cadena de conexión", el # 2 trabajó sin el parámetro 'IntegratedSecurity'. –

Cuestiones relacionadas