Hi list,
I have a Cocoon app that has an authenticated database admin area that uses aggregation to build the site. The DB in question is just the standard HSQLDB that comes with Cocoon, all seems to be well, I can query the DB fine but I can't insert, delete or update. I'm pretty sure that my database descriptor file is fine and that although my sitemap still needs tuning and perhaps some further rationalisation, is also ok.
Here are some of the relevant parts of my sitemap:
...
<map:actions>
<!-- declare actions for database operations -->
<map:action name="mod-db-add" src="org.apache.cocoon.acting.modular.DatabaseAddAction">
<descriptor>database.xml</descriptor>
<throw-exception>false</throw-exception>
</map:action>
<map:action name="mod-db-del" src="org.apache.cocoon.acting.modular.DatabaseDeleteAction">
<descriptor>database.xml</descriptor>
<throw-exception>false</throw-exception>
</map:action>
<map:action name="mod-db-upd" src="org.apache.cocoon.acting.modular.DatabaseUpdateAction">
<descriptor>database.xml</descriptor>
<throw-exception>false</throw-exception>
</map:action>
<!-- a real world application would use the form validation here -->
<!-- this action just checks for existence of request parameters -->
<map:action name="req-params" src="org.apache.cocoon.acting.RequestParameterExistsAction"/>
<!-- form validation -->
<map:action name="formval" logger="sitemap.action.form-validator" src="org.apache.cocoon.acting.FormValidatorAction"/>
</map:actions>
</map:components> ...
<map:pipelines>
<!-- authentification framework -->
<map:component-configurations>
<authentication-manager>
<handlers>
<handler name="demohandler">
<redirect-to uri="cocoon:/login"/>
<authentication
uri="cocoon:raw:/authenticate"/>
<!-- load roles -->
<load-roles
uri="cocoon:raw://user-roles"/>
</handler>
</handlers>
</authentication-manager>
</map:component-configurations><map:pipeline>
<!-- match common content types -->
<map:match pattern="**.js">
<map:read src="../common/js/{1}.js"
mime-type="text/javascript"/>
</map:match> <map:match pattern="**.css">
<map:read src="../common/css/{1}.css"
mime-type="text/css"/>
</map:match> <map:match pattern="**.gif">
<map:read src="../common/images/{1}.gif"
mime-type="image/gif"/>
</map:match> <map:match pattern="**.jpg">
<map:read src="../common/images/{1}.jpg"
mime-type="image/jpg"/>
</map:match> <map:match pattern="**.png">
<map:read src="../common/images/{1}.png"
mime-type="image/png"/>
</map:match><map:match pattern="**.swf">
<map:read src="../common/swf/{1}.swf" mime-type="application/x-shockwave-flash"/>
</map:match>
<!-- catch all (Log in) -->
<map:match pattern="">
<map:redirect-to uri="login"/>
</map:match><!-- Simple login page -->
<map:match pattern="login">
<!-- if we are already logged in, redirect to the protected document -->
<map:act type="auth-loggedIn">
<map:parameter name="handler" value="demohandler"/>
<map:redirect-to uri="protected-protected"/>
</map:act>
<map:generate src="doc/login.xml"/>
<map:call resource="styles">
<map:parameter name="xsltarget" value="loggin"/>
</map:call>
<map:transform type="encodeURL"/>
<map:serialize/>
</map:match>
<!-- Form target which performs auth service -->
<map:match pattern="do-login">
<!-- try to login -->
<map:act type="auth-login">
<map:parameter name="handler" value="demohandler"/>
<map:parameter name="parameter_name" value="{request-param:username}"/>
<map:parameter name="parameter_password" value="{request-param:password}"/>
<!--<map:redirect-to uri="protected"/>-->
</map:act>
<!-- something was wrong, try it again -->
<map:redirect-to uri="login"/>
</map:match>
<!-- Internal parts pipeline -->
<map:pipeline internal-only="true">
<!-- session inf pipe -->
<map:match pattern="session.xml">
<map:generate src="doc/session.xml"/>
<map:serialize type="xml"/>
</map:match><!-- start navigation pipes (internalized to protect the resource) -->
<map:match pattern="county.xml">
<map:generate type="serverpages" src="nav/county.xsp"/>
<map:transform type="sql">
<map:parameter name="use-connection" value="personnel"/>
</map:transform>
<map:call resource="styles">
<map:parameter name="xsltarget" value="simple"/>
</map:call>
<map:serialize type="xml"/>
</map:match>
<!-- only get counties who have new items -->
<map:match pattern="count.xml">
<map:generate type="serverpages"
src="nav/count.xsp"/>
<map:transform type="sql">
<map:parameter name="use-connection"
value="personnel"/>
</map:transform>
<map:call resource="styles">
<map:parameter name="xsltarget"
value="count"/>
</map:call>
<map:serialize type="xml"/>
</map:match> <map:match pattern="dyn.xsl">
<map:generate src="cocoon:/count.xml"/>
<map:call resource="styles">
<map:parameter name="xsltarget"
value="generate-nav"/>
</map:call>
<map:serialize type="xml"/>
<map:generate/>
</map:match>
<!-- Admin parts (internalized to protect the
resource) -->
<map:match pattern="body-*.xml">
<map:generate type="serverpages"
src="doc/{1}.html.xsp">
<map:parameter name="cid"
value="{request-param:cid}"/>
</map:generate>
<map:serialize type="xml"/>
</map:match> <!-- dynamically create navigation / XSL -->
<map:match pattern="nav.xml">
<map:aggregate element="foot">
<map:part
src="cocoon:/count.xml"/>
<map:part
src="cocoon:/county.xml"/>
</map:aggregate>
<map:transform src="cocoon:/dyn.xsl"/>
<map:serialize type="xml"/>
</map:match> <!-- combine head and body in XML -->
<map:match pattern="fulldoc-*.xml">
<map:aggregate element="fulldoc">
<map:part
src="cocoon:/session.xml"/>
<map:part
src="cocoon:/nav.xml"/>
<map:part
src="cocoon:/body-{1}.xml"/>
</map:aggregate>
<map:serialize type="xml"/>
</map:match>
<!-- This is the user roles resource -->
<map:match pattern="user-roles">
<map:generate src="doc/roles.xml"/>
<map:transform
src="../xsl/authenticate.xsl">
<map:parameter
name="use-request-parameters" value="true"/>
</map:transform>
<map:serialize type="xml"/>
</map:match> <!-- This is the authentication resource -->
<map:match pattern="authenticate">
<map:generate src="doc/userlist.xml"/>
<map:transform
src="../xsl/authenticate.xsl">
<map:parameter
name="use-request-parameters" value="true"/>
</map:transform>
<map:serialize type="xml"/>
</map:match></map:pipeline>
<!-- Protected area (The Admin template) -->
<map:match pattern="protected-*">
<map:act type="auth-protect">
<map:parameter name="handler"
value="demohandler"/>
</map:act>
<map:generate src="cocoon:/fulldoc-{1}.xml"/>
<map:transform type="session"/>
<map:transform src="../xsl/admin2html.xsl">
<map:parameter name="cid"
value="{request-param:cid}"/>
</map:transform>
<map:transform type="encodeURL"/>
<map:serialize type="xhtml"/>
</map:match> <!-- Logout link which invalidates the session -->
<map:match pattern="do-logout">
<map:act type="auth-protect">
<map:parameter name="handler"
value="demohandler"/>
<map:act type="auth-logout"/>
</map:act>
<map:redirect-to uri="login"/>
</map:match> <!-- Database descriptor file -->
<map:match pattern="database.xml">
<map:generate src="{0}"/>
<map:serialize type="xml"/>
</map:match>
<map:match pattern="schema.sql">
<map:read src="{0}" mime-type="text/plain"/>
</map:match><!-- ========================== Modular DB ================================= -->
<map:match pattern="*">
<!-- ========================== inserts ========================== -->
<!-- add new groups to a user's groups -->
<map:act type="req-params">
<map:parameter name="parameters" value="add-groups user_groups.uid user_groups.gid"/>
<map:act type="mod-db-add">
<map:parameter name="table-set" value="user_groups"/>
</map:act>
</map:act>
...
<!-- updatate company -->
<map:act type="req-params">
<map:parameter name="parameters" value="remove-company company.cname company.contact_name company.contact_email_0 company.contact_email_1 company.contact_email_2 company.contact_phone_0 company.contact_phone_1 company.contact_phone_2"/>
<map:act type="mod-db-del">
<map:parameter name="table-set" value="company"/>
</map:act>
</map:act>
<!-- ========================== content ========================== -->
<map:generate type="serverpages" src="doc/{1}.xsp"/>
<map:call resource="styles">
<map:parameter name="xsltarget"
value="dynamic-page2html"/>
<map:parameter name="servletPath"
value="{request:servletPath}"/>
<map:parameter name="sitemapURI"
value="{request:sitemapURI}"/>
<map:parameter name="contextPath"
value="{request:contextPath}"/>
<map:parameter name="file"
value=".xsp"/>
<map:parameter name="xsltarget"
value="stupid"/>
</map:call>
<map:serialize/>
</map:match> <!-- match the continuation -->
<map:match pattern="continue.*">
<map:call continuation="{1}"/>
</map:match> </map:pipeline>
<!-- cached main pipe (THE Admin site) -->
<map:pipeline type="caching"> <!-- set cache expires -->
<map:parameter name="expires" value="access plus 1 minutes"/>
<!-- here's the HTML version -->
<map:match pattern="protected-*.html">
<map:generate src="cocoon:/fulldoc-{1}.xml"/>
<map:transform src="xsl/admin2html.xsl">
<map:parameter name="cid"
value="{request-param:cid}"/>
</map:transform>
<map:serialize type="xhtml"/>
</map:match></map:pipeline>
<!--<map:pipeline>
<map:match pattern="admin/**">
<map:mount uri-prefix="admin" src="admin/sitemap.xmap" check-reload="yes" reload-method="synchron"/>
</map:match>
</map:pipeline>-->
</map:pipelines>
</map:sitemap>
In my error.log & my core.log I get this when ever I try to do a delete, update or insert action:
ERROR (2004-05-17) 12:38.21:017 [core.store.persistent] (/cocoon/samples/myapp/admin-db/protected-areas-list) Thread-58/AbstractJispFilesystemStore: get(..): Exception
com.coyotegulch.jisp.DatabaseException: no indexes associated with this database
at com.coyotegulch.jisp.IndexedObjectDatabase.<clinit>(IndexedObjectDatabas e.java:88)
at org.apache.cocoon.components.store.impl.DefaultPersistentStore.parameter ize(DefaultPersistentStore.java:174)
at org.apache.avalon.framework.container.ContainerUtil.parameterize(Contain erUtil.java:266)
at org.apache.avalon.excalibur.component.DefaultComponentFactory.newInstanc e(DefaultComponentFactory.java:310)
at org.apache.avalon.excalibur.component.ThreadSafeComponentHandler.initial ize(ThreadSafeComponentHandler.java:143)
at org.apache.avalon.excalibur.component.ExcaliburComponentManager.lookup(E xcaliburComponentManager.java:312)
at org.apache.cocoon.components.CocoonComponentManager.lookup(CocoonCompone ntManager.java:324)
at org.apache.avalon.framework.service.WrapperServiceManager.lookup(Wrapper ServiceManager.java:106)
at org.apache.excalibur.store.impl.MRUMemoryStore.parameterize(MRUMemorySto re.java:153)
at org.apache.cocoon.components.store.impl.DefaultStore.parameterize(Defaul tStore.java:72)
at org.apache.avalon.framework.container.ContainerUtil.parameterize(Contain erUtil.java:266)
at org.apache.avalon.excalibur.component.DefaultComponentFactory.newInstanc e(DefaultComponentFactory.java:310)
at org.apache.avalon.excalibur.component.ThreadSafeComponentHandler.initial ize(ThreadSafeComponentHandler.java:143)
at org.apache.avalon.excalibur.component.ExcaliburComponentManager.initiali ze(ExcaliburComponentManager.java:558)
at org.apache.cocoon.components.CocoonComponentManager.initialize(CocoonCom ponentManager.java:547)
at org.apache.avalon.framework.container.ContainerUtil.initialize(Container Util.java:282)
at org.apache.cocoon.Cocoon.initialize(Cocoon.java:340)
at org.apache.avalon.framework.container.ContainerUtil.initialize(Container Util.java:282)
at org.apache.cocoon.servlet.CocoonServlet.createCocoon(CocoonServlet.java: 1371)
at org.apache.cocoon.servlet.CocoonServlet.init(CocoonServlet.java:514)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.jav a:1033)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:876)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.j ava:3814)
at org.apache.catalina.core.StandardContext.start(StandardContext.java: 4105)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.ja va:868)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:852)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:614)
at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeploy er.java:319)
at org.apache.catalina.core.StandardHost.install(StandardHost.java:838)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:583)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java: 399)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSu pport.java:166)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1135)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:795)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1127)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:502)
at org.apache.catalina.core.StandardService.start(StandardService.java: 519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2312)
at org.apache.catalina.startup.Catalina.start(Catalina.java:577)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav a:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor Impl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:297)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:394)
Many thanks in advance all.
Jason Lane
Developer Root10 developments
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
