I took a quick look at your model and it looks OK (given what I know about what you are doing).
One thing that may be worth trying is to change: Partner partner = ((BusinessServicesPrincipal)request.getUserPrincipal()).getPartner(); DataContext context = ((BusinessServicesPrincipal)request.getUserPrincipal()).getDataContext(); Customer customer = (Customer) context.newObject(Customer.class); to: Partner partner = ((BusinessServicesPrincipal)request.getUserPrincipal()).getPartner(); Customer customer = partner.getDataContext().newObject(Customer.class); It may not solve anything, but worth a shot. I'm assuming you are using Cayenne 3.x? On Fri, Sep 18, 2009 at 10:07 AM, Jamie <[email protected]> wrote: > Hi Michael > > See below: > > Michael Gentry wrote: >> >> Just do: >> >> partner.addToCustomers(customer); >> >> You don't need to do both lines. How did you create partner and >> customer? > > Partner partner = > ((BusinessServicesPrincipal)request.getUserPrincipal()).getPartner(); > DataContext context = > ((BusinessServicesPrincipal)request.getUserPrincipal()).getDataContext(); > Customer customer = (Customer) context.newObject(Customer.class); > > Actually, I have a Principal object that stores the DataContext and i use > that through out. The context is only created once: > > DataContext context = DataContext.createDataContext(); > >> Did you create partner in a DataContext or fetch it from >> the DB? > > The Partner is obtained from the DB at the point where the partner logs in: > > List<Partner> partners = context.performQuery(select); > if (partners.size()>0) { > for (Partner partner : partners) { > String pass = partner.getPassword(); > if (partner.getContactEmail()==username && > (partner.getPassword()==null || partner.getPassword().equals(password))) { > return new > BusinessServicesPrincipal("partner",partner,context); > } > } > } > return null; > >> Is customer created in the same DataContext as partner? >> > > Yes. I ran into this error before. Now I DataContext everything in the > Principal and access the Principal from the JSP. > > See attached for source and config files. >> >> mrg >> >> >> On Fri, Sep 18, 2009 at 3:59 AM, Jamie <[email protected]> wrote: >> >>> >>> Hi Michael >>> >>> Thanks for the help. Next question. I have a one to many Partner -> >>> Customer >>> relationship defined. >>> When creating a new customer, I try to setup the relationship as follows: >>> >>> partner.addToCustomers(customer); >>> customer.setPartner(partner); >>> >>> I get a NullPointer, even though customer and partner are not null. >>> >>> SEVERE: Servlet.service() for servlet jsp threw exception >>> java.lang.NullPointerException >>> at >>> >>> org.apache.cayenne.CayenneDataObject.setReverseRelationship(CayenneDataObject.java:385) >>> at >>> >>> org.apache.cayenne.CayenneDataObject.setToOneTarget(CayenneDataObject.java:339) >>> at com.stimulus.support.auto._Customer.setPartner(_Customer.java:97) >>> at >>> org.apache.jsp.customerdetail_jsp._jspService(customerdetail_jsp.java:94) >>> at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) >>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) >>> at >>> >>> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) >>> at >>> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) >>> at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) >>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) >>> at >>> >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) >>> at >>> >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> >>> org.apache.cayenne.conf.WebApplicationContextFilter.doFilter(WebApplicationContextFilter.java:91) >>> at >>> >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>> at >>> >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> >>> org.securityfilter.filter.SecurityFilter.doFilter(SecurityFilter.java:188) >>> at >>> >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>> at >>> >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> >>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) >>> at >>> >>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) >>> at >>> >>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) >>> at >>> >>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) >>> at >>> >>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >>> at >>> >>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) >>> at >>> >>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) >>> at >>> >>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) >>> at >>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) >>> at java.lang.Thread.run(Thread.java:619) >>> >>> Any ideas? >>> >>> Jamie >>> >>> Michael Gentry wrote: >>> >>>> >>>> When you create a brand new ObjEntity from a DBEntity, it propagates >>>> all attributes and relationships defined in the DBEntity except for >>>> the primary key (Cayenne Modeler assumes you don't need that exposed). >>>> Once you've created the ObjEntity, though, adding a new relationship >>>> to the DBEntity will not be automatically synced to the ObjEntity. >>>> You have to sync it manually (click the double-arrow icon in either >>>> the DBEntity or ObjEntity toolbar or use the Project menu or keyboard >>>> shortcut). I'm talking mainly about 3.0M6 since I no longer use the >>>> 2.x modeler and don't remember the exact specifics of how it behaves. >>>> >>>> mrg >>>> >>>> >>>> On Thu, Sep 17, 2009 at 3:46 AM, Jamie <[email protected]> wrote: >>>> >>>> >>>>> >>>>> Hi Everyone >>>>> >>>>> I am really struggling to use the Cayenne Modelling tool. It seems >>>>> whenever >>>>> I create an ObjectEntity from the DBEntity the relationships are not >>>>> always >>>>> propagated. This happens even when I follow the ARTIST tutorial. I >>>>> tried >>>>> both Cayenne 3.0M6 and Cayenne 2.0.4 and the same behaviour is >>>>> observed. >>>>> Is >>>>> this a known bug or am I likely doing something horribly wrong? >>>>> >>>>> Thank in advance >>>>> >>>>> >>>>> Jamie >>>>> >>>>> >>>>> >>>>> >>>>> >>> >>> > > > -- > Stimulus Software - MailArchiva > Email Archiving And Compliance > USA Tel: +1-713-343-8824 ext 100 > UK Tel: +44-20-80991035 ext 100 > Email: [email protected] > Web: http://www.mailarchiva.com > To receive MailArchiva Enterprise Edition product announcements, send a > message to: <[email protected]> > > > <%@ page language="java" contentType="text/html" %> > <%@ page import="org.apache.cayenne.*" %> > <%@ page import="org.apache.cayenne.access.*" %> > <%@ page import="java.util.*" %> > <%@ page import="java.text.*" %> > <%@ page import="com.stimulus.support.*" %> > <%@ page import="com.stimulus.support.realm.*"%> > <% > Partner partner = > ((BusinessServicesPrincipal)request.getUserPrincipal()).getPartner(); > out.println(partner.getCompanyName()); > DataContext context = > ((BusinessServicesPrincipal)request.getUserPrincipal()).getDataContext(); > String id = request.getParameter("id"); > Customer customer = null; > if(id != null && id.trim().length() > 0) { > customer = (Customer) DataObjectUtils.objectForPK(context, > Customer.class, Integer.parseInt(id)); > } > > if("POST".equals(request.getMethod())) { > if (request.getParameter("delete")!=null) { > out.println(request.getParameter("delete")); > customer = (Customer) DataObjectUtils.objectForPK(context, > Customer.class, Integer.parseInt(id)); > partner.removeFromCustomers(customer); > context.deleteObject(customer); > } else { > if(customer == null) { > customer = (Customer) > context.newObject(Customer.class); > } > customer.setCompanyName(request.getParameter("companyName")); > > customer.setTechnicalContactEmail(request.getParameter("technicalContactEmail")); > > customer.setTechnicalContactName(request.getParameter("technicalContactName")); > > customer.setTechnicalContactTel(request.getParameter("technicalContactTel")); > > customer.setFinanceContactEmail(request.getParameter("financeContactEmail")); > > customer.setFinanceContactName(request.getParameter("financeContactName")); > > customer.setFinanceContactTel(request.getParameter("financeContactTel")); > partner.addToCustomers(customer); > > } > context.commitChanges(); > response.sendRedirect("managecustomers.jsp"); > } > > if(customer == null) { > customer = new Customer(); > } > > String companyName = > customer.getCompanyName()==null?"":customer.getCompanyName(); > String technicalContactEmail = customer.getTechnicalContactEmail() > ==null? "":customer.getTechnicalContactEmail(); > String technicalContactName = customer.getTechnicalContactName()==null ? > "":customer.getTechnicalContactName(); > String technicalContactTel = customer.getTechnicalContactTel()==null ? > "":customer.getTechnicalContactTel(); > > String financeContactEmail = customer.getFinanceContactEmail() ==null? > "":customer.getFinanceContactEmail(); > String financeContactName = customer.getFinanceContactName()==null ? > "":customer.getFinanceContactName(); > String financeContactTel = customer.getFinanceContactTel()==null ? > "":customer.getFinanceContactTel(); > %> > <html> > <head> > <title>Customer Details</title> > </head> > <body> > <img src="images/mailarchiva_logo.jpg" alt="MailArchiva" /> > <h2>Customer Details</h2> > <form name="EditCustomer" action="customerdetail.jsp" method="POST"> > <input type="hidden" name="id" value="<%= id != null ? id : "" > %>" /> > <table border="0"> > <tr> > <td>Company Name:</td> > <td><input type="text" name="companyName" value="<%= > companyName %>"/></td> > </tr> > <tr> > <td>Technical Contact Name:</td> > <td><input type="text" name="technicalContactName" > value="<%= technicalContactName %>"/></td> > </tr> > <tr> > <td>Technical Contact Email:</td> > <td><input type="text" name="technicalContactEmail" > value="<%= technicalContactEmail %>"/></td> > </tr> > <tr> > <td>Technical Contact Tel.:</td> > <td><input type="text" name="technicalContactTel" > value="<%= technicalContactTel %>"/></td> > </tr> > <tr> > <td>Finance Contact Name:</td> > <td><input type="text" name="financeContactName" > value="<%= financeContactName %>"/></td> > </tr> > <tr> > <td>Finance Contact Email:</td> > <td><input type="text" name="financeContactEmail" > value="<%= financeContactEmail %>"/></td> > </tr> > <tr> > <td>Finance Contact Tel.:</td> > <td><input type="text" name="financeContactTel" > value="<%= financeContactTel %>"/></td> > </tr> > > <tr> > <td></td> > <td align="right"><input type="submit" name="save" > value="Save" /></td> > <td align="right"><input type="submit" name="delete" > value="Delete" /></td> > </tr> > </table> > </form> > <p><a href="managecustomers.jsp">Back...</a></p> > </body> > </html> >
