z2-Environment: Issueshttps://redmine.z2-environment.net/https://redmine.z2-environment.net/favicon.ico?15813551872015-06-17T16:16:17Zz2-Environment
Redmine z2-Environment - Bug #1903 (Resolved): com.zfabrik.boot.svnaccess computes wrong base-line revisi...https://redmine.z2-environment.net/issues/19032015-06-17T16:16:17ZUdo Offermannudo.offermann@zfabrik.de
<p>Assume <a class="external" href="http://z2-environment.net/svn/z2-environment/trunk">http://z2-environment.net/svn/z2-environment/trunk</a> is on revision 148 and <a class="external" href="http://z2-environment.net/svn/z2-environment/trunk/z2-samples.gateway">http://z2-environment.net/svn/z2-environment/trunk/z2-samples.gateway</a> is on revision 20. <br />Now trunk is branched into <a class="external" href="http://z2-environment.net/svn/z2-environment/branches/v2.3">http://z2-environment.net/svn/z2-environment/branches/v2.3</a> in revision 149.</p>
<p>Now <a class="external" href="http://z2-environment.net/svn/z2-environment/branches/v2.3/z2-samples.gateway">http://z2-environment.net/svn/z2-environment/branches/v2.3/z2-samples.gateway</a> is still on revision 20 but it cannot be looked up with <br /><pre>
> svn list http://z2-environment.net/svn/z2-environment/branches/v2.3/z2-samples.gateway@20
</pre></p>
<p>However this is what <code>com.zfabrik.boot.svnaccess</code> does. It determines the revision of <a class="external" href="http://z2-environment.net/svn/z2-environment/branches/v2.3/z2-samples.gateway">http://z2-environment.net/svn/z2-environment/branches/v2.3/z2-samples.gateway</a> which 20 and<br />performs an svn list for this svn resource in revision 20 which does not exist in this branch, because the branch does not exist in revision 20.</p>
<p>So <code>com.zfabrik.boot.svnaccess</code> must determine the base-line revision in which the branch was created:</p>
<pre>
1 ====================================================================================
PROPFIND /svn/gi-de-tt.main/lakka/branches/v2.3/extensions HTTP/1.1
Depth: 0
<?xml version="1.0" encoding="UTF-8"?>
<propfind xmlns="DAV:">
<prop><version-controlled-configuration xmlns="DAV:"/>
<resourcetype xmlns="DAV:"/>
<baseline-relative-path xmlns="http://subversion.tigris.org/xmlns/dav/"/>
<repository-uuid xmlns="http://subversion.tigris.org/xmlns/dav/"/>
</prop>
</propfind>
=== RESULT ===>
<D:multistatus xmlns:D="DAV:" xmlns:ns1="http://subversion.tigris.org/xmlns/dav/" xmlns:ns0="DAV:">
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://subversion.tigris.org/xmlns/dav/">
<D:href>/svn/gi-de-tt.main/lakka/branches/v2.3/extensions/</D:href>
<D:propstat>
<D:prop>
<lp1:version-controlled-configuration>
<D:href>/svn/gi-de-tt.main/!svn/vcc/default</D:href>
</lp1:version-controlled-configuration>
<lp1:resourcetype>
<D:collection />
</lp1:resourcetype>
<lp2:baseline-relative-path>lakka/branches/v2.3/extensions</lp2:baseline-relative-path>
<lp2:repository-uuid>65b2e40f-0061-4c20-be6b-b6847574fef4</lp2:repository-uuid>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
2 ====================================================================================
PROPFIND /svn/gi-de-tt.main/!svn/vcc/default HTTP/1.1
Depth: 0
<?xml version="1.0" encoding="UTF-8"?>
<propfind xmlns="DAV:">
<prop><checked-in xmlns="DAV:"/>
</prop>
</propfind>
=== RESULT ===>
<D:multistatus xmlns:D="DAV:" xmlns:ns0="DAV:">
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://subversion.tigris.org/xmlns/dav/">
<D:href>/svn/gi-de-tt.main/!svn/vcc/default</D:href>
<D:propstat>
<D:prop>
<lp1:checked-in>
<D:href>/svn/gi-de-tt.main/!svn/bln/1348</D:href>
</lp1:checked-in>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
3 ====================================================================================
PROPFIND /svn/gi-de-tt.main/!svn/bln/1348 HTTP/1.1
Depth: 0
<?xml version="1.0" encoding="UTF-8"?>
<propfind xmlns="DAV:">
<prop><baseline-collection xmlns="DAV:"/>
<version-name xmlns="DAV:"/>
</prop>
</propfind>
=== RESULT ===>
<D:multistatus xmlns:D="DAV:" xmlns:ns0="DAV:">
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://subversion.tigris.org/xmlns/dav/">
<D:href>/svn/gi-de-tt.main/!svn/bln/1348</D:href>
<D:propstat>
<D:prop>
<lp1:baseline-collection>
<D:href>/svn/gi-de-tt.main/!svn/bc/1348/</D:href>
</lp1:baseline-collection>
<lp1:version-name>1348</lp1:version-name>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
</pre> z2-Environment - Bug #1891 (Resolved): SVNCR does not handle node-kind=="unknown" properlyhttps://redmine.z2-environment.net/issues/18912015-03-26T14:56:16ZUdo Offermannudo.offermann@zfabrik.de
<p>SVNCR's deltaScan iterates over all SVN log entries and checks their node-kind (dir, file, ...). <br />Changes are ignored in the case when</p>
<ol>
<li>the changed node is a directory (i.e. a module w/o component from SVNCR's perspective) </li>
<li>SVN reports node-kind == "unknown"</li>
</ol> z2-Environment - Bug #939 (Resolved): NPE in Eclipsoid z2infohttps://redmine.z2-environment.net/issues/9392012-10-16T15:51:47ZUdo Offermannudo.offermann@zfabrik.de
<p>10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: java.lang.NullPointerException<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.components.provider.util.AbstractComponentRepository.findComponents(AbstractComponentRepository.java:327)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.impl.eclipsoid.z2info.RepositoriesRetriever.provideInfoInto(RepositoriesRetriever.java:103)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.impl.eclipsoid.z2info.InfoRetriever.doGet(InfoRetriever.java:60)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:598)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:486)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:486)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.impl.servletjsp.webapp.WebAppContextWrapper.access$6(WebAppContextWrapper.java:1)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.impl.servletjsp.webapp.WebAppContextWrapper$1.run(WebAppContextWrapper.java:70)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.impl.work.ThreadPoolImpl$2.call(ThreadPoolImpl.java:303)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.impl.work.ThreadPoolImpl$2.call(ThreadPoolImpl.java:301)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.work.WorkUnit.work(WorkUnit.java:373)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.impl.work.ThreadPoolImpl.doIt(ThreadPoolImpl.java:257)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.impl.work.ThreadPoolImpl.executeAs(ThreadPoolImpl.java:343)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.impl.work.ThreadPoolImpl.executeAs(ThreadPoolImpl.java:301)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at com.zfabrik.impl.servletjsp.webapp.WebAppContextWrapper.doHandle(WebAppContextWrapper.java:65)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:413)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.Server.handle(Server.java:350)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:454)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:890)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:944)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:630)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:620)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538)<br />10/16 17:50:40 [34]<a class="email" href="mailto:...ent/webWorker@0.1">...ent/webWorker@0.1</a> [800]: at java.lang.Thread.run(Thread.java:680)</p> z2-Environment - Feature #938 (Resolved): Provide official Eclipsoid update-site on z2-environmen...https://redmine.z2-environment.net/issues/9382012-10-12T07:51:34ZUdo Offermannudo.offermann@zfabrik.de
<p>Disable local Eclipsoid update-sites.<br />The Eclispiod web-app will provide updates for the Eclipsoid plug-ins only on the z2-environment instance</p> z2-Environment - Bug #934 (Resolved): Eclipsoid does not recognise z2 home directory correctlyhttps://redmine.z2-environment.net/issues/9342012-10-09T15:14:12ZUdo Offermannudo.offermann@zfabrik.de
<p>com.zfabrik.eclipsoid.z2git.helper.Z2GitHelper.getZ2HomeDir() does not detect z2 home correctly!</p> z2-Environment - Bug #922 (Closed): Eclipsoid component is not started when some other web app failshttps://redmine.z2-environment.net/issues/9222012-09-28T14:14:55ZUdo Offermannudo.offermann@zfabrik.de
<p>Steps to reproduce:</p>
<p>Create new z2 web project using the Eclipsoid wizard and arm it.<br />It will create a new project with an "invalid" webapp.path property inside web/z.properties<br />Leave the invalid webapp.path value and start the server. Starting the new web app will fail because of the invalid context name.<br />However Eclipsoid isn't started as well!</p> z2-Environment - Bug #921 (Resolved): Eclipsoid - Git-plugin: cloning repository fails when targe...https://redmine.z2-environment.net/issues/9212012-09-28T09:43:44ZUdo Offermannudo.offermann@zfabrik.de
<p>Target-Branch needs to be trimmed in <br />com.zfabrik.eclipsoid.z2git.plugin.handlers.CloneRepositoryHandler</p> z2-Environment - Feature #911 (Resolved): consider gitcr.optional only in devlopment modehttps://redmine.z2-environment.net/issues/9112012-09-24T16:16:08ZUdo Offermannudo.offermann@zfabrik.de
<p>check system property com.zfabrik.util.runtime.Foundation.MODE_DEVELOPMENT</p> z2-Environment - Bug #909 (Closed): com.zfabrik.impl.gitcr.GitComponentRepositoryImpl.scan() invo...https://redmine.z2-environment.net/issues/9092012-09-24T14:05:45ZUdo Offermannudo.offermann@zfabrik.de
<p>You can reproduce this when launching z2_core (with ...)</p>
<p>When performing a sync, the scan() method is invoked twice:</p>
<p>y<br />09/24 15:59:10 [19]...entRepositoryImpl [800]: <strong>Pulled deltas from GitCR com.zfabrik.boot.config/baseRepository (origin=http://git.z2-environment.net/z2-base.base, branch=master, OPTIONAL, root=/Users/udoo/dev/z2-core/z2-core/package/gen/dist/run/bin/../../work/repos/95f655a0/git) within 411msec</strong><br />09/24 15:59:17 [19]...hronizationRunner [800]: Found 0 invalidation candidate resources<br />09/24 15:59:17 [19]...hronizationRunner [800]: Invalidated 0 resources<br />09/24 15:59:23 [19]...entRepositoryImpl [800]: <strong>Pulled deltas from GitCR com.zfabrik.boot.config/baseRepository (origin=http://git.z2-environment.net/z2-base.base, branch=master, OPTIONAL, root=/Users/udoo/dev/z2-core/z2-core/package/gen/dist/run/bin/../../work/repos/95f655a0/git) within 56msec</strong></p> z2-Environment - Bug #898 (Resolved): SVNCR treats files as directory nodeshttps://redmine.z2-environment.net/issues/8982012-09-13T09:40:22ZUdo Offermannudo.offermann@zfabrik.de
<p>SVNCR failes when the first level contains files:</p>
<p>09/13 11:38:38 [1]...entRepositoryImpl[ 800]: Using SVN Repository com.zfabrik.impl.svncr.ComponentRepositoryImpl@395fd251,repo:246d0e3e, component:com.zfabrik.boot.config/systemRepository, prio:500, url:svn://z2-environment.net/z2-master/trunk/z2-base.base, username:z2-master<br />09/13 11:38:41 [1]...stemStateResource[ 1000]: Error when trying to call prepare(...) on "com.zfabrik.boot.config/systemRepository" <br />java.lang.RuntimeException: Scan on SVN repo failed: com.zfabrik.boot.config/systemRepository<br /> at com.zfabrik.impl.svncr.ComponentRepositoryImpl.scan(ComponentRepositoryImpl.java:225)<br /> at com.zfabrik.impl.svncr.ComponentRepositoryImpl.scan(ComponentRepositoryImpl.java:94)<br /> at com.zfabrik.components.provider.util.AbstractComponentRepository.checkDB(AbstractComponentRepository.java:516)<br /> at com.zfabrik.components.provider.util.AbstractComponentRepository.start(AbstractComponentRepository.java:191)<br /> at com.zfabrik.impl.svncr.ComponentRepositoryResource._load(ComponentRepositoryResource.java:68)<br /> at com.zfabrik.impl.svncr.ComponentRepositoryResource.prepare(ComponentRepositoryResource.java:62)<br /> at com.zfabrik.impl.components.states.SystemStateResource.attain(SystemStateResource.java:139)<br /> at com.zfabrik.impl.components.states.SystemStateResource.attempting(SystemStateResource.java:79)<br /> at com.zfabrik.impl.components.states.SystemStateResource.attain(SystemStateResource.java:126)<br /> at com.zfabrik.impl.components.states.SystemStateResource.attempting(SystemStateResource.java:79)<br /> at com.zfabrik.impl.components.states.SystemStateResource.attain(SystemStateResource.java:126)<br /> at com.zfabrik.impl.components.states.SystemStateResource$1.run(SystemStateResource.java:46)<br /> at com.zfabrik.impl.launch.ProcessRunnerImpl.start(ProcessRunnerImpl.java:177)<br /> at launchers.HomeLauncher.run(HomeLauncher.java:175)<br /> at launchers.HomeLauncher.main(HomeLauncher.java:106)<br />Caused by: org.tmatesoft.svn.core.SVNException: svn: Can't get entries of non-directory<br /> at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:64)<br /> at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51)<br /> at org.tmatesoft.svn.core.internal.io.svn.SVNReader.handleFailureStatus(SVNReader.java:263)<br /> at org.tmatesoft.svn.core.internal.io.svn.SVNReader.parse(SVNReader.java:242)<br /> at org.tmatesoft.svn.core.internal.io.svn.SVNConnection.read(SVNConnection.java:260)<br /> at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.read(SVNRepositoryImpl.java:1275)<br /> at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.getDir(SVNRepositoryImpl.java:453)<br /> at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.getDir(SVNRepositoryImpl.java:413)<br /> at com.zfabrik.impl.svncr.ComponentRepositoryImpl.readModuleComponents(ComponentRepositoryImpl.java:444)<br /> at com.zfabrik.impl.svncr.ComponentRepositoryImpl.fullScan(ComponentRepositoryImpl.java:396)<br /> at com.zfabrik.impl.svncr.ComponentRepositoryImpl.scan(ComponentRepositoryImpl.java:206)<br /> ... 14 more</p> z2-Environment - Bug #868 (Rejected): Support enlist=JTA in Z2 Data Sourcehttps://redmine.z2-environment.net/issues/8682012-07-23T15:23:09ZUdo Offermannudo.offermann@zfabrik.de
<p>Currently the WorkUnit is the DS enlist container. This way there is always a TX.</p>
<p>Standard behavior would leave TX boundaries to JTA and hence there would be none by default and the use of UserTX or @Transactional defines TX boundaries.</p> z2-Environment - Feature #861 (Closed): Upgrade to Jetty 7https://redmine.z2-environment.net/issues/8612012-07-23T15:23:06ZUdo Offermannudo.offermann@zfabrik.dez2-Environment - Bug #856 (Rejected): z2 jar creation creates corrupted zip in rare caseshttps://redmine.z2-environment.net/issues/8562012-07-23T15:23:03ZUdo Offermannudo.offermann@zfabrik.de
<p>leading to subsequent class loading errors.</p> z2-Environment - Bug #850 (Closed): logger component resets file handlershttps://redmine.z2-environment.net/issues/8502012-07-23T15:23:01ZUdo Offermannudo.offermann@zfabrik.de
<p>which may lead to changing the concurrency order, so that all the sudden, worker nodes write into unexpected log files.</p> z2-Environment - Feature #847 (Closed): Main runner should not require a Resource wrapperhttps://redmine.z2-environment.net/issues/8472012-07-23T15:22:59ZUdo Offermannudo.offermann@zfabrik.de
<p>as its done today.</p>