I am glad you got this working, as investigating it fully may take time. > It doesn't seem like I should have to go through all these hoops when I'm > using maven to manage my dependencies for me.
Agreed. And I don't think it has anything to do with Maven or Cayenne. On the surface looks like a bug in Velocity classloading. Andrus On Apr 16, 2013, at 2:22 PM, Rick Bonnett <rbonn...@mesca.com> wrote: > > I'm using glassfish 3.1.2. I have managed to get this working though. > > What I ended up doing was explicitly putting the velocity jar file in my > domains/domain1/lib folder under glassfish . This then resulted in a new > class loader exception about commons.lang.StringUtils. So I put > commons-lang-2.6 jar in the lib folder as well - now all works fine. > > In my maven dependency hierarchy, I see that velocity-1.6.3 references > commons-lang-2.4. I am also using commons-configuration-1.9 which references > commons-lang-2.6. Maven is telling me it is omitting the commons-lang-2.4 > because of the 2.6 conflict. All this seems related to me, but I'm not sure > how. > > If there's anything else you would like me to try at my end, I'll be glad to > do so. It doesn't seem like I should have to go through all these hoops when > I'm using maven to manage my dependencies for me. > > I'm including my pom.xml file as well in case that's useful to you. > > And thanks all for the great help so far… > > > <project xmlns="http://maven.apache.org/POM/4.0.0" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 > http://maven.apache.org/xsd/maven-4.0.0.xsd"> > <modelVersion>4.0.0</modelVersion> > <groupId>CayenneServiceTemplate</groupId> > <artifactId>CayenneServiceTemplate</artifactId> > <version>1.0.0</version> > <dependencies> > <dependency> > <groupId>org.apache.cayenne</groupId> > <artifactId>cayenne-server</artifactId> > <version>3.1B2</version> > </dependency> > <dependency> > <groupId>org.jdom</groupId> > <artifactId>jdom</artifactId> > <version>1.1.3</version> > </dependency> > <dependency> > <groupId>com.sun.jersey</groupId> > <artifactId>jersey-grizzly2</artifactId> > <version>1.12</version> > </dependency> > <dependency> > <groupId>postgresql</groupId> > <artifactId>postgresql</artifactId> > <version>9.1-901.jdbc4</version> > </dependency> > <dependency> > <groupId>axis</groupId> > <artifactId>axis-jaxrpc</artifactId> > <version>1.4</version> > </dependency> > <dependency> > <groupId>axis</groupId> > <artifactId>axis</artifactId> > <version>1.4</version> > </dependency> > <dependency> > <groupId>com.google.code.gson</groupId> > <artifactId>gson</artifactId> > <version>2.2.2</version> > </dependency> > <dependency> > <groupId>org.codehaus.jackson</groupId> > <artifactId>jackson-jaxrs</artifactId> > <version>1.9.12</version> > </dependency> > <dependency> > <groupId>org.codehaus.jackson</groupId> > <artifactId>jackson-xc</artifactId> > <version>1.9.12</version> > </dependency> > <dependency> > <groupId>commons-configuration</groupId> > <artifactId>commons-configuration</artifactId> > <version>1.9</version> > </dependency> > <dependency> > <groupId>org.apache.httpcomponents</groupId> > <artifactId>httpclient</artifactId> > <version>4.2.2</version> > </dependency> > > </dependencies> > </project> > > On Apr 16, 2013, at 1:51 PM, Andrus Adamchik > <and...@objectstyle.org<mailto:and...@objectstyle.org>> wrote: > > SQLTemplate backend relies on Velocity. EJBQLQuery backend relies on > SQLTemplate. No other queries rely on Velocity or SQLTemplate, and Java class > loading is lazy. So Velocity is likely the culprit. > > So which Glassfish version do you have? Maybe I can try a basic test in an > isolated environment. > > Andrus > > On Apr 16, 2013, at 1:26 PM, Rick Bonnett > <rbonn...@mesca.com<mailto:rbonn...@mesca.com>> wrote: > OK. One more level down the rabbit hole now… > > now that I have velocity seemingly loading, I get this in the stack trace: > > Caused by: java.lang.NoClassDefFoundError: Could not initialize class > org.apache.cayenne.access.jdbc.SQLTemplateProcessor > at > org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:102) > at > org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87) > at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:280) > at > org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:442) > at > org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:70) > at > org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:415) > at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:877) > at > org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:412) > at > org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:122) > at org.apache.cayenne.access.DataDomain.onQueryNoFilters(DataDomain.java:758) > at > org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:1009) > at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:748) > at > org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:350) > at > org.apache.cayenne.util.ObjectContextQueryAction.executePostCache(ObjectContextQueryAction.java:106) > at > org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:93) > at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:989) > at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:978) > at > com.mesca.services.AccessorialService.allAccessorialRows(AccessorialService.java:90) > > I'm very puzzled as to why other Cayenne classes and methods sen to work > fine. For example, this code works within the same web service: > > ServerRuntime cayenneRuntime = new > ServerRuntime("cayenne-cayenne-service-template.xml"); > ObjectContext context = cayenneRuntime.getContext(); > > > SelectQuery select1 = new SelectQuery(Accessorial.class); > Collection<Accessorial> accessorials = context.performQuery(select1); > > Just in general, I've yet to get a SQLTemplate or EJBQLQuery to work when > running in glassfish, although using SelectQuery has given me no problems. > > > > On Apr 16, 2013, at 9:59 AM, Mike Kienenberger > <mkien...@gmail.com<mailto:mkien...@gmail.com><mailto:mkien...@gmail.com>> > wrote: > > My first guess would be that you have more than one velocity jar files > in the classpath. > I guess a second possibility is that you have no velocity jar files in > the classpath. > > We have an in-house findClass.jsp (backed by a ClassPath bean) which > we use for problems like this to identify all definitions of a class > in the classpath. Unfortunately, I don't have permission to share > this. > > But you could probably come up with something similar: > > > Here's a jsp that looks like it identifies the first definition of a class. > http://mcpaint.tistory.com/13 > > > Here's how to show all resources > http://www.mkyong.com/java/how-to-print-out-the-current-project-classpath/ > > You'd probably want to combine the two. > > > Here's something else I came across while trying to find an example of > what you needed. Not sure how easy it would be to integrate with your > app. > > http://classpathhelper.sourceforge.net/ > > On Tue, Apr 16, 2013 at 8:38 AM, Rick Bonnett <rbonn...@mesca.com> wrote: > I'm trying to use SQLTemplate queries and running into a strange problem. > This snippet works fine if I run it in a plain Java application, but fails if > I then use it within a web service running under Glassfish. > In both cases I am using the same cayenne metadata files. I have also noticed > the same issue when using EJBQL queries. > > > ServerRuntime cayenneRuntime = new > ServerRuntime("cayenne-cayenne-service-template.xml"); > ObjectContext context = cayenneRuntime.getContext(); > > > SQLTemplate sql = new SQLTemplate(Accessorial.class,"SELECT * FROM > live.tbl_accessorials"); > String pgSql = "SELECT * FROM live.tbl_accessorials"; > sql.setTemplate(PostgresAdapter.class.getName(), pgSql); > Collection<Accessorial> accessorials = context.performQuery(sql); > > > I have tried this both with and without the Postgres specific template - same > result either way. Works fine in a console app, fails running under the web > server. > > This seems to be the relevant section of the stack trace: > > Caused by: java.lang.NoClassDefFoundError: > org/apache/velocity/runtime/parser/ParseException > at > org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:102) > at > org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87) > at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:280) > at > org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:442) > at > org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:70) > at > org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:415) > at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:877) > at > org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:412) > at > org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:122) > at org.apache.cayenne.access.DataDomain.onQueryNoFilters(DataDomain.java:758) > at > org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:1009) > at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:748) > at > org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:350) > at > org.apache.cayenne.util.ObjectContextQueryAction.executePostCache(ObjectContextQueryAction.java:106) > at > org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:93) > at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:989) > at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:978) > at > com.mesca.services.AccessorialService.allAccessorialRows(AccessorialService.java:83) > > Any ideas on what I am missing here? > > Thanks > Rick > >