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 <jami..timulussoft.com> 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 <jami..timulussoft.com> 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 <jami..timulussoft.com> 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: jami..timulussoft.com
> Web: http://www.mailarchiva.com
> To receive MailArchiva Enterprise Edition product announcements, send a
> message to: <mailarchiva-enterprise-edition-subscrib..timulussoft.com>
>
>
> <..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>
>
This archive was generated by hypermail 2.0.0 : Fri Sep 18 2009 - 10:29:54 EDT