1

I have Preview and Session-enabled Content microservices installed with SDL Web 8.1.1 (CU) and DXA 1.4.

When I go to the site and try to edit a text box I can see the updates; however, if I click on 'update preview' the text box reverts to the pre-updated text. If I click back in the text box I see the updated text again.

I also have a second symptom that I think is related. If I try to create a new page in XPM I am initially sent to DXA 'Page Not Found'. The page is actually created but it looks like the application doesn't find it.

I am fairly confident that this is not an application issue because I have Java and .Net staging applications on the same box and I get the same issue in both.

In my cd_storage for both services I have set the wrapper db to point to my preview db and both define the storage as the Broker (Staging).

I am getting no errors in any of the service logs but the .Net application gives the following log:

2016-06-13 19:24:59 DEBUG [Sdl.Web.Delivery.ADF.AmbientRuntime.OnRequestStart] - CookieClaim value:False 2016-06-13 19:24:59 DEBUG [Sdl.Web.Delivery.ADF.AmbientRuntime.CreateClaimStoreFromTemplate] Putting the default cookie claim value into the ClaimStore(cookieName:taf:response:cookie:generation, cookieValue:False) 2016-06-13 19:24:59 DEBUG [Sdl.Web.Delivery.ADF.ClaimStore.Cookie.CookieHelpers.GetOrCreateIdAndCookieValue] - Generated new trackingId: tridion_62cea4a2-57ad-4648-9eae-56b1a6a3e459 2016-06-13 19:24:59 DEBUG [Sdl.Web.Delivery.ADF.AmbientRuntime.OnRequestStart] Trying to get the cookie claim using cookieClaimName: taf:response:cookie:generation 2016-06-13 19:24:59 DEBUG [Sdl.Web.Delivery.ADF.AmbientRuntime.OnRequestStart] - CookieClaim value:False 2016-06-13 19:25:01 ERROR [Sdl.Web.Delivery.ADF.AmbientRuntime.ExecuteODataAction] - Failed to send claimstore EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object. at Sdl.Web.Delivery.ADF.AmbientRuntime.ExecuteODataAction(HttpApplication application, IDictionary contextItems, Boolean requestStart, Boolean sessionIsNew)

cd_storage

<?xml version="1.0" encoding="UTF-8"?>

        <!--Optional:-->
        <!-- The Features element specifies classes that add additional functionality to the cache. -->
        <Features>
            <Feature Type="DependencyTracker" Class="com.tridion.cache.DependencyTracker"/>
        </Features>
        <!--Optional:-->
        <!--
                The optional RemoteSynchronization element specifies a remote Cache Channel Service.
                The remote Cache Channel Service is used to send messages between caches that are running
                on separate virtual machines. (For example, if the Broker and the Deployer run on separate
                virtual machines.)
                The Cache Channel Service must be running and listening on the configured host and port for
                remote synchronization to function.
                If this element is omitted, the cache does not use any inter-virtual machine cache communication.
                You must use the RemoteSynchronization element in conjunction with the Cache Channel service in
                order for objects to be updated or removed from the Broker's object cache when they are published
                or unpublished using the Deployer.
        -->
        <!-- RMI CacheChannel Connector example

          <RemoteSynchronization Queuesize="128" ServiceMonitorInterval="10000"
              FlushCacheDuringDisconnectInterval="20000">

              <Connector Class="com.tridion.cache.RMICacheChannelConnector" Host="127.0.0.1" Port="1099" />
          </RemoteSynchronization>
          -->

        <!-- JMS CacheChannel Connector example

          <RemoteSynchronization Queuesize="128" ServiceMonitorInterval="10000"
              FlushCacheDuringDisconnectInterval="20000">

              <Connector Class="com.tridion.cache.JMSCacheChannelConnector" Topic="topicName"
                  TopicConnectionFactory="jndiNameOfConnectionFactory"/>
          </RemoteSynchronization>
          -->
    </ObjectCache>
    <!--Optional:-->
    <!-- The optional MetaQueryConstants section allows setting of some advanced properties.
           FindByURLCaseSensitivity overrides the default behaviour of the findByURL methods
           for retrieving BinaryMeta and PageMeta data.
    <MetaQueryConstants>
        <FindByURLCaseSensitivity Value="false"/>
        <CategoryQuerySeparator Value="/"/>
    </MetaQueryConstants>
          -->
    <!--
    Specify RMI listening port
    -->
    <!--
    <RMIChannel ListenerPort="1050"/>
    -->
    <Storages>
        <StorageBindings>
            <Bundle src="preview_dao_bundle.xml"/>
            <!--
                Optional:
                Overriding default SDL Web dao bundles.
            -->
            <!--
                <Bundle src="odata_dao_bundle.xml" />
                <Bundle src="undo_dao_bundle.xml"/>
                <Bundle src="ugc_dao_bundle.xml"/>
                <Bundle src="myDAO.xml"/>
                <Bundle src="mybindings.xml"/>
            -->
        </StorageBindings>
        <!--
            Optional:
            Wrappers enhances the behaviour of DAOs for specific use cases.
        -->

        <Wrappers>

            <!--
            Optional:
            Wrapper definition for StorageLayer wrapping.
            This element has the following attributes:
                Name               The bean wrapper name.
            -->

            <!--
            <Wrapper Name="WrapperName"></Wrapper>
            -->
            <!--
            In order to allow storing of the session data a mechanism should be in place to support storing and 
            retrieving data in a specific user session.
            -->
            <Wrapper Name="SessionWrapper">
                <!--
                Optional:
                Timeout - The session timeout expressed in milliseconds. 

                <Timeout>60000</Timeout>
                -->

                <!--
                 Optional:
                 Machine name - The name of the machine where this instance is run
                 IMPORTANT: should be set only if the client is in-process extension-web
                 <MachineName>MachineName</MachineName>
                -->

                <!--
                Optional: Definition of session storage.
                -->
                <Storage Type="persistence" Id="sessionDb" dialect="MSSQL" Class="com.tridion.storage.persistence.JPADAOFactory">
                    <Pool Type="jdbc" Size="10" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120" />
                    <DataSource Class="com.microsoft.sqlserver.jdbc.SQLServerDataSource">
                        <Property Name="serverName" Value="TRID01" />
                        <Property Name="portNumber" Value="1433" />
                        <Property Name="databaseName" Value="Tridion_Broker_Preview"/>
                        <Property Name="user" Value="TridionBrokerPreviewUser"/>
                        <Property Name="password" Value="SDLWeb8!"/>
                    </DataSource>
                </Storage>

            </Wrapper>
        </Wrappers>

        <!--
            For Database elements of type sql, you can specify the pooling that
            should be used with a Pool element. This pooling is independent of the selected database driver.

            This element has the following attributes:
                Type               The type should be either jdbc or tridion.
                Size               Maximum number of connections to open.
                MonitorInterval    Number of seconds between checks on the pool.
                IdleTimeout        Number of seconds a connection can be idle before it is closed.
                CheckoutTimeout    Number of seconds a connection can be checked out before it is returned to pool.
        -->
        <!--
            Configuration example for MS SQL Server 2012 SP2 & 2014, MS Azure SQL, using the MSSQL JDBC driver.

            The DataSource element specifies the class name of the DataSource to use
                and properties specific to the datasource.
            For the MSSQL JDBC driver the minimum set of properties to set are:
                serverName: name of the server that hosts the database
                portNumber: port number (default 1433) used for TCP/IP connections to the database.
                databaseName: name of the database to access
                userName: username used to access the database
                password: password used to access the database

        -->
        <Storage Type="persistence" Id="defaultdb" dialect="MSSQL" 
            Class="com.tridion.storage.persistence.JPADAOFactory">

            <Pool Type="jdbc" Size="10" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120" />
            <DataSource Class="com.microsoft.sqlserver.jdbc.SQLServerDataSource">
                <Property Name="serverName" Value="TRID01" />
                <Property Name="portNumber" Value="1433" />
                <Property Name="databaseName" Value="Tridion_Broker" />
                <Property Name="user" Value="TridionBrokerUser" />
                <Property Name="password" Value="SDLWeb8!" />
            </DataSource>
        </Storage>


        <!--
            Configuration example for Oracle 11 and Oracle 12.

            The DataSource element specifies the class name of the DataSource to use
                and properties specific to the datasource.

            For the Oracle driver the minimum set of properties to set are:
                driverType: set to value "thin". Indicates the type of driver to use,
                    by using "thin" no oracle client installation is required.
                networkProtocol: "tcp". Indicates TCP/IP will be used for connectivity.
                serverName: name of the server that hosts the database
                portNumber: port number (default 1521) used for TCP/IP connections to the database.
                databaseName: name of the database to access
                userName: username used to access the database
                password: password used to access the database

        <Storage Type="persistence" Id="defaultdb2" dialect="ORACLESQL"
            Class="com.tridion.storage.persistence.JPADAOFactory">

            <Pool Type="jdbc" Size="10" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120" />
            <DataSource Class="oracle.jdbc.pool.OracleDataSource">
                <Property Name="driverType" Value="thin"/>
                <Property Name="networkProtocol" Value="tcp"/>
                <Property Name="serverName" Value="SERVER_NAME"/>
                <Property Name="portNumber" Value="1521"/>
                <Property Name="databaseName" Value="DATABASE_NAME"/>
                <Property Name="user" Value="USER_NAME"/>
                <Property Name="password" Value="PASSWORD"/>
            </DataSource>
        </Storage>
        -->

        <!--
             Configuration example of Storage where some values are parameterized.

             Usage: parameters are specified in form of "${parameter_name}".
             Then the parameters might be specified either as operating system environment variables before running
             service or as arguments to bash/powershell script in form of "-Dparameter_name=parameter_value"

        <Storage Type="persistence" Id="defaultdb" dialect="${dbdialect}"
                 Class="com.tridion.storage.persistence.JPADAOFactory" generateDDL="true">
            <Pool Type="jdbc" Size="5" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120"/>
            <DataSource Class="${dbclass}">
                <Property Name="serverName" Value="${dbhost}"/>
                <Property Name="portNumber" Value="${dbport}"/>
                <Property Name="databaseName" Value="${dbname}"/>
                <Property Name="user" Value="${dbuser}"/>
                <Property Name="password" Value="${dbpassword}"/>
            </DataSource>
        </Storage>
        -->

        <!--
            Configuration example for using a old style compatible JDBC Driver datasources. 

        <Storage Type="persistence" Class="com.tridion.storage.persistence.JPADAOFactory" dialect="MSSQL"
            Id="defaultdb3" Url="JDBC_URL_CONNECTION_STRING" Username="USERNAME" Password="PASSWORD"
            Driver="DRIVER_CLASS">

            <Pool Type="jdbc2" Size="10" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120"/>
        </Storage>
        -->

        <!--
            Configuration example for using JNDI datasource.
            Supported dialects are: MSSQL, ORACLESQL.
         -->
        <!--
        <Storage Type="persistence" Class="com.tridion.storage.persistence.JPADAOFactory" dialect="DIALECT"
            Id="JNDIdb" JNDIName="java:comp/env/jdbc/DATA_SOURCE_NAME"/>
        -->

        <!--
            Configuration example for using filesystem as data storage. 
        -->
        <!--
        <Storage Type="filesystem" Class="com.tridion.storage.filesystem.FSDAOFactory" Id="defaultFile"
                 defaultFilesystem="false">
            <Root Path="c:\temp" />
        </Storage>
        <Storage Type="filesystem" Class="com.tridion.storage.filesystem.FSDAOFactory" Id="defaultDataFile"
                 defaultFilesystem="true" defaultStorage="true">
            <Root Path="c:\temp\data" />
        </Storage>
        -->
    </Storages>

    <!--
        This configures the taxonomy reference count for keywords,
        if CountEnabled is set to False the reference count for keywords will not get updated.
        The default setting is keyword counts are enabled.
    -->
    <!-- <Taxonomies CountEnabled="false"/> -->

    <!--
        Configures transaction storage settings:
             how long before a transaction gets rolled back (default is 120000 ms) and 
             interval to monitor for outstanding transactions (default is 5000ms).
    -->
    <!-- <Transaction Timeout="120000" MonitorInterval="5000"/> -->
</Global>

<ItemTypes defaultStorageId="defaultdb" cached="false">
    <!--
        Query type mapping is replacement for Query generator.
        If query generator was defined in a Broker configuration, Query type mapping should be bind to default DB.
    -->
    <!-- <Item typeMapping="Query" storageId="defaultdb"/> -->

    <!--Optional:-->
    <!-- If no item type mappings are defined within ItemTypes or if storages on a lower level do not exist 
         then the storage defined by defaultStorageId attribute will be used.
         If storage defined by defaultStorageId does not exist then exception will be thrown.
    -->
    <!--
    <Item typeMapping="Binary" itemExtension=".pdf" storageId="defaultFile" cached="true"/>
    <Item typeMapping="Binary" itemExtension=".iso" storageId="defaultFile" cached="false"/>
    <Item typeMapping="ComponentLinkClick" cached="true" storageId="defaultFile"/>
    <Item typeMapping="Metadata" cached="true" storageId="defaultFile"/>
    <Item typeMapping="ComponentVisit" cached="true" storageId="defaultFile"/>
    <Item typeMapping="DynamicLinkInfo" cached="true" storageId="defaultFile"/>
    -->
    <!--
    <Item typeMapping="Page" cached="false" storageId="defaultFile"/>
    -->
    <!--
    <Item typeMapping="Personalization" cached="true" storageId="defaultdb"/>
    <Item typeMapping="Taxonomy" cached="true" storageId="defaultdb"/>
    <Item typeMapping="Timeframe" cached="true" storageId="defaultFile"/>
    <Item typeMapping="TrackedPage" cached="true" storageId="defaultFile"/>
    <Item typeMapping="XSLT" cached="true" storageId="defaultFile"/>
    <Item typeMapping="ExtensionData" cached="true" storageId="defaultdb"/>
    -->
    <!-- UGC -->
    <!--
    <Item typeMapping="Comment" storageId="ugcdb"/>
    <Item typeMapping="Rating" storageId="ugcdb"/>
    <Item typeMapping="UGCUser" storageId="ugcdb"/>
    <Item typeMapping="UGCItemStats" storageId="ugcdb"/>
    -->

    <!--Optional:-->
    <!--
        If the publication is defined and storage defined by defaultStorageId is the existing one,
            that one will be used for that publication unless it is overwritten on a lower level.

        If storage defined by storageId does not exist,
            then default storage defined by ItemTypes element will be used
            unless lower level type mappings are not matched.
    -->
    <!--
    <Publication Id="1" defaultStorageId="defaultFile" cached="false">
    -->
    <!--Optional:-->
    <!--
        If there is a type mapping match and storage is defined for storageId then that storage will be used.
        Otherwise; first storage defined within publication element will be referenced,
            and if that one does not exist then the storage from Item elements will be referenced. 
            and at the end storage defined within ItemTypes will be used.-->
    <!--
    <Item typeMapping="ComponentPresentation" itemExtension=".Jsp" storageId="defaultFile"/>
    <Item typeMapping="ComponentPresentation" itemExtension=".Asp" storageId="defaultFile"/>
    <Item typeMapping="ComponentPresentation" itemExtension=".Xml" storageId="defaultFile"/>
    <Item typeMapping="ComponentPresentation" itemExtension=".Txt" storageId="defaultFile"/>
    <Item typeMapping="Metadata" cached="true" storageId="defaultFile"/>
    <Item typeMapping="Binary" itemExtension=".pdf" storageId="defaultFile" cached="true"/>
    <Item typeMapping="Binary" itemExtension=".iso" storageId="defaultFile" cached="false"/>
    <Item typeMapping="ComponentLinkClick" cached="true" storageId="defaultFile"/>
    <Item typeMapping="ComponentVisit" cached="true" storageId="defaultFile"/>
    <Item typeMapping="DynamicLinkInfo" cached="true" storageId="defaultFile"/>
    <Item typeMapping="Page" cached="true" storageId="defaultFile"/>
    <Item typeMapping="Personalization" cached="true" storageId="defaultdb"/>
    <Item typeMapping="Taxonomy" cached="true" storageId="defaultdb"/>
    <Item typeMapping="Timeframe" cached="true" storageId="defaultFile"/>
    <Item typeMapping="TrackedPage" cached="true" storageId="defaultFile"/>
    <Item typeMapping="XSLT" cached="true" storageId="defaultFile"/>
    <Item typeMapping="ExtensionData" cached="true" storageId="defaultdb"/>
    -->
    <!-- UGC -->
    <!--
    <Item typeMapping="Comment" storageId="ugcdb"/>
    <Item typeMapping="Rating" storageId="ugcdb"/>
    <Item typeMapping="UGCUser" storageId="ugcdb"/>
    <Item typeMapping="UGCItemStats" storageId="ugcdb"/>
    -->
    <!--
    </Publication>
    -->
</ItemTypes>
<!--
OData specific settings.

The default top value that will be used if the client doesn't specify one.
The fixed publication id to use in the friendly URL, this allows only one
publication to be queried through the friendly URL filter.
-->
<!--
<OData>
    <DefaultTop>25</DefaultTop>
    <FixedPublicationId>1</FixedPublicationId>
</OData>
-->
<!--
    Specifies the Discovery Service endpoint.
    When present, it uses defined discovery endpoint as a default source of configuration.

    Attributes:
      ServiceUri                  Discovery Service endpoint uri
      ConnectionTimeout           defines connection timeout (in milliseconds) for Discovery Service endpoint
      ClientId                    client id to obtain valid token
      ClientSecret                client secret to obtain valid token
      TokenServiceUrl             Token service endpoint url for obtaining fresh tokens
    Optional attributes:
      CacheEnabled                flag to enable caching
      CacheExpirationDuration     cache expiration period (in seconds)
      ServiceMonitorPollDuration  polling period (in seconds) for the Discovery Service Monitor
    Optional attributes to set a HTTP proxy host and port for OData client connections:
      ServiceProxyHostName        hostname
      ServiceProxyPort            proxy port
-->
<ConfigRepository ServiceUri="http://localhost:8082/discovery.svc"
                  ConnectionTimeout="10000"
                  CacheEnabled="true"
                  CacheExpirationDuration="600"
                  ServiceMonitorPollDuration="10"
                  ClientId="registration"
                  ClientSecret="encrypted:HzfQh9wYwAKShDxCm4DnnBnysAz9PtbDMFXMbPszSVY="> <!-- ClientSecret="Reg1str@t10nP@ssw0rd" -->
    <Roles>
        <Role Name="PreviewWebServiceCapability" Url="http://localhost:8083/ws/preview.svc"/>
    </Roles>
</ConfigRepository>

<!-- Specifies the location of the license file. -->

    <License Location="D:\SDLWeb_Services\Licences\cd_licenses.xml"/>

  • Can you please add cd_storage config where storage is specified for database? – Hiren Kaku Jun 13 '16 at 20:25
  • Hi Hiren, please see above now. Thank you... – Richard Hamlyn Jun 14 '16 at 2:10
2

Thanks to Hiren I decided to redeploy the CU cd_storage as follows:

Solution cd_storage

<?xml version="1.0" encoding="UTF-8"?>

        <!--Optional:-->
        <!-- The Features element specifies classes that add additional functionality to the cache. -->
        <Features>
            <Feature Type="DependencyTracker" Class="com.tridion.cache.DependencyTracker"/>
        </Features>
        <!--Optional:-->
        <!--
                The optional RemoteSynchronization element specifies a remote Cache Channel Service.
                The remote Cache Channel Service is used to send messages between caches that are running
                on separate virtual machines. (For example, if the Broker and the Deployer run on separate
                virtual machines.)
                The Cache Channel Service must be running and listening on the configured host and port for
                remote synchronization to function.
                If this element is omitted, the cache does not use any inter-virtual machine cache communication.
                You must use the RemoteSynchronization element in conjunction with the Cache Channel service in
                order for objects to be updated or removed from the Broker's object cache when they are published
                or unpublished using the Deployer.
        -->
        <!-- RMI CacheChannel Connector example

          <RemoteSynchronization Queuesize="128" ServiceMonitorInterval="10000"
              FlushCacheDuringDisconnectInterval="20000">

              <Connector Class="com.tridion.cache.RMICacheChannelConnector" Host="127.0.0.1" Port="1099" />
          </RemoteSynchronization>
          -->

        <!-- JMS CacheChannel Connector example

          <RemoteSynchronization Queuesize="128" ServiceMonitorInterval="10000"
              FlushCacheDuringDisconnectInterval="20000">

              <Connector Class="com.tridion.cache.JMSCacheChannelConnector" Topic="topicName"
                  TopicConnectionFactory="jndiNameOfConnectionFactory"/>
          </RemoteSynchronization>
          -->
    </ObjectCache>
    <!--Optional:-->
    <!-- The optional MetaQueryConstants section allows setting of some advanced properties.
           FindByURLCaseSensitivity overrides the default behaviour of the findByURL methods
           for retrieving BinaryMeta and PageMeta data.
    <MetaQueryConstants>
        <FindByURLCaseSensitivity Value="false"/>
        <CategoryQuerySeparator Value="/"/>
    </MetaQueryConstants>
          -->
    <!--
    Specify RMI listening port
    -->
    <!--
    <RMIChannel ListenerPort="1050"/>
    -->
    <Storages>
        <StorageBindings>
            <Bundle src="preview_dao_bundle.xml"/>
            <!--
                Optional:
                Overriding default SDL Web dao bundles.
            -->
            <!--
                <Bundle src="odata_dao_bundle.xml" />
                <Bundle src="undo_dao_bundle.xml"/>
                <Bundle src="ugc_dao_bundle.xml"/>
                <Bundle src="myDAO.xml"/>
                <Bundle src="mybindings.xml"/>
            -->
        </StorageBindings>
        <!--
            Optional:
            Wrappers enhances the behaviour of DAOs for specific use cases.
        -->

        <Wrappers>

            <!--
            Optional:
            Wrapper definition for StorageLayer wrapping.
            This element has the following attributes:
                Name               The bean wrapper name.
            -->

            <!--
            <Wrapper Name="WrapperName"></Wrapper>
            -->
            <!--
            In order to allow storing of the session data a mechanism should be in place to support storing and 
            retrieving data in a specific user session.
            -->
            <Wrapper Name="SessionWrapper">
                <!--
                Optional:
                Timeout - The session timeout expressed in milliseconds. 

                <Timeout>60000</Timeout>
                -->

                <!--
                 Optional:
                 Machine name - The name of the machine where this instance is run
                 IMPORTANT: should be set only if the client is in-process extension-web
                 <MachineName>MachineName</MachineName>
                -->

                <!--
                Optional: Definition of session storage.
                -->
                <Storage Type="persistence" Id="sessionDb" dialect="MSSQL" Class="com.tridion.storage.persistence.JPADAOFactory">
                    <Pool Type="jdbc" Size="10" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120" />
                    <DataSource Class="com.microsoft.sqlserver.jdbc.SQLServerDataSource">
                        <Property Name="serverName" Value="TRID01" />
                        <Property Name="portNumber" Value="1433" />
                        <Property Name="databaseName" Value="Tridion_Broker_Preview"/>
                        <Property Name="user" Value="TridionBrokerPreviewUser"/>
                        <Property Name="password" Value="SDLWeb8!"/>
                    </DataSource>
                </Storage>

            </Wrapper>
        </Wrappers>

        <!--
            For Database elements of type sql, you can specify the pooling that
            should be used with a Pool element. This pooling is independent of the selected database driver.

            This element has the following attributes:
                Type               The type should be either jdbc or tridion.
                Size               Maximum number of connections to open.
                MonitorInterval    Number of seconds between checks on the pool.
                IdleTimeout        Number of seconds a connection can be idle before it is closed.
                CheckoutTimeout    Number of seconds a connection can be checked out before it is returned to pool.
        -->
        <!--
            Configuration example for MS SQL Server 2012 SP2 & 2014, MS Azure SQL, using the MSSQL JDBC driver.

            The DataSource element specifies the class name of the DataSource to use
                and properties specific to the datasource.
            For the MSSQL JDBC driver the minimum set of properties to set are:
                serverName: name of the server that hosts the database
                portNumber: port number (default 1433) used for TCP/IP connections to the database.
                databaseName: name of the database to access
                userName: username used to access the database
                password: password used to access the database

        -->
        <Storage Type="persistence" Id="defaultdb" dialect="MSSQL" 
            Class="com.tridion.storage.persistence.JPADAOFactory">

            <Pool Type="jdbc" Size="10" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120" />
            <DataSource Class="com.microsoft.sqlserver.jdbc.SQLServerDataSource">
                <Property Name="serverName" Value="TRID01" />
                <Property Name="portNumber" Value="1433" />
                <Property Name="databaseName" Value="Tridion_Broker" />
                <Property Name="user" Value="TridionBrokerUser" />
                <Property Name="password" Value="SDLWeb8!" />
            </DataSource>
        </Storage>


        <!--
            Configuration example for Oracle 11 and Oracle 12.

            The DataSource element specifies the class name of the DataSource to use
                and properties specific to the datasource.

            For the Oracle driver the minimum set of properties to set are:
                driverType: set to value "thin". Indicates the type of driver to use,
                    by using "thin" no oracle client installation is required.
                networkProtocol: "tcp". Indicates TCP/IP will be used for connectivity.
                serverName: name of the server that hosts the database
                portNumber: port number (default 1521) used for TCP/IP connections to the database.
                databaseName: name of the database to access
                userName: username used to access the database
                password: password used to access the database

        <Storage Type="persistence" Id="defaultdb2" dialect="ORACLESQL"
            Class="com.tridion.storage.persistence.JPADAOFactory">

            <Pool Type="jdbc" Size="10" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120" />
            <DataSource Class="oracle.jdbc.pool.OracleDataSource">
                <Property Name="driverType" Value="thin"/>
                <Property Name="networkProtocol" Value="tcp"/>
                <Property Name="serverName" Value="SERVER_NAME"/>
                <Property Name="portNumber" Value="1521"/>
                <Property Name="databaseName" Value="DATABASE_NAME"/>
                <Property Name="user" Value="USER_NAME"/>
                <Property Name="password" Value="PASSWORD"/>
            </DataSource>
        </Storage>
        -->

        <!--
             Configuration example of Storage where some values are parameterized.

             Usage: parameters are specified in form of "${parameter_name}".
             Then the parameters might be specified either as operating system environment variables before running
             service or as arguments to bash/powershell script in form of "-Dparameter_name=parameter_value"

        <Storage Type="persistence" Id="defaultdb" dialect="${dbdialect}"
                 Class="com.tridion.storage.persistence.JPADAOFactory" generateDDL="true">
            <Pool Type="jdbc" Size="5" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120"/>
            <DataSource Class="${dbclass}">
                <Property Name="serverName" Value="${dbhost}"/>
                <Property Name="portNumber" Value="${dbport}"/>
                <Property Name="databaseName" Value="${dbname}"/>
                <Property Name="user" Value="${dbuser}"/>
                <Property Name="password" Value="${dbpassword}"/>
            </DataSource>
        </Storage>
        -->

        <!--
            Configuration example for using a old style compatible JDBC Driver datasources. 

        <Storage Type="persistence" Class="com.tridion.storage.persistence.JPADAOFactory" dialect="MSSQL"
            Id="defaultdb3" Url="JDBC_URL_CONNECTION_STRING" Username="USERNAME" Password="PASSWORD"
            Driver="DRIVER_CLASS">

            <Pool Type="jdbc2" Size="10" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120"/>
        </Storage>
        -->

        <!--
            Configuration example for using JNDI datasource.
            Supported dialects are: MSSQL, ORACLESQL.
         -->
        <!--
        <Storage Type="persistence" Class="com.tridion.storage.persistence.JPADAOFactory" dialect="DIALECT"
            Id="JNDIdb" JNDIName="java:comp/env/jdbc/DATA_SOURCE_NAME"/>
        -->

        <!--
            Configuration example for using filesystem as data storage. 
        -->
    <!--
        <Storage Type="filesystem" Class="com.tridion.storage.filesystem.FSDAOFactory" Id="defaultFile"
                 defaultFilesystem="false">
            <Root Path="c:\temp" />
        </Storage>
        <Storage Type="filesystem" Class="com.tridion.storage.filesystem.FSDAOFactory" Id="defaultDataFile"
                 defaultFilesystem="true" defaultStorage="true">
            <Root Path="c:\temp\data" />
        </Storage>
    -->
    </Storages>

    <!--
        This configures the taxonomy reference count for keywords,
        if CountEnabled is set to False the reference count for keywords will not get updated.
        The default setting is keyword counts are enabled.
    -->
    <!-- <Taxonomies CountEnabled="false"/> -->

    <!--
        Configures transaction storage settings:
             how long before a transaction gets rolled back (default is 120000 ms) and 
             interval to monitor for outstanding transactions (default is 5000ms).
    -->
    <!-- <Transaction Timeout="120000" MonitorInterval="5000"/> -->
</Global>

<ItemTypes defaultStorageId="defaultdb" cached="false">
    <!--
        Query type mapping is replacement for Query generator.
        If query generator was defined in a Broker configuration, Query type mapping should be bind to default DB.
    -->
    <!-- <Item typeMapping="Query" storageId="defaultdb"/> -->

    <!--Optional:-->
    <!-- If no item type mappings are defined within ItemTypes or if storages on a lower level do not exist 
         then the storage defined by defaultStorageId attribute will be used.
         If storage defined by defaultStorageId does not exist then exception will be thrown.
    -->
    <!--
    <Item typeMapping="Binary" itemExtension=".pdf" storageId="defaultFile" cached="true"/>
    <Item typeMapping="Binary" itemExtension=".iso" storageId="defaultFile" cached="false"/>
    <Item typeMapping="ComponentLinkClick" cached="true" storageId="defaultFile"/>
    <Item typeMapping="Metadata" cached="true" storageId="defaultFile"/>
    <Item typeMapping="ComponentVisit" cached="true" storageId="defaultFile"/>
    <Item typeMapping="DynamicLinkInfo" cached="true" storageId="defaultFile"/>
    -->
<!--
    <Item typeMapping="Page" cached="false" storageId="defaultFile"/>
-->
    <!--
    <Item typeMapping="Personalization" cached="true" storageId="defaultdb"/>
    <Item typeMapping="Taxonomy" cached="true" storageId="defaultdb"/>
    <Item typeMapping="Timeframe" cached="true" storageId="defaultFile"/>
    <Item typeMapping="TrackedPage" cached="true" storageId="defaultFile"/>
    <Item typeMapping="XSLT" cached="true" storageId="defaultFile"/>
    <Item typeMapping="ExtensionData" cached="true" storageId="defaultdb"/>
    -->
    <!-- UGC -->
    <!--
    <Item typeMapping="Comment" storageId="ugcdb"/>
    <Item typeMapping="Rating" storageId="ugcdb"/>
    <Item typeMapping="UGCUser" storageId="ugcdb"/>
    <Item typeMapping="UGCItemStats" storageId="ugcdb"/>
    -->

    <!--Optional:-->
    <!--
        If the publication is defined and storage defined by defaultStorageId is the existing one,
            that one will be used for that publication unless it is overwritten on a lower level.

        If storage defined by storageId does not exist,
            then default storage defined by ItemTypes element will be used
            unless lower level type mappings are not matched.
    -->
    <!--
    <Publication Id="1" defaultStorageId="defaultFile" cached="false">
    -->
    <!--Optional:-->
    <!--
        If there is a type mapping match and storage is defined for storageId then that storage will be used.
        Otherwise; first storage defined within publication element will be referenced,
            and if that one does not exist then the storage from Item elements will be referenced. 
            and at the end storage defined within ItemTypes will be used.-->
    <!--
    <Item typeMapping="ComponentPresentation" itemExtension=".Jsp" storageId="defaultFile"/>
    <Item typeMapping="ComponentPresentation" itemExtension=".Asp" storageId="defaultFile"/>
    <Item typeMapping="ComponentPresentation" itemExtension=".Xml" storageId="defaultFile"/>
    <Item typeMapping="ComponentPresentation" itemExtension=".Txt" storageId="defaultFile"/>
    <Item typeMapping="Metadata" cached="true" storageId="defaultFile"/>
    <Item typeMapping="Binary" itemExtension=".pdf" storageId="defaultFile" cached="true"/>
    <Item typeMapping="Binary" itemExtension=".iso" storageId="defaultFile" cached="false"/>
    <Item typeMapping="ComponentLinkClick" cached="true" storageId="defaultFile"/>
    <Item typeMapping="ComponentVisit" cached="true" storageId="defaultFile"/>
    <Item typeMapping="DynamicLinkInfo" cached="true" storageId="defaultFile"/>
    <Item typeMapping="Page" cached="true" storageId="defaultFile"/>
    <Item typeMapping="Personalization" cached="true" storageId="defaultdb"/>
    <Item typeMapping="Taxonomy" cached="true" storageId="defaultdb"/>
    <Item typeMapping="Timeframe" cached="true" storageId="defaultFile"/>
    <Item typeMapping="TrackedPage" cached="true" storageId="defaultFile"/>
    <Item typeMapping="XSLT" cached="true" storageId="defaultFile"/>
    <Item typeMapping="ExtensionData" cached="true" storageId="defaultdb"/>
    -->
    <!-- UGC -->
    <!--
    <Item typeMapping="Comment" storageId="ugcdb"/>
    <Item typeMapping="Rating" storageId="ugcdb"/>
    <Item typeMapping="UGCUser" storageId="ugcdb"/>
    <Item typeMapping="UGCItemStats" storageId="ugcdb"/>
    -->
    <!--
    </Publication>
    -->
</ItemTypes>
<!--
OData specific settings.

The default top value that will be used if the client doesn't specify one.
The fixed publication id to use in the friendly URL, this allows only one
publication to be queried through the friendly URL filter.
-->
<!--
<OData>
    <DefaultTop>25</DefaultTop>
    <FixedPublicationId>1</FixedPublicationId>
</OData>
    -->

<!--
    Specifies the Discovery Service endpoint.
    When present, it uses defined discovery endpoint as a default source of configuration.

    Attributes:
      ServiceUri                  Discovery Service endpoint uri
      ConnectionTimeout           defines connection timeout (in milliseconds) for Discovery Service endpoint
      ClientId                    client id to obtain valid token
      ClientSecret                client secret to obtain valid token
      TokenServiceUrl             Token service endpoint url for obtaining fresh tokens
    Optional attributes:
      CacheEnabled                flag to enable caching
      CacheExpirationDuration     cache expiration period (in seconds)
      ServiceMonitorPollDuration  polling period (in seconds) for the Discovery Service Monitor
    Optional attributes to set a HTTP proxy host and port for OData client connections:
      ServiceProxyHostName        hostname
      ServiceProxyPort            proxy port
-->
<ConfigRepository ServiceUri="http://localhost:8082/discovery.svc"
                  ConnectionTimeout="10000"
                  CacheEnabled="true"
                  CacheExpirationDuration="600"
                  ServiceMonitorPollDuration="10"
                  ClientId="registration"
                  ClientSecret="encrypted:HzfQh9wYwAKShDxCm4DnnBnysAz9PtbDMFXMbPszSVY="> <!-- ClientSecret="Reg1str@t10nP@ssw0rd" -->
    <Roles>
        <Role Name="PreviewWebServiceCapability" Url="http://localhost:8083/ws/preview.svc"/>
    </Roles>
</ConfigRepository>

<!-- Specifies the location of the license file. -->

    <License Location="D:\SDLWeb_Services\Licences\cd_licenses.xml"/>

XPM now works perfect and the issues no longer exist. Thank you Hiren...

  • 1
    Can you elaborate on what was wrong with your cd_storage_conf.xml. (it's hard to spot the differences above) and how that misconfiguration occurred (caused by CU 1 upgrade, maybe?) – Rick Pannekoek Jun 14 '16 at 17:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.