2 | | .gnowsis and inside that you either have config or data. |
| 2 | .gnowsis and inside that you either have 'config' or 'data'. Each service |
| 3 | has it's own file space where all resources (so called managed resources) reside it needs to run. |
| 4 | |
| 5 | '''How do I populate the service's file space?''' |
| 6 | |
| 7 | Each service can have a 'default' folder in his WEB-INF folder which may contain default |
| 8 | files, e.g. initial service settings. |
| 9 | |
| 10 | The service runtime supports copying resources from the default folder into the |
| 11 | service's file space through the ''ConfigManager'' class. |
| 12 | Extend ''AbstractServiceImplementation'' for your service implementation to have ''getConfigManager()'' available. |
| 13 | |
| 14 | {{{ |
| 15 | final ConfigManager cfgManager = getConfigManager(); |
| 16 | log( "Service default folder:" + cfgManager.getDefaultDir() ); |
| 17 | log( "Service file space for managed resources:" + cfgManager.getManagedResourceDir() ); |
| 18 | }}} |
| 19 | |
| 20 | You can now copy resources from the default folder to your service file space. Resource names |
| 21 | are relative paths in your default folder and have to start with either config/ or data/ |
| 22 | |
| 23 | {{{ |
| 24 | example for a resource 'config/setting.xml' ('data/setting.xml' respectively) of service 'ExampleService': |
| 25 | ExampleService/WEB-INF/default/config/setting.xml |
| 26 | is copied to |
| 27 | .gnowsis/config/ExampleService/setting.xml |
| 28 | |
| 29 | and |
| 30 | ExampleService/WEB-INF/default/data/setting.xml |
| 31 | is copied to |
| 32 | .gnowsis/data/ExampleService/setting.xml |
| 33 | }}} |
| 34 | |
| 35 | The !ConfigManager provides methods to accomplish this copy operation |
| 36 | |
| 37 | {{{ |
| 38 | //copy the resource only if it is not already present in the service file space |
| 39 | cfgManager.copyResourceFromDefaultIfNew( "config/setting.xml" ); |
| 40 | |
| 41 | //even copy whole direcories (and subdirectories) |
| 42 | cfgManager.copyResourceFolderFromDefaultIfNew( "data" ); |
| 43 | |
| 44 | //force a copy |
| 45 | cfgManager.forceCopyOfResource( getDefaultResourceAsFile( "config/setting.xml" ), // ExampleService/WEB-INF/default/config/setting.xml |
| 46 | getManagedResourceAsFile( "config/setting.xml" ) ); //<home>/.gnowsis/config/ExampleService/setting.xml |
5 | | Suggestion, that is not binding: |
6 | | each service has his web-inf folder, where you make a 'default' folder. During |
7 | | your config api init, you get the ServiceContext object, which has a method like |
8 | | "getServicePath" which returns the folder containing the WEB-INF. ie the |
9 | | "epos_context" path is returned. |
10 | | |
11 | | you then call ConfigBlubManager.checkAndCopy(folderA, folderB) to check and copy |
12 | | the defaults. the semantic of checkAndCopy is to copy everything that is to copy |
13 | | everything from A to B that is not in B already. if a file in b already exists, |
14 | | don't overwrite it. |
15 | | |
16 | | {{{ |
17 | | example for such an config dir: |
18 | | blubservice/WEB-INF/default/config/setting.xml |
19 | | is copied to |
20 | | .gnowsis/config/blubservice/setting.xml |
21 | | |
22 | | and |
23 | | blubservice/WEB-INF/default/data/setting.xml |
24 | | is copied to |
25 | | .gnowsis/data/blubservice/setting.xml |
| 49 | //check whether a resource exists |
| 50 | boolean b = cfgManager.resourceDoesExist( "config/setting.xml" ); //<home>/.gnowsis/config/ExampleService/setting.xml |