[Persistence, JBoss/CMP, Hibernate, Database] - Foreign key in a composite primary key
by jonathan12
Hello,
I use an entity "Commentaire" with a composite primary key and in this key, I have a foreign key on another entity (Journal).
| @NamedQueries( {
| @NamedQuery(name="commentaire.findAll",
| query="FROM Commentaire"),
| @NamedQuery(name="commentaire.findByActivite",
| query= "FROM Commentaire " +
| "WHERE actif = :activite"),
| @NamedQuery(name="commentaire.findByDate",
| query= "FROM Commentaire " +
| "WHERE date = :date"),
| @NamedQuery(name="commentaire.findByGestionnaire",
| query= "FROM Commentaire " +
| "WHERE gestionnaire = :gestionnaire"),
| @NamedQuery(name="commentaire.findByMouvement",
| query= "FROM Commentaire " +
| "WHERE annee = :annee AND journal.idJournal = :idJournal AND chrono = :chrono")
|
| })
| @Entity
| @IdClass(CommentairePk.class)
| @Table(name="SCHEMA.COMMENTAIRE")
| public class Commentaire implements Serializable {
| private static final long serialVersionUID = -2679761258372320963L;
|
| private String annee;
| private Journal journal;
| private int chrono;
| private String gestionnaire;
| private Date date;
| private String commentaire;
| private Boolean actif;
| private SysInfo sysInfo;
|
| @Id
| public String getAnnee() {
| return annee;
| }
| public void setAnnee(String annee) {
| this.annee = annee;
| }
|
| @ManyToOne(cascade={CascadeType.ALL})
| @JoinColumn(name="IDJOURNAL")
| @Id
| public Journal getJournal() {
| return journal;
| }
| public void setJournal(Journal journal) {
| this.journal = journal;
| }
|
| @Id
| public int getChrono() {
| return chrono;
| }
| public void setChrono(int chrono) {
| this.chrono = chrono;
| }
|
| @Id
| public String getGestionnaire() {
| return gestionnaire;
| }
| public void setGestionnaire(String gestionnaire) {
| this.gestionnaire = gestionnaire;
| }
|
| @Id
| public Date getDate() {
| return date;
| }
| public void setDate(Date date) {
| this.date = date;
| }
|
| ....
| }
|
But when I launch my test on this entity, I have this exception :
org.hibernate.QueryException: could not resolve property: idJournal
When I remove journal from the primary key, it's all right.
Someone has a solution ?
Thank you
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4076892#4076892
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4076892
18Â years, 8Â months
[JBoss jBPM] - Help to implement an Approval Business Process
by JeanGuyer
Hello,
I am not speak english well , so i might be unclear.
I have an issue to make a business process with jbpm , and i need help to build this one . The business process is an approval process , it needs the approval of each users involved , or the reject of just one of them.
The process is based on an object of real world. Based on the nature of the object , the process may involve multiples users.
the process run like this :
Start process
Object is nature 1 , so we need user1 and user2 (we may use an ActionHandler to do this)
user1 and user2 receive an assignment on their tasklist at the same time.
each one must approve the object , if one of them refuse the object , process is terminated and the business state is "DENIED" , if the two of them approve , the process is terminated and the business state is "APPROVED"
Same with a different object nature :
Start process
Object is nature 2 , so we need user3, user2, user6
user3, user2, user6 receive an assignement on their tasklist at the same time.
each one must approve the object , if one of them refuse the object , process is terminated and the business state is "DENIED" , if the three of them approve, the process is terminated and the business state is "APPROVED".
All the instances of those process must be linked to one process instance. I don't want to have as many processes definitions as i have object natures.
Every tips , jpdl , java code will be appreciated.
Regards,
Jean Guyer
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4076888#4076888
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4076888
18Â years, 8Â months
[JBoss Portal] - Re: Is there any way to force a user login when portal is ac
by saigon_man
Hello,
I am using jboss portal 2.6.1
I followed the instruction mentioned below to force a login page but some thing doesn't quite work well.
anonymous wrote :
| By default JBoss Portal will display whatever welcome page is configured even if a user is not logged in. This page details what needs to be done in order to force the display of the login page if a user is not logged in if this behavior is desired. These instructions refer to JBoss Portal 2.0.
|
| The steps are the following:
|
| * Edit web.xml in jboss-portal.sar/portal-server.war/WEB-INF
| o Change the first security constraint from <url-pattern>/auth/*</url-pattern> to <url-pattern>/*</url-pattern>. This will force the display of the login page mentioned in the <login-config> section of the web.xml (FORM authentication is assumed).
| o Change the <form-error-page> in the <login-config> section of web.xml to point to an error page that is going to be displayed when authentication fails. Let's say that page is called badlogin.jsp. You would have then <form-error-page>/badlogin.jsp</form-error-page>.
| o Add a new servlet mapping to web.xml. This should look like:
| <servlet-mapping>
| <servlet-name>jsp</servlet-name>
| <url-pattern>/badlogin.jsp</url-pattern>
| </servlet-mapping>
|
| * Edit jboss-portal.sar/portal-server.war/login.jsp and submit the login form to /portal/j_security_check instead of j_security_check. This is not compliant with the servlet specification but it works. You would also have to change this if the root context of the portal is changed (replace portal in the string above with whatever root context you are running your portal under).
|
I created few pages and followed the steps mentioned above. When I log in, I can see all of the pages that I created with the default page as the active page in that portal. When I click on the next page, the portal does not display the content of that page. Instead, it displayed the content of the default page, even though I can see the url is pointing to the page that I just clicked on in the url location of IE 6
Do I miss something here or do I need to modify something else in that web.xml?
Thanks,
TL
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4076886#4076886
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4076886
18Â years, 8Â months
[JBoss jBPM] - Re: Transiton Condition evaluated to 'false
by bephinney
anonymous wrote :
| SEVERE: Servlet.service() for servlet default threw exception
| org.jbpm.JbpmException: transition condition #{taskTrans == 't1'} evaluated to 'false'
| at org.jbpm.graph.def.Transition.take(Transition.java:125)
| at org.jbpm.graph.def.Node.leave(Node.java:393)
| at org.jbpm.graph.node.TaskNode.leave(TaskNode.java:209)
| at org.jbpm.graph.def.Node.leave(Node.java:357)
| at org.jbpm.graph.node.TaskNode.execute(TaskNode.java:190)
| at org.jbpm.graph.def.Node.enter(Node.java:318)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
| at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$a4d35c1d.enter()
| at org.jbpm.graph.def.Transition.take(Transition.java:151)
| at org.jbpm.graph.def.Node.leave(Node.java:393)
| at org.jbpm.graph.exe.ExecutionContext.leaveNode(ExecutionContext.java:136)
| at org.jbpm.graph.node.Decision.execute(Decision.java:152)
| at org.jbpm.graph.def.Node.enter(Node.java:318)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
| at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$a4d35c1d.enter()
| at org.jbpm.graph.def.Transition.take(Transition.java:151)
| at org.jbpm.graph.def.Node.leave(Node.java:393)
| at org.jbpm.graph.def.Node.leave(Node.java:357)
| at org.jbpm.graph.def.Node.execute(Node.java:349)
| at org.jbpm.graph.def.Node.enter(Node.java:318)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
| at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$a4d35c1d.enter()
| at org.jbpm.graph.def.Transition.take(Transition.java:151)
| at org.jbpm.graph.def.Node.leave(Node.java:393)
| at org.jbpm.graph.node.StartState.leave(StartState.java:70)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
| at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$a4d35c1d.leave()
| at org.jbpm.graph.exe.Token.signal(Token.java:194)
| at org.jbpm.graph.exe.Token.signal(Token.java:139)
| at org.jbpm.graph.exe.ProcessInstance.signal(ProcessInstance.java:270)
| at com.caps.bp.agent.jbpm.JbpmProcessAgent.newProcessInstance(JbpmProcessAgent.java:58)
| at com.caps.bp.adapter.ProcessAdapter.newProcessInstance(ProcessAdapter.java:30)
| at com.caps.struts.action.ProcessAction.newProcessInstance(ProcessAction.java:43)
| at com.caps.struts.action.ProcessAction.execute(ProcessAction.java:32)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:399)
| at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:262)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:224)
| at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:213)
| at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
| at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
| at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.opensymphony.xwork2.interceptor.ParametersInterceptor.intercept(ParametersInterceptor.java:161)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.opensymphony.xwork2.interceptor.PrepareInterceptor.intercept(PrepareInterceptor.java:115)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.caps.struts.JbpmContextHandlerInterceptor.intercept(JbpmContextHandlerInterceptor.java:58)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at com.caps.struts.PageNameInterceptor.intercept(PageNameInterceptor.java:32)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
| at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
| at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
| at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
| at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
| at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:507)
| at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)
| 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:230)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
| at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
| at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
| at java.lang.Thread.run(Thread.java:619)
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4076885#4076885
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4076885
18Â years, 8Â months