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