Hi Eranda,
I'm using a MySql database for this. Attached the files.
AmilaD
On Fri, Jan 4, 2013 at 1:44 PM, Eranda Sooriyabandara <[email protected]>wrote:
> Hi Amila,
> What is the database you used as the remote DB? H2? Also can you please
> copy the masterdata source config to that remote DB as well as the
> govregistry DB configuration in the registry.xml.
>
> thanks
> Eranda
>
>
> On Fri, Jan 4, 2013 at 12:51 PM, Amila De Silva <[email protected]> wrote:
>
>>
>> Hi,
>> As explained in [1] an exception is thrown when accessing the pubisher
>> and store apps.
>> When these are accessed for the first time, an SQL resource is added to
>> the location
>> "/repository/components/org.wso2.carbon.registry/queries/tag-summary" of
>> the config space.
>> Within the publisher app, following code is used to obtain the related
>> registry space;
>>
>> Registry configRegistry =
>> ServiceReferenceHolder.getInstance().getRegistryService().getConfigSystemRegistry();
>>
>> As observed following takes place in the registry side, after calling the
>> configRegistry.put method;
>> 1. Since the inserted resource is marked as an SQL media type, at a
>> pointSQLQueryHandler.putis called.
>> 2.The location of the resource is identified as a non existing one,
>> therefore it gets created level by level.
>> 3.The new location gets created by addEmptyCollection method in
>> Repository class, which is recursively called until an existing
>> parentResourceID is found.
>> 4. Once it reaches an existing parentResourceID (in this case it is
>> /_system/local/repository/), the immediate child collection (components) is
>> created in the underlying database by resourceDAO.add method.
>> 5. This subsequently calls to createAndApplyResourceID in
>> JDBCResourceDAO, which ultimately calls to createResourceID.
>> 6. The problem originates when executing the block;
>>
>> JDBCDatabaseTransaction.ManagedRegistryConnection conn =
>> JDBCDatabaseTransaction.getConnection();
>> JDBCPathCache pathCache = JDBCPathCache.getPathCache();
>> int pathID = pathCache.getPathID(conn, path);
>> if (pathID == -1) {
>> pathID = pathCache.addEntry(path, parentPathID);
>> }
>>
>> "conn" variable points to the database where local space is stored,
>> meaning that the pathID is first fetched from the local_space (which is the
>> expected behaviour).
>>
>> The call to pathCache.addEntry, subsequently invokes
>>
>> dataAccessManager =
>> CurrentSession.getUserRegistry().getRegistryContext().getDataAccessManager();
>>
>> to get a datasource (the new collection 'components' gets actually stored
>> here). But this datasource actually points to the database where config
>> space is mounted.
>> The problem in short is path is retrieved from one location, but it is
>> stored to another.
>>
>> Has this to do anything with the way the registry space is obtained?
>>
>> [1] https://wso2.org/jira/browse/APIMANAGER-869
>>
>>
>> Regards,
>> AmilaD
>>
>>
>> _______________________________________________
>> Dev mailing list
>> [email protected]
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
>
> --
> *Eranda Sooriyabandara
> *Software Engineer;
> Integration Technologies Team;
> WSO2 Inc.; http://wso2.com
>
> *
> *
>
<datasources-configuration xmlns:svns="http://org.wso2.securevault/configuration">
<providers>
<provider>org.wso2.carbon.ndatasource.rdbms.RDBMSDataSourceReader</provider>
</providers>
<datasources>
<!--datasource>
<name>WSO2_CARBON_DB</name>
<description>The datasource used for registry and user manager</description>
<jndiConfig>
<name>jdbc/WSO2CarbonDB</name>
</jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:h2:repository/database/WSO2CARBON_DB;DB_CLOSE_ON_EXIT=FALSE</url>
<username>wso2carbon</username>
<password>wso2carbon</password>
<driverClassName>org.h2.Driver</driverClassName>
<maxActive>50</maxActive>
<maxWait>60000</maxWait>
<testOnBorrow>true</testOnBorrow>
<validationQuery>SELECT 1</validationQuery>
<validationInterval>30000</validationInterval>
</configuration>
</definition>
</datasource-->
<datasource>
<name>WSO2_CARBON_DB</name>
<description>The datasource used for registry and user manager</description>
<jndiConfig>
<name>jdbc/WSO2CarbonDB</name>
</jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:mysql://localhost:3306/local_space</url>
<username>root</username>
<password></password>
<driverClassName>com.mysql.jdbc.Driver</driverClassName>
<defaultAutoCommit>false</defaultAutoCommit>
<maxActive>50</maxActive>
<maxWait>60000</maxWait>
<testOnBorrow>true</testOnBorrow>
<validationQuery>SELECT 1</validationQuery>
<validationInterval>30000</validationInterval>
</configuration>
</definition>
</datasource>
<datasource>
<name>WSO2_MOUNT_DB</name>
<description>The datasource used for registry and user manager</description>
<jndiConfig>
<name>jdbc/GovDB</name>
</jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:mysql://localhost:3306/prod_umdb</url>
<username>root</username>
<password></password>
<driverClassName>com.mysql.jdbc.Driver</driverClassName>
<maxActive>50</maxActive>
<defaultAutoCommit>false</defaultAutoCommit>
<maxWait>60000</maxWait>
<testOnBorrow>true</testOnBorrow>
<validationQuery>SELECT 1</validationQuery>
<validationInterval>30000</validationInterval>
</configuration>
</definition>
</datasource>
<datasource>
<name>WSO2AM_DB</name>
<description>The datasource used for API Manager database</description>
<jndiConfig>
<name>jdbc/WSO2AM_DB</name>
</jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:mysql://localhost:3306/prod_apimgt?autoReconnect=true&relaxAutoCommit=true</url>
<username>root</username>
<password></password>
<driverClassName>com.mysql.jdbc.Driver</driverClassName>
<maxActive>50</maxActive>
<maxWait>60000</maxWait>
<testOnBorrow>true</testOnBorrow>
<validationQuery>SELECT 1</validationQuery>
<validationInterval>30000</validationInterval>
</configuration>
</definition>
</datasource>
<datasource>
<name>WSO2AM_STATS_DB</name>
<description>The datasource used for getting statistics to API Manager</description>
<jndiConfig>
<name>jdbc/WSO2AM_STATS_DB</name>
</jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:h2:<!-- Full path to JDBC database -->;AUTO_SERVER=TRUE</url>
<username>wso2carbon</username>
<password>wso2carbon</password>
<driverClassName>org.h2.Driver</driverClassName>
<maxActive>50</maxActive>
<maxWait>60000</maxWait>
<testOnBorrow>true</testOnBorrow>
<validationQuery>SELECT 1</validationQuery>
<validationInterval>30000</validationInterval>
</configuration>
</definition>
</datasource>
<!-- For an explanation of the properties, see: http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html -->
<!--datasource>
<name>SAMPLE_DATA_SOURCE</name>
<jndiConfig>
<name></name>
<properties>
<property name="java.naming.factory.initial"></property>
<property name="java.naming.provider.url"></property>
</properties>
</jndiConfig>
<definition type="RDBMS">
<configuration>
<defaultAutoCommit></defaultAutoCommit>
<defaultReadOnly></defaultReadOnly>
<defaultTransactionIsolation>NONE|READ_COMMITTED|READ_UNCOMMITTED|REPEATABLE_READ|SERIALIZABLE</defaultTransactionIsolation>
<defaultCatalog></defaultCatalog>
<username></username>
<password svns:secretAlias="WSO2.DB.Password"></password>
<maxActive></maxActive>
<maxIdle></maxIdle>
<initialSize></initialSize>
<maxWait></maxWait>
<dataSourceClassName>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</dataSourceClassName>
<dataSourceProps>
<property name="url">jdbc:mysql://localhost:3306/Test1</property>
<property name="user">root</property>
<property name="password">123</property>
</dataSourceProps>
</configuration>
</definition>
</datasource-->
</datasources>
</datasources-configuration>
<?xml version="1.0" encoding="utf-8"?>
<wso2registry>
<!-- These are used to define the DB configuration and the basic parameters to be used for the registry -->
<currentDBConfig>wso2registry</currentDBConfig>
<readOnly>false</readOnly>
<enableCache>true</enableCache>
<registryRoot>/</registryRoot>
<!-- This defines the default database and its configuration of the registry -->
<dbConfig name="wso2registry">
<dataSource>jdbc/WSO2CarbonDB</dataSource>
</dbConfig>
<dbConfig name="govregistry">
<dataSource>jdbc/GovDB</dataSource>
</dbConfig>
<!-- This defines the JDBC based remote registry instance configuration -->
<remoteInstance url="https://localhost:9443/registry">
<id>gov</id>
<dbConfig>govregistry</dbConfig>
<readOnly>false</readOnly>
<enableCache>true</enableCache>
<registryRoot>/</registryRoot>
</remoteInstance>
<!-- This defines the mount configuration to be used with the remote instance and the target path for the mount -->
<mount path="/_system/governance" overwrite="true">
<instanceId>gov</instanceId>
<targetPath>/_system/governance</targetPath>
</mount>
<mount path="/_system/config" overwrite="true">
<instanceId>gov</instanceId>
<targetPath>/_system/config</targetPath>
</mount>
<!-- This handler provides the feature to add a simlink to a given resource -->
<handler class="org.wso2.carbon.registry.extensions.handlers.ExtensionsSymLinkHandler">
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.URLMatcher">
<property name="pattern">.*</property>
</filter>
</handler>
<!-- This handler provides resource retention locking for the resources -->
<handler class="org.wso2.carbon.registry.extensions.handlers.RetentionHandler"
methods="PUT,DELETE,MOVE,RENAME,IMPORT,COPY,ADD_ASSOCIATION,REMOVE_ASSOCIATION,RESTORE,RESTORE_VERSION">
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.URLMatcher">
<property name="pattern">.*</property>
</filter>
</handler>
<!-- This handler process the uploaded WSDL files -->
<handler class="org.wso2.carbon.registry.extensions.handlers.WSDLMediaTypeHandler">
<!--property name="createService">false</property>
<property name="disableWSDLValidation">true</property-->
<property name="disableSymlinkCreation">true</property>
<property name="schemaLocationConfiguration" type="xml">
<location>/trunk/schemas/</location>
</property>
<property name="wsdlLocationConfiguration" type="xml">
<location>/trunk/wsdls/</location>
</property>
<property name="policyLocationConfiguration" type="xml">
<location>/trunk/policies/</location>
</property>
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.MediaTypeMatcher">
<property name="mediaType">application/wsdl+xml</property>
</filter>
</handler>
<!-- This handler processes .zip & .gar files being added to the registry -->
<handler class="org.wso2.carbon.registry.extensions.handlers.ZipWSDLMediaTypeHandler">
<property name="wsdlMediaType">application/wsdl+xml</property>
<property name="schemaMediaType">application/xsd+xml</property>
<property name="threadPoolSize">50</property>
<property name="disableSymlinkCreation">true</property>
<!--property name="createService">false</property>
<property name="useOriginalSchema">true</property>
<property name="disableWSDLValidation">true</property>
<property name="disableSchemaValidation">true</property>
<property name="wsdlExtension">.wsdl</property>
<property name="schemaExtension">.xsd</property>
<property name="archiveExtension">.gar</property>
<property name="tempFilePrefix">wsdl</property-->
<property name="numberOfRetry">3</property>
<property name="schemaLocationConfiguration" type="xml">
<location>/trunk/schemas/</location>
</property>
<property name="wsdlLocationConfiguration" type="xml">
<location>/trunk/wsdls/</location>
</property>
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.MediaTypeMatcher">
<property name="mediaType">application/vnd.wso2.governance-archive</property>
</filter>
</handler>
<!-- This handler processes the services being added to the registry -->
<handler class="org.wso2.carbon.registry.extensions.handlers.ServiceMediaTypeHandler">
<!--property name="disableWSDLValidation">true</property-->
<property name="defaultServiceVersion">1.0.0-SNAPSHOT</property>
<property name="disableSymlinkCreation">true</property>
<property name="smartLifecycleLinks" type="xml">
<key>dev</key>
<key>qa</key>
<key>live</key>
</property>
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.MediaTypeMatcher">
<property name="mediaType">application/vnd.wso2-service+xml</property>
</filter>
</handler>
<!-- This handler provides the ability to remove the entire heirarchy for a given service while deleting the service -->
<handler class="org.wso2.carbon.registry.extensions.handlers.DeleteHierarchyHandler">
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.MediaTypeMatcher">
<property name="mediaType">application/vnd.wso2-service+xml</property>
</filter>
</handler>
<!--This handler delete the subscription hierarcy generated in the notifications path when a subscription is deleted directly -->
<handler class="org.wso2.carbon.registry.extensions.handlers.DeleteHierarchyHandler">
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.URLMatcher">
<property name="deletePattern">/_system/governance/event/topics/registry/notifications/.*</property>
</filter>
</handler>
<!-- This handler processes the links for the lifecycle -->
<handler class="org.wso2.carbon.registry.extensions.handlers.SmartLifecycleLinkHandler">
<property name="states" type="xml">
<state key="dev">Created</state>
<state key="qa">Tested</state>
<state key="live">Deployed</state>
</property>
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.MediaTypeMatcher">
<property name="mediaType">application/vnd.wso2-smart-link</property>
</filter>
</handler>
<!-- This handler processes the policy files of the given media type defined by the filter -->
<handler class="org.wso2.carbon.registry.extensions.handlers.PolicyMediaTypeHandler">
<property name="policyLocationConfiguration" type="xml">
<location>/trunk/policies/</location>
</property>
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.MediaTypeMatcher">
<property name="mediaType">application/policy+xml</property>
</filter>
</handler>
<!-- This handler processes the schema types which are defined by the filter -->
<handler class="org.wso2.carbon.registry.extensions.handlers.XSDMediaTypeHandler">
<!--property name="disableSchemaValidation">true</property-->
<property name="disableSymlinkCreation">true</property>
<property name="locationConfiguration" type="xml">
<location>/trunk/schemas/</location>
</property>
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.MediaTypeMatcher">
<property name="mediaType">application/x-xsd+xml</property>
</filter>
</handler>
<!-- This handler processes making an external link to a given resource -->
<handler class="org.wso2.carbon.registry.extensions.handlers.ExternalLinkHandler">
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.MediaTypeMatcher">
<property name="mediaType">application/vnd.wso2-hyperlink</property>
</filter>
</handler>
<!-- This handler processes service end-points defined in the WSDL files being uploaded to the registry -->
<handler class="org.wso2.carbon.registry.extensions.handlers.EndpointMediaTypeHandler">
<property name="endpointMediaType">application/vnd.wso2.endpoint</property>
<property name="endpointLocationConfiguration" type="xml">
<location>/trunk/endpoints/</location>
</property>
<filter class="org.wso2.carbon.registry.extensions.filters.EndpointMediaTypeMatcher">
</filter>
</handler>
<handler class="org.wso2.carbon.governance.registry.extensions.handlers.UriMediaTypeHandler">
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.MediaTypeMatcher">
<property name="mediaType">application/vnd.wso2-uri+xml</property>
</filter>
</handler>
<!-- When a resource/governance artifact is deleted, this handler will cleanup all its bounded subscriptions from registry-->
<handler class="org.wso2.carbon.registry.extensions.handlers.DeleteSubscriptionHandler">
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.URLMatcher">
<property name="pattern">.*</property>
</filter>
</handler>
<!--This handler manage the meta data resource caching-->
<handler class="org.wso2.carbon.governance.registry.extensions.handlers.MetaDataCacheHandler">
<filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.URLMatcher">
<property name="pattern">.*</property>
</filter>
</handler>
<!--remoteInstance url="https://localhost:9443/registry">
<id>instanceid</id>
<username>username</username>
<password>password</password>
<cacheId>wso2carbon@jdbc:h2:repository/database/WSO2CARBON_DB</cacheId>
</remoteInstance-->
<!-- This defines the Atom based remote registry instance configuration -->
<!--remoteInstance url="https://localhost:9443/registry">
<id>instanceid</id>
<username>username</username>
<password>password</password>
<type>ws</type>
<cacheId>wso2carbon@jdbc:h2:repository/database/WSO2CARBON_DB</cacheId>
</remoteInstance-->
<!-- This defines the JDBC based remote registry instance configuration -->
<!--remoteInstance url="https://localhost:9443/registry">
<id>instanceid</id>
<dbConfig>wso2registry</dbConfig>
<readOnly>false</readOnly>
<enableCache>true</enableCache>
<registryRoot>/</registryRoot>
</remoteInstance-->
<!-- This defines the mount configuration to be used with the remote instance and the target path for the mount -->
<!--mount path="/_system/config" overwrite="true|false|virtual">
<instanceId>instanceid</instanceId>
<targetPath>/_system/nodes</targetPath>
</mount-->
<!-- This defines index cofiguration which is used in meta data search feature of the registry -->
<indexingConfiguration>
<startingDelayInSeconds>300</startingDelayInSeconds>
<indexingFrequencyInSeconds>60</indexingFrequencyInSeconds>
<!-- location storing the time the indexing took place-->
<lastAccessTimeLocation>/_system/local/repository/components/org.wso2.carbon.registry/indexing/lastaccesstime</lastAccessTimeLocation>
<!-- the indexers that implement the indexer interface for a relevant media type/(s) -->
<indexers>
<indexer class="org.wso2.carbon.registry.indexing.indexer.MSExcelIndexer" mediaTypeRegEx="application/vnd.ms-excel"/>
<indexer class="org.wso2.carbon.registry.indexing.indexer.MSPowerpointIndexer" mediaTypeRegEx="application/vnd.ms-powerpoint"/>
<indexer class="org.wso2.carbon.registry.indexing.indexer.MSWordIndexer" mediaTypeRegEx="application/msword"/>
<indexer class="org.wso2.carbon.registry.indexing.indexer.PDFIndexer" mediaTypeRegEx="application/pdf"/>
<indexer class="org.wso2.carbon.registry.indexing.indexer.XMLIndexer" mediaTypeRegEx="application/xml"/>
<indexer class="org.wso2.carbon.registry.indexing.indexer.XMLIndexer" mediaTypeRegEx="application/(.)+\+xml"/>
<indexer class="org.wso2.carbon.registry.indexing.indexer.PlainTextIndexer" mediaTypeRegEx="text/(.)+"/>
<indexer class="org.wso2.carbon.registry.indexing.indexer.PlainTextIndexer" mediaTypeRegEx="application/x-javascript"/>
</indexers>
<exclusions>
<exclusion pathRegEx="/_system/config/repository/dashboards/gadgets/swfobject1-5/.*[.]html"/>
<exclusion pathRegEx="/_system/local/repository/components/org[.]wso2[.]carbon[.]registry/mount/.*"/>
</exclusions>
</indexingConfiguration>
<!-- This static configuration is suppose to be modified before any data being loaded to the registry (i.e.: before the first startup) -->
<staticConfiguration>
<versioningProperties>true</versioningProperties>
<versioningComments>true</versioningComments>
<versioningTags>true</versioningTags>
<versioningRatings>true</versioningRatings>
<!-- Location you want to add service and default location will be /services/ -->
<servicePath>/trunk/services/</servicePath>
</staticConfiguration>
<!-- This enables auto-versioning of resources (non-collection). Whenever a resource is updated a new version will be created -->
<versionResourcesOnChange>false</versionResourcesOnChange>
<!-- This enables JMX management for G-Reg -->
<jmx enabled="false">
<service name="InvocationStatistics" enabled="true"/>
<service name="Activities" enabled="true"/>
<service name="Properties" enabled="true"/>
<service name="Subscriptions" enabled="true"/>
<service name="Events" enabled="true"/>
</jmx>
<!-- If you need to use a Remote Human Task to provide the Work List functionality instead of the Embedded Human Task or if you want
to use Work List notifications, uncomment the following configuration. Please note that you need to provide the credentials
and URL to connect to the remote instance (ex:- remote BPS server) if you are planning to use a Remote Human Task. You should
provide credentials and URL to connect to the local instance if you simply want to use Work List notifications. -->
<!--workList serverURL="local://services/" remote="false">
<username>admin</username>
<password>admin</password>
</workList-->
<!-- Sample SCM configuration. Please note that checkOutURL, workingDir, and mountPoint are mandatory for each connection.
The update frequency is in minutes. Setting readOnly would disable checkIn even if the checkInURL is set. The credentials
are to connect to the corresponding repository and must be provided if required. -->
<!--scm>
<connection checkOutURL="scm:svn:http://svn.wso2.org/repos/wso2" workingDir="/valid/filesystem/path" mountPoint="/_system/foo" checkInURL="" readOnly="" updateFrequency="">
<username>admin</username>
<password>admin</password>
</connection>
</scm-->
<!-- This defines the list of scheduled tasks for the registry -->
<!--tasks>
<task name="TaskName" class="com.foo.TaskClass">
<trigger cron="cronExpr"/>
<property key="foo" value="FooVal" />
<property key="bar" value="BarVal" />
</task>
</tasks-->
</wso2registry>
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev