2012-10-08 8 views
8

Các cam kết giai đoạn luôn luôn thất bại với lỗi này:Sự cố kết nối khi xuất bản động vào cơ sở dữ liệu môi giới Tridion với tên cá thể (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 

Đây là cấu hình mà làm việc trong cơ sở dữ liệu với các trường hợp mặc định (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> 

Tuy nhiên, phục vụ sản xuất của chúng tôi, bằng cách sử dụng trường hợp được đặt tên là không thể tránh khỏi. Vì vậy, chúng tôi đã thử cấu hình này để chuyển tên của cá thể nhưng không có kết quả; chúng tôi vẫn gặp lỗi.

<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> 

Có gì sai với chuỗi kết nối không? Hoặc là có một cách để vượt qua tên dụ bằng cách sử dụng mẫu đầu tiên; ví dụ: <Property Name="instanceName" Value="THE_INSTANCE_NAME" />?

Trả lời

6

Cả Nikoli và Gertjan reference khiến tôi nhận ra rằng tên cá thể không bắt buộc. Cách khác là chỉ định cổng mà cá thể đang chạy.

Điều này article chỉ cho tôi cách biết cổng nào đang được sử dụng cho ví dụ.

Cấu hình này làm việc:

<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> 

Tôi cũng đã cố gắng tiếp cận chuỗi kết nối và nó làm việc, quá:

<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

Nếu bất kỳ câu trả lời nào dưới đây trả lời câu hỏi của bạn, bạn có thể vui lòng chấp nhận câu trả lời đó để câu trả lời có ích cho các thành viên khác trong cộng đồng không. –

3

Bạn có thể thử như sau:

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

Cảm ơn, Puntero. Tôi cũng đã thử nó nhưng nó không hoạt động. –

2

cú pháp ban đầu của bạn chỉ định URL là đúng, tuy nhiên, sau khi kiểm tra documentation, tôi không thể dường như để tìm một tài sản có giá trị gọi là "miền". Đây có thể là thủ phạm của bạn. Hãy thử chỉ định tên miền trong tên người dùng bằng cách sử dụng '\'.

+0

Bạn nói đúng, không cần có miền trong trường hợp của chúng tôi. Nó là không thể thiếu trong giải pháp. Cảm ơn bạn. –

2

Theo bài báo MSDN này: http://msdn.microsoft.com/en-us/library/ms378428.aspx

bạn nên cấu hình nó như thế này:

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

cũng có vẻ bạn đang thiếu thuộc tính phương ngữ = "MSSQL" trên phần tử Lưu trữ –

1

Bạn nên kết hợp cả tên máy chủ và tên ví dụ.

<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>​ 

Một cách khác, tôi đã thay đổi chút URL cho đại diện cũ này

<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> 

Hãy thử những URL cho Cựu đại diện ở trên: -

  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;

Đối với tài liệu tham khảo của bạn: -

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

'' không hoạt động. Điều này giống như câu trả lời của Puntero. Đối với cách tiếp cận "chuỗi kết nối", # 2 làm việc mà không có tham số 'integratedSecurity'. –