on 09-05-2008 7:22 PM
My WebDynpro App has the following structur :
WebDynproApp.ear
contains
WebDynproApp.war
contains
WEB-INF
contains
web.xml
lib
lib conains
dbaccess.jar ( contains the Entitys )
facade.jar ( executes the jndi-lookup for getting an EntityManager-Proxy Instance )
....
Note :
I dont' wanna use EJB's for persisting Entity-State.
Instead I use "Simple Java Classes", that are packed in the facade.jar
The Question is :
Where is the proper location for the persistence.xml inside the WebDynproApp.war
Locke
First, welcome to SDN, Locke!
As per section 6.2 of the JPA 1.0 specification, in the web app case a persistence.xml must be made available either in the WEB-INF/classes/META-INF directory of the WAR file or in the META-INF directory of a jar file in the WEB-INF/lib directory.
Furthermore, section 6.2.1 mandates that if the managed persistence classes are not contained in the root of the persistence unit (i.e. WEB-INF/classes or the jar file in WEB-INF/lib, respectively), they be exlicitly referenced in the persistence.xml or one of the object/relational mapping XML files. See also section 6.2.1.6.
Now, in your case the most straightforward solution would be to place the persistence.xml in the META-INF of dbaccess.jar. Try it out and let me know of any issues you faced with that approach (what exactly does not work?).
HTH!
\-- Vladimir
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Vladimir,
i think that it is impossible to use JPA within a WebDynpro Application without using EJBs.
I read the JPA Spec before I opened the Thread and I tested all possible locations of the persistence.xml file.
I put it into the WEB-INF/lib/${webdypro.jar}/META-INF.
Then I tested it with WEB-INF/classes/META-INF.
The third test was to put it into the ${dbaccess.jar}/META-INF , but everthing without success!
The Spec also says , that the scope of a Persistence Unit(s) is just limited to the JEE-Component which contains the persistence.xml in the corresponding Directory or jar.
That means, if the persistence.xml is packaged in a .war-file(WEB/lib or WEB-INF/classes/META-INF) the scope is just limited to the JEE-Components(Servlet/JSP/JSF) of this .war-file .
But if the persistence.xml is placed in a jar, which is at the root of an 'ear' or in the library-directory of the ear, the Persistence Unit(s) can be used by all JEE Components of that ear (ejb-jar or .war).
How can i put a .jar file (not an ejb.jar) into the root of a WebDynpro.ear ?
The big problem is that the .ear of the WebDynpro Developement Component will be generated by the Developer Studio.
And there is no access to the application.xml for using the 'module-tag'!
Note :
the Application is definitely deployed and startet ! A NameNotFoundException will be thrown, when the jndi-Name of the EntityManager-Proxy is wrong.But
the NamingException corresponds to the Persistence Unit, which won't be found by the Persistence Provider.
The web.xml has the following content :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">;
<persistence-context-ref>
<persistence-context-ref-name>persistence/WebDynpro</persistence-context-ref-name>
<persistence-unit-name>TestJPA</persistence-unit-name>
</persistence-context-ref></web-app>
Each testcase ends with following exception:
java.lang.RuntimeException: com.sap.engine.services.jndi.persistent.exceptions.NamingException: Exception during lookup operation of object with name webContainer/applications/vmtubes.de/ratestwd/webdynpro/resources/vmtubes.de/ratestwd/java:comp/env/persistence/WebDynpro, cannot resolve object reference. [Root exception is com.sap.engine.services.orpersistence.container.exceptions.ResourceException: Application 'vmtubes.de/ratestwd' is not deployed, not started or doesn't contain persistence units.]
at de.vmtubes.ra.test.wd.vmratestwd.VMRaTestWD.check(VMRaTestWD.java:241)
at de.vmtubes.ra.test.wd.vmratestwd.wdp.InternalVMRaTestWD.check(InternalVMRaTestWD.java:138)
at de.vmtubes.ra.test.wd.vmratestwd.VMRaTestWDView.onActionCheck(VMRaTestWDView.java:190)
at de.vmtubes.ra.test.wd.vmratestwd.wdp.InternalVMRaTestWDView.wdInvokeEventHandler(InternalVMRaTestWDView.java:128)
at com.sap.tc.webdynpro.progmodel.generation.DelegatingView.invokeEventHandler(DelegatingView.java:131)
at com.sap.tc.webdynpro.progmodel.controller.Action.fire(Action.java:72)
at com.sap.tc.webdynpro.clientserver.phases.ProcessingEventPhase.doHandleActionEvent(ProcessingEventPhase.java:156)
at com.sap.tc.webdynpro.clientserver.phases.ProcessingEventPhase.execute(ProcessingEventPhase.java:91)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequestPartly(WindowPhaseModel.java:161)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.doProcessRequest(WindowPhaseModel.java:109)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequest(WindowPhaseModel.java:96)
at com.sap.tc.webdynpro.clientserver.window.WebDynproWindow.processRequest(WebDynproWindow.java:469)
at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:52)
at com.sap.tc.webdynpro.clientserver.cal.ClientApplication.doExecute(ClientApplication.java:1431)
at com.sap.tc.webdynpro.clientserver.cal.ClientApplication.doProcessing(ClientApplication.java:1251)
at com.sap.tc.webdynpro.serverimpl.core.sessionctx.AbstractExecutionContextDispatcher.delegateToApplicationDoProcessing(AbstractExecutionContextDispatcher.java:158)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.DispatchHandlerForAppProcessing.doService(DispatchHandlerForAppProcessing.java:35)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.AbstractDispatchHandler.service(AbstractDispatchHandler.java:116)
at com.sap.engine.services.servlets_jsp.server.deploy.impl.module.IRequestDispatcherImpl.dispatch(IRequestDispatcherImpl.java:93)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.ExecutionContextDispatcher.dispatchToApplicationDoProcessing(ExecutionContextDispatcher.java:114)
at com.sap.tc.webdynpro.serverimpl.core.sessionctx.AbstractExecutionContextDispatcher.dispatch(AbstractExecutionContextDispatcher.java:81)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.dispatch(ApplicationSession.java:507)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.dispatch(ApplicationSession.java:527)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doApplicationProcessingStandalone(ApplicationSession.java:458)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doProcessing(ApplicationSession.java:249)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessing(ClientSession.java:699)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doProcessing(ClientSession.java:231)
at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:231)
at com.sap.tc.webdynpro.serverimpl.core.sessionctx.AbstractExecutionContextDispatcher.delegateToRequestManager(AbstractExecutionContextDispatcher.java:205)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.DispatchHandlerForRequestManager.doService(DispatchHandlerForRequestManager.java:38)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.AbstractDispatchHandler.service(AbstractDispatchHandler.java:116)
at com.sap.engine.services.servlets_jsp.server.deploy.impl.module.IRequestDispatcherImpl.dispatch(IRequestDispatcherImpl.java:93)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.ExecutionContextDispatcher.dispatchToRequestManager(ExecutionContextDispatcher.java:140)
at com.sap.tc.webdynpro.serverimpl.core.sessionctx.AbstractExecutionContextDispatcher.dispatch(AbstractExecutionContextDispatcher.java:93)
at com.sap.tc.webdynpro.serverimpl.core.sessionctx.AbstractExecutionContextDispatcher.dispatch(AbstractExecutionContextDispatcher.java:105)
at com.sap.tc.webdynpro.serverimpl.core.AbstractDispatcherServlet.doContent(AbstractDispatcherServlet.java:87)
at com.sap.tc.webdynpro.serverimpl.core.AbstractDispatcherServlet.doPost(AbstractDispatcherServlet.java:61)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:66)
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:32)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:431)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:289)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:387)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:376)
at com.sap.engine.services.servlets_jsp.filters.ServletSelector.process(ServletSelector.java:85)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.servlets_jsp.filters.ApplicationSelector.process(ApplicationSelector.java:160)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.httpserver.filters.WebContainerInvoker.process(WebContainerInvoker.java:67)
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.httpserver.filters.ResponseLogWriter.process(ResponseLogWriter.java:60)
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.httpserver.filters.DefineHostFilter.process(DefineHostFilter.java:27)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.httpserver.filters.MonitoringFilter.process(MonitoringFilter.java:29)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.httpserver.server.Processor.chainedRequest(Processor.java:309)
at com.sap.engine.services.httpserver.server.Processor$FCAProcessorThread.run(Processor.java:222)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(Native Method)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:152)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:247)
Caused by: com.sap.engine.services.jndi.persistent.exceptions.NamingException: Exception during lookup operation of object with name webContainer/applications/vmtubes.de/ratestwd/webdynpro/resources/vmtubes.de/ratestwd/java:comp/env/persistence/WebDynpro, cannot resolve object reference. [Root exception is com.sap.engine.services.orpersistence.container.exceptions.ResourceException: Application 'vmtubes.de/ratestwd' is not deployed, not started or doesn't contain persistence units.]
at com.sap.engine.services.jndi.implclient.ClientContext.lookup(ClientContext.java:528)
at com.sap.engine.services.jndi.implclient.OffsetClientContext.lookup(OffsetClientContext.java:266)
at com.sap.engine.services.jndi.implclient.OffsetClientContext.lookup(OffsetClientContext.java:286)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at de.vmtubes.ra.test.wd.vmratestwd.VMRaTestWD.check(VMRaTestWD.java:237)
... 66 more
Caused by: com.sap.engine.services.orpersistence.container.exceptions.ResourceException: Application 'vmtubes.de/ratestwd' is not deployed, not started or doesn't contain persistence units.
at com.sap.engine.services.orpersistence.container.ORPersistenceObjectFactory.getApplication(ORPersistenceObjectFactory.java:192)
at com.sap.engine.services.orpersistence.container.ORPersistenceObjectFactory.getObjectInstance(ORPersistenceObjectFactory.java:58)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:283)
at com.sap.engine.services.jndi.implclient.ClientContext.lookup(ClientContext.java:413)
... 71 more
Locke
Hi Vladimir,
same problem when moving the jndi-lookup into the wdDoInit.
following exception:
com.sap.tc.webdynpro.services.exceptions.WDRuntimeException: Exception was thrown in preprocessing phase of application session ApplicationSession(name=testapp.TestApp, id=54b7d0217e3211dda0a70016d49f6c71). The causing exception is nested. RID=54b2ee207e3211dd81fc0016d49f6c71
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doPreprocessing(ClientSession.java:650)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doProcessing(ClientSession.java:225)
at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:231)
at com.sap.tc.webdynpro.serverimpl.core.sessionctx.AbstractExecutionContextDispatcher.delegateToRequestManager(AbstractExecutionContextDispatcher.java:205)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.DispatchHandlerForRequestManager.doService(DispatchHandlerForRequestManager.java:38)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.AbstractDispatchHandler.service(AbstractDispatchHandler.java:116)
at com.sap.engine.services.servlets_jsp.server.deploy.impl.module.IRequestDispatcherImpl.dispatch(IRequestDispatcherImpl.java:93)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.ExecutionContextDispatcher.dispatchToRequestManager(ExecutionContextDispatcher.java:140)
at com.sap.tc.webdynpro.serverimpl.core.sessionctx.AbstractExecutionContextDispatcher.dispatch(AbstractExecutionContextDispatcher.java:93)
at com.sap.tc.webdynpro.serverimpl.core.sessionctx.AbstractExecutionContextDispatcher.dispatch(AbstractExecutionContextDispatcher.java:105)
at com.sap.tc.webdynpro.serverimpl.core.AbstractDispatcherServlet.doContent(AbstractDispatcherServlet.java:87)
at com.sap.tc.webdynpro.serverimpl.core.AbstractDispatcherServlet.doGet(AbstractDispatcherServlet.java:54)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:66)
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:32)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:431)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:289)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:387)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:376)
at com.sap.engine.services.servlets_jsp.filters.ServletSelector.process(ServletSelector.java:85)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.servlets_jsp.filters.ApplicationSelector.process(ApplicationSelector.java:160)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.httpserver.filters.WebContainerInvoker.process(WebContainerInvoker.java:67)
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.httpserver.filters.ResponseLogWriter.process(ResponseLogWriter.java:60)
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.httpserver.filters.DefineHostFilter.process(DefineHostFilter.java:27)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.httpserver.filters.MonitoringFilter.process(MonitoringFilter.java:29)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71)
at com.sap.engine.services.httpserver.server.Processor.chainedRequest(Processor.java:309)
at com.sap.engine.services.httpserver.server.Processor$FCAProcessorThread.run(Processor.java:222)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(Native Method)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:152)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:247)
Caused by: java.lang.RuntimeException: com.sap.engine.services.jndi.persistent.exceptions.NamingException: Exception during lookup operation of object with name webContainer/applications/vmtubes.de/ratestwdwithoutejb/webdynpro/resources/vmtubes.de/ratestwdwithoutejb/java:comp/env/persistence/withoutejb, cannot resolve object reference. [Root exception is com.sap.engine.services.orpersistence.container.exceptions.ResourceException: Application 'vmtubes.de/ratestwdwithoutejb' is not deployed, not started or doesn't contain persistence units.]
at vm.ra.test.wd.withoutejb.VMRaTestWDWithoutEJB.wdDoInit(VMRaTestWDWithoutEJB.java:116)
at vm.ra.test.wd.withoutejb.wdp.InternalVMRaTestWDWithoutEJB.wdDoInit(InternalVMRaTestWDWithoutEJB.java:105)
at com.sap.tc.webdynpro.progmodel.generation.DelegatingComponent.doInit(DelegatingComponent.java:160)
at com.sap.tc.webdynpro.progmodel.controller.Controller.initController(Controller.java:230)
at com.sap.tc.webdynpro.progmodel.components.Component.initController(Component.java:249)
at com.sap.tc.webdynpro.progmodel.controller.Controller.init(Controller.java:209)
at com.sap.tc.webdynpro.clientserver.cal.ClientApplication.init(ClientApplication.java:513)
at com.sap.tc.webdynpro.clientserver.cal.ClientApplication.doPreprocessing(ClientApplication.java:1228)
at com.sap.tc.webdynpro.serverimpl.core.sessionctx.AbstractExecutionContextDispatcher.delegateToApplicationDoPreprocessing(AbstractExecutionContextDispatcher.java:150)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.DispatchHandlerForAppPreprocessing.doService(DispatchHandlerForAppPreprocessing.java:35)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.AbstractDispatchHandler.service(AbstractDispatchHandler.java:116)
at com.sap.engine.services.servlets_jsp.server.deploy.impl.module.IRequestDispatcherImpl.dispatch(IRequestDispatcherImpl.java:93)
at com.sap.tc.webdynpro.serverimpl.wdc.sessionctx.ExecutionContextDispatcher.dispatchToApplicationDoPreprocessing(ExecutionContextDispatcher.java:100)
at com.sap.tc.webdynpro.serverimpl.core.sessionctx.AbstractExecutionContextDispatcher.dispatch(AbstractExecutionContextDispatcher.java:75)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.dispatch(ApplicationSession.java:507)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.dispatch(ApplicationSession.java:527)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doPreprocessing(ApplicationSession.java:233)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doPreprocessing(ClientSession.java:647)
... 41 more
Caused by: com.sap.engine.services.jndi.persistent.exceptions.NamingException: Exception during lookup operation of object with name webContainer/applications/vmtubes.de/ratestwdwithoutejb/webdynpro/resources/vmtubes.de/ratestwdwithoutejb/java:comp/env/persistence/withoutejb, cannot resolve object reference. [Root exception is com.sap.engine.services.orpersistence.container.exceptions.ResourceException: Application 'vmtubes.de/ratestwdwithoutejb' is not deployed, not started or doesn't contain persistence units.]
at com.sap.engine.services.jndi.implclient.ClientContext.lookup(ClientContext.java:528)
at com.sap.engine.services.jndi.implclient.OffsetClientContext.lookup(OffsetClientContext.java:266)
at com.sap.engine.services.jndi.implclient.OffsetClientContext.lookup(OffsetClientContext.java:286)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at vm.ra.test.wd.withoutejb.VMRaTestWDWithoutEJB.wdDoInit(VMRaTestWDWithoutEJB.java:114)
... 58 more
Caused by: com.sap.engine.services.orpersistence.container.exceptions.ResourceException: Application 'vmtubes.de/ratestwdwithoutejb' is not deployed, not started or doesn't contain persistence units.
at com.sap.engine.services.orpersistence.container.ORPersistenceObjectFactory.getApplication(ORPersistenceObjectFactory.java:192)
at com.sap.engine.services.orpersistence.container.ORPersistenceObjectFactory.getObjectInstance(ORPersistenceObjectFactory.java:58)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:283)
at com.sap.engine.services.jndi.implclient.ClientContext.lookup(ClientContext.java:413)
... 63 more
Locke
I use NetWeaver CE 7.1 SP5 and here the content of the application.xml.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
<application>
<display-name>ratestwdwithoutejb</display-name>
<description>Application description</description>
<module>
<web>
<web-uri>vmtubes.deratestwdwithout~ejb.war</web-uri>
<context-root>
webdynpro/resources/vmtubes.de/ratestwdwithoutejb
</context-root>
</web>
</module>
</application>
Oh yeah, this explains it all
Since the app is J2EE 1.3, persistence units are not being processed (hence, even putting it in the EAR root would not help).
I believe this has been changed in the newer versions, but I'll have to confirm with the WD guys. I'll update you when I have some info.
Cheers,
\-- Vladimir
User | Count |
---|---|
88 | |
10 | |
10 | |
9 | |
7 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.