You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by akira <wi...@gmail.com> on 2009/08/20 13:09:43 UTC

Multi Domain deploy problem

Hi, i'm new to cayenne and i have a problem deploying a multi domain  
app. I have followed cayenne's tutorial on how to deal with multi  
domain applications, basically what i did was:
1. Put domains, nodes and cayenne xml files inside WEB-INF/lib;
2. Put the cayenne configuration path in web.xml;
3. Put the CayenneFilter in web.xml
4. I have a domain service class where i'm managing the domains:

public class DomainManagerImpl implements DomainManagerDAO {

     public DataContext context = null;

     public DataContext getContext(String domain) {
	
	if (context == null || context.getParentDataDomain().getName() !=  
domain) {
	    try {
		context = DataContext.createDataContext(domain);
	    } catch (Exception e) {
		e.printStackTrace();
	    }	
	}
	return context;
     }
   }

my web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
         PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
         "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
     <display-name>mywebapp</display-name>
     <context-param>
         <!-- informs Tapestry where to look for pages, components and  
mixins. -->
         <param-name>tapestry.app-package</param-name>
         <param-value>com.example.mywebapp</param-value>
     </context-param>
     <context-param>
     	<param-name>cayenne.configuration.path</param-name>
     	<param-value>/WEB-INF/config/cayenne-files</param-value>
	</context-param>
     <filter>
         <filter-name>app</filter-name>
         <filter-class>org.apache.tapestry5.TapestryFilter</filter- 
class>
     </filter>
<!-- Filter for cayenne context -->
     <filter>
         <filter-name>CayenneFilter</filter-name>
         <filter- 
class>org.apache.cayenne.conf.WebApplicationContextFilter</filter-class>
     </filter>
     <filter-mapping>
         <filter-name>CayenneFilter</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
     <filter-mapping>
         <filter-name>app</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
</web-app>

and when deployed i'm getting the following error:

[#|2009-08-20T19:37:19.742+0900|SEVERE|sun-appserver9.1| 
javax.enterprise.system.container.web| 
_ThreadID 
= 
20 
;_ThreadName 
= 
httpSSLWorkerThread 
-8080-0;_RequestID=e6b9b518-937d-40c4-8a75-70c95472c657;| 
StandardWrapperValve[default]: PWC1406: Servlet.service() for servlet  
default threw exception
org.apache.cayenne.CayenneRuntimeException: [v.3.0M6 May 25 2009  
19:26:54] More than one domain is configured; use 'getDomain(String  
name)' instead.
	at org.apache.cayenne.conf.Configuration.getDomain(Configuration.java: 
425)
	at  
org 
.apache.cayenne.access.DataContext.createDataContext(DataContext.java: 
145)
	at  
org.apache.cayenne.conf.ServletUtil.getSessionContext(ServletUtil.java: 
116)
	at  
org 
.apache 
.cayenne 
.conf 
.WebApplicationContextFilter.doFilter(WebApplicationContextFilter.java: 
86)
	at  
org 
.apache 
.catalina 
.core 
.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 
230)
	at  
org 
.apache 
.catalina 
.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
	at  
org 
.apache 
.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 
288)
	at  
org 
.apache 
.catalina 
.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
	at  
org 
.apache 
.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 
202)
	at  
org 
.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java: 
632)
	at  
org 
.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java: 
577)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
	at  
org 
.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 
206)
	at  
org 
.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java: 
632)
	at  
org 
.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java: 
577)
	at  
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 
571)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java: 
1080)
	at  
org 
.apache 
.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
	at  
org 
.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java: 
632)
	at  
org 
.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java: 
577)
	at  
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 
571)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java: 
1080)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java: 
270)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter 
(DefaultProcessorTask.java:637)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess 
(DefaultProcessorTask.java:568)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process 
(DefaultProcessorTask.java:813)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask 
(DefaultReadTask.java:339)
	at  
com 
.sun 
.enterprise 
.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:261)
	at  
com 
.sun 
.enterprise 
.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:212)
	at com.sun.enterprise.web.portunif.PortUnificationPipeline 
$PUTask.doTask(PortUnificationPipeline.java:361)
	at  
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
	at  
com 
.sun 
.enterprise 
.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
|#]

I have searched in the web for errors like this but found nothing,  
what's the best approach when dealing with multi domains  
configuratiion files?
I'm using Cayenne 3.0M6 server, Tapestry 5.1, Glassfish v2 on Mac OS  
X. TIA.

Oh, forgot to say that i have reengineered a postgres db using  
modeller and it generated all the classes, i did nothing, just watch!  
Wonderful!

Re: Multi Domain deploy problem

Posted by akira <wi...@gmail.com>.
Andrey, thanks for the quick answer. Looking inside the filter class  
and the tutorials again and decided to do what you say inside my  
domain manager class and deleted the filter, it's working. Thanks.

On Aug 20, 2009, at 8:32 PM, Andrey Razumovsky wrote:

> Hi,
>
> WebApplicationContextFilter indirectly (in ServerUtil class) uses
> DataContext.createDataContext() [NO PARAMETERS] method. It will not  
> work
> with multi domain app. For that, you will need to rewrite
> WebApplicationContextFilter so that it uses
> DataContext.createDataContext(String domainName) mathod.
>
> Regards,
> Andrey


Re: Multi Domain deploy problem

Posted by Andrey Razumovsky <ra...@gmail.com>.
Hi,

WebApplicationContextFilter indirectly (in ServerUtil class) uses
DataContext.createDataContext() [NO PARAMETERS] method. It will not work
with multi domain app. For that, you will need to rewrite
WebApplicationContextFilter so that it uses
DataContext.createDataContext(String domainName) mathod.

Regards,
Andrey

2009/8/20 akira <wi...@gmail.com>

> Hi, i'm new to cayenne and i have a problem deploying a multi domain app. I
> have followed cayenne's tutorial on how to deal with multi domain
> applications, basically what i did was:
> 1. Put domains, nodes and cayenne xml files inside WEB-INF/lib;
> 2. Put the cayenne configuration path in web.xml;
> 3. Put the CayenneFilter in web.xml
> 4. I have a domain service class where i'm managing the domains:
>
> public class DomainManagerImpl implements DomainManagerDAO {
>
>    public DataContext context = null;
>
>    public DataContext getContext(String domain) {
>
>        if (context == null || context.getParentDataDomain().getName() !=
> domain) {
>            try {
>                context = DataContext.createDataContext(domain);
>            } catch (Exception e) {
>                e.printStackTrace();
>            }
>        }
>        return context;
>    }
>  }
>
> my web.xml:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE web-app
>        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
>        "http://java.sun.com/dtd/web-app_2_3.dtd">
> <web-app>
>    <display-name>mywebapp</display-name>
>    <context-param>
>        <!-- informs Tapestry where to look for pages, components and
> mixins. -->
>        <param-name>tapestry.app-package</param-name>
>        <param-value>com.example.mywebapp</param-value>
>    </context-param>
>    <context-param>
>        <param-name>cayenne.configuration.path</param-name>
>        <param-value>/WEB-INF/config/cayenne-files</param-value>
>        </context-param>
>    <filter>
>        <filter-name>app</filter-name>
>        <filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
>    </filter>
> <!-- Filter for cayenne context -->
>    <filter>
>        <filter-name>CayenneFilter</filter-name>
>
>  <filter-class>org.apache.cayenne.conf.WebApplicationContextFilter</filter-class>
>    </filter>
>    <filter-mapping>
>        <filter-name>CayenneFilter</filter-name>
>        <url-pattern>/*</url-pattern>
>    </filter-mapping>
>    <filter-mapping>
>        <filter-name>app</filter-name>
>        <url-pattern>/*</url-pattern>
>    </filter-mapping>
> </web-app>
>
> and when deployed i'm getting the following error:
>
> [#|2009-08-20T19:37:19.742+0900|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=20;_ThreadName=httpSSLWorkerThread-8080-0;_RequestID=e6b9b518-937d-40c4-8a75-70c95472c657;|StandardWrapperValve[default]:
> PWC1406: Servlet.service() for servlet default threw exception
> org.apache.cayenne.CayenneRuntimeException: [v.3.0M6 May 25 2009 19:26:54]
> More than one domain is configured; use 'getDomain(String name)' instead.
>        at
> org.apache.cayenne.conf.Configuration.getDomain(Configuration.java:425)
>        at
> org.apache.cayenne.access.DataContext.createDataContext(DataContext.java:145)
>        at
> org.apache.cayenne.conf.ServletUtil.getSessionContext(ServletUtil.java:116)
>        at
> org.apache.cayenne.conf.WebApplicationContextFilter.doFilter(WebApplicationContextFilter.java:86)
>        at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
>        at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
>        at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
>        at
> org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
>        at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
>        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
>        at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
>        at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
>        at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
>        at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
>        at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
>        at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
>        at
> org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:270)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:339)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:261)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:212)
>        at
> com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:361)
>        at
> com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
>        at
> com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
> |#]
>
> I have searched in the web for errors like this but found nothing, what's
> the best approach when dealing with multi domains configuratiion files?
> I'm using Cayenne 3.0M6 server, Tapestry 5.1, Glassfish v2 on Mac OS X.
> TIA.
>
> Oh, forgot to say that i have reengineered a postgres db using modeller and
> it generated all the classes, i did nothing, just watch! Wonderful!