Hi Anthonin, A) If my memory hasn't failed me, a DEFERRABLE/INITIALLY DEFERRED constraint is checked at the END (commit) of the transaction instead of each statement as it happens. The constraint check still happens...just deferred. If there is a constraint error at the end, Oracle will roll back the transaction and you'll get an error/exception in your code.
B) I don't think your custom PK generator will cause your current issue. Unless, of course, there is a bug. :-) It certainly can be annoying to set the sequence name/size for each entity, so I understand wanting to avoid that. mrg On Fri, Nov 5, 2021 at 11:09 AM Lize Anthonin (OceanOPS) <al...@groupcls.com> wrote: > Hi Michael, > > A) I'll look into that, I have to check the potential implications first. > I wanted to find an applicative work around before touching the DB. But > thanks, that would solve it indeed. > B) Just to define the sequence pattern. The default Oracle PK generator > uses sequence like 'PK_<TABLE_NAME>'. All my sequences are like > '<TABLE_NAME>_SEQ'. Since my model contains a lot of entities, I extended > the OraclePkGenerator to modify the sequence naming, it was faster to > implement. Do you think that could impact this? If so, I'll spend some time > defining the custom sequences. I'll try on the few entities I'm working on. > > anthonin > > -----Original Message----- > From: Michael Gentry <blackn...@gmail.com> > Sent: Friday, November 5, 2021 2:25 PM > To: Cayenne Users <user@cayenne.apache.org> > Subject: Re: Insertion order issue > > CAUTION: This message comes from an external server, do not click on links > or open attachments unless you know the sender and are sure the content is > safe. > > > Hi Anthonin, > > A) Since you are using Oracle, you may need to use a DEFERRABLE constraint > (INITIALLY DEFERRED). > > B) Any reason you are using a custom PK generator instead of using the > standard sequence generator supported by Cayenne? (Cayenne Modeler -> > select DB Entity -> PK Generation Strategy -> Custom Sequence -> enter > Sequence Name and Cache Size -- looks like you are using 1). > > mrg > > > On Fri, Nov 5, 2021 at 5:44 AM Lize Anthonin (OceanOPS) < > al...@groupcls.com> > wrote: > > > Hi Michael, > > > > Thanks for your answer. > > I tried, but does not seem to make any difference. I added > > WeightedAshwoodEntitySorter (amongst other things) in a module loaded > > as init-param for the CayenneFilter, as follows: > > @Override > > public void configure(Binder binder) { > > binder.bind(RequestHandler.class) > > .to(StatelessContextRequestHandler.class) > > .withoutScope(); > > > > OraclePkGeneratorCustom pkgen = new > OraclePkGeneratorCustom(); > > pkgen.setPkCacheSize(1); > > binder.bind(PkGenerator.class).toInstance(pkgen); > > > > > > binder.bind(EntitySorter.class).to(WeightedAshwoodEntitySorter.class); > > } > > > > And then the annotation as you mentioned on the child entity. It still > > stays rather random... > > > > > > Here is the stack trace, as you can see I use Cayenne 4.2.M3. That > > would have been smarter of me to share it initially! > > java.sql.SQLIntegrityConstraintViolationException: ORA-02291: > > integrity constraint (JCOMMOPS_B.PTF_HARDWARE_FK) violated - parent > > key not found > > > > at > > oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:509) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:461) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1104) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:553) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:269) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:655) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.j > > ava:270) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.j > > ava:91) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStat > > ement.java:970) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatemen > > t.java:1205) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePrepa > > redStatement.java:3666) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedSta > > tement.java:1426) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > oracle.jdbc.driver.OraclePreparedStatement.executeLargeUpdate(OraclePr > > eparedStatement.java:3756) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePrepare > > dStatement.java:3736) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(Oracle > > PreparedStatementWrapper.java:1063) > > ~[ojdbc10-19.12.0.0.jar:19.12.0.0.0] > > at > > org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate > > (DelegatingPreparedStatement.java:136) > > ~[tomcat-dbcp.jar:9.0.40] > > at > > org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate > > (DelegatingPreparedStatement.java:136) > > ~[tomcat-dbcp.jar:9.0.40] > > at > > org.apache.cayenne.access.jdbc.BatchAction.runAsIndividualQueries(Batc > > hAction.java:185) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.jdbc.BatchAction.performAction(BatchAction.j > > ava:96) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAc > > tion.java:97) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.flush.DefaultDataDomainFlushAction.lambda$ex > > ecuteQueries$6(DefaultDataDomainFlushAction.java:177) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at java.util.HashMap.forEach(HashMap.java:1425) ~[?:?] > > at > > org.apache.cayenne.access.flush.DefaultDataDomainFlushAction.executeQu > > eries(DefaultDataDomainFlushAction.java:176) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.flush.DefaultDataDomainFlushAction.flush(Def > > aultDataDomainFlushAction.java:89) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:637) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.DataDomain.onSyncNoFilters(DataDomain.java:6 > > 09) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync( > > DataDomain.java:835) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.tx.TransactionFilter.lambda$onSync$0(TransactionFil > > ter.java:61) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler > > .performInTransaction(DefaultTransactionManager.java:180) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler > > .performInNewTransaction(DefaultTransactionManager.java:152) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.tx.DefaultTransactionManager$NestedTransactionHandl > > er.handle(DefaultTransactionManager.java:95) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(D > > efaultTransactionManager.java:62) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(D > > efaultTransactionManager.java:40) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.tx.TransactionFilter.onSync(TransactionFilter.java: > > 61) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync( > > DataDomain.java:834) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:596) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:7 > > 37) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:6 > > 86) > > ~[cayenne-server-4.2.M3.jar:4.2.M3] > > at > > org.oceanops.api.id.IdGenerator.commitChanges(IdGenerator.java:47) > > ~[classes/:?] > > at > > org.oceanops.api.id.WebServiceManager.getID(WebServiceManager.java:56) > > ~[classes/:?] > > at > > jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > > Method) ~[?:?] > > at > > jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcces > > sorImpl.java:62) > > ~[?:?] > > at > > jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet > > hodAccessorImpl.java:43) > > ~[?:?] > > at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?] > > at > > org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHan > > dlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.jav > > a:52) > > ~[jersey-server-2.35.jar:?] > > at > > org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodD > > ispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124) > > [jersey-server-2.35.jar:?] > > at > > org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodD > > ispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167) > > [jersey-server-2.35.jar:?] > > at > > org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatche > > rProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvid > > er.java:219) > > [jersey-server-2.35.jar:?] > > at > > org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodD > > ispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79) > > [jersey-server-2.35.jar:?] > > at > > org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(Resourc > > eMethodInvoker.java:475) > > [jersey-server-2.35.jar:?] > > at > > org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(Resource > > MethodInvoker.java:397) > > [jersey-server-2.35.jar:?] > > at > > org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(Resource > > MethodInvoker.java:81) > > [jersey-server-2.35.jar:?] > > at > > org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:255 > > ) > > [jersey-server-2.35.jar:?] > > at > > org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) > > [jersey-common-2.35.jar:?] > > at > > org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) > > [jersey-common-2.35.jar:?] > > at > > org.glassfish.jersey.internal.Errors.process(Errors.java:292) > > [jersey-common-2.35.jar:?] > > at > > org.glassfish.jersey.internal.Errors.process(Errors.java:274) > > [jersey-common-2.35.jar:?] > > at > > org.glassfish.jersey.internal.Errors.process(Errors.java:244) > > [jersey-common-2.35.jar:?] > > at > > org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestS > > cope.java:265) > > [jersey-common-2.35.jar:?] > > at > > org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:2 > > 34) > > [jersey-server-2.35.jar:?] > > at > > org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandl > > er.java:684) > > [jersey-server-2.35.jar:?] > > at > > org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.jav > > a:394) [jersey-container-servlet-core-2.35.jar:?] > > at > > org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:34 > > 6) [jersey-container-servlet-core-2.35.jar:?] > > at > > org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer > > .java:366) > > [jersey-contain[apache-tomcat-9.0.40]: er-servlet-core-2.35.jar:?] > > at > > org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer > > .java:319) [jersey-container-servlet-core-2.35.jar:?] > > at > > org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer > > .java:205) [jersey-container-servlet-core-2.35.jar:?] > > at > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli > > cationFilterChain.java:231) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi > > lterChain.java:166) > > [catalina.jar:9.0.40] > > at > > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) > > [tomcat-websocket.jar:9.0.40] > > at > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli > > cationFilterChain.java:193) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi > > lterChain.java:166) > > [catalina.jar:9.0.40] > > at > > org.oceanops.api.filters.AuthFilter.doFilter(AuthFilter.java:40) > > [api-1.3-SNAPSHOT-classes.jar:?] > > at > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli > > cationFilterChain.java:193) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi > > lterChain.java:166) > > [catalina.jar:9.0.40] > > at > > org.apache.cayenne.configuration.web.CayenneFilter.doFilter(CayenneFil > > ter.java:127) > > [cayenne-web-4.2.M3.jar:4.2.M3] > > at > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli > > cationFilterChain.java:193) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi > > lterChain.java:166) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa > > lve.java:202) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa > > lve.java:97) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticat > > orBase.java:542) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja > > va:143) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja > > va:92) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAcces > > sLogValve.java:690) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValv > > e.java:78) > > [catalina.jar:9.0.40] > > at > > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java > > :343) > > [catalina.jar:9.0.40] > > at > > org.apache.coyote.http11.Http11Processor.service(Http11Processor.java: > > 374) > > [tomcat-coyote.jar:9.0.40] > > at > > org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLigh > > t.java:65) > > [tomcat-coyote.jar:9.0.40] > > at > > org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractP > > rotocol.java:880) > > [tomcat-coyote.jar:9.0.40] > > at > > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoi > > nt.java:1601) > > [tomcat-coyote.jar:9.0.40] > > at > > org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase > > .java:49) > > [tomcat-coyote.jar:9.0.40] > > at > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.j > > ava:1130) > > [?:?] > > at > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor. > > java:630) > > [?:?] > > at > > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThr > > ead.java:61) > > [tomcat-util.jar:9.0.40] > > at java.lang.Thread.run(Thread.java:832) [?:?] Caused by: > > oracle.jdbc.OracleDatabaseException: ORA-02291: integrity constraint > > (JCOMMOPS_B.PTF_HARDWARE_FK) violated - parent key not found > > > > > > > > -----Original Message----- > > From: Michael Gentry <blackn...@gmail.com> > > Sent: Thursday, November 4, 2021 7:28 PM > > To: Cayenne Users <user@cayenne.apache.org> > > Subject: Re: Insertion order issue > > > > CAUTION: This message comes from an external server, do not click on > > links or open attachments unless you know the sender and are sure the > > content is safe. > > > > > > Hi Anthonin, > > > > Perhaps put a @SortWeight(2) annotation [1] on your child entity? > > Also, you need to configure a different entity sorter: > > > > // Need WeightedAshwoodEntitySorter for @SortWeight to work. > > Module entitySorterModule = (binder) -> > > binder.bind(EntitySorter.class).to(WeightedAshwoodEntitySorter.class); > > ServerRuntime runtime = > > ServerRuntimeBuilder.builder().addModule(myModule).... > > > > If this doesn't help, please provide a stack track and Cayenne version > > information. > > > > Thanks! > > > > mrg > > > > > > [1] > > > > https://cayenne.apache.org/docs/4.0/api/org/apache/cayenne/ashwood/Sor > > tWeight.html > > > > > > On Thu, Nov 4, 2021 at 10:38 AM Lize Anthonin (OceanOPS) < > > al...@groupcls.com> > > wrote: > > > > > Hi, > > > > > > I am using Cayenne in a web app (through AgRest, but this is purely > > > cayenne related, well I think so) that contains one service through > > > a POST method. > > > Basically, I submit a JSON body with multiple object in it, pass it > > > through the service method defined below, process each object and > > > for each ones doing some insert into an Oracle DB. > > > @POST > > > @Consumes(MediaType.APPLICATION_JSON) > > > @Path("getid") > > > @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") public > > > List<IdResponse> getID(final List<IdInput> inputs) { > > > There I loop over this list, process the object > > > IdInput and make the necessary insertions } > > > > > > My issue there is that when I commit the changes, the order of the > > > inserts seems to fail randomly, from one request to another. I have > > > relationships set in those modifications, and through the logs I can > > > see the PK being fetched from the sequences, but then sometimes > > > (most of the times) the referencing entity is inserted before the > > > referenced entity. And of course the commit fail for violation of > parent key. > > > > > > I've tried to secure as much as possible the context, through > > > different > > > ways: > > > > > > * stateless thread context through the provided cayenne filter > > > (stateless because the session one would be committed via another > > > commit made in another filter, weird, but I send only one request, > > > this filter commit should happen prior to the 'service' commit) > > > * per method context > > > * custom stateless context through a filter that I made myself. > > > I thought I got it with he per method context, but it failed after a > > while. > > > And I tried committing after each processing in the loop, or after > > > the loop, but same results. > > > > > > I'm probably missing something, but I'm not getting why it happen > > > sometimes, not always(or never!). A threading issue maybe? But I'm > > > processing only one request, so I'm a bit lost. > > > Any thoughts? (before I commit after each insertion of entities > > > haha) How the order of inserts are defined? Maybe I miss-configured > > > some relationships in the modeler, but they come from a reverse > > > engineering and look ok... > > > > > > Many thanks in advance > > > Anthonin > > > ________________________________ > > > > > > Ce message et toutes les pi?ces jointes (ci-apr?s le "message") sont > > > ?tablis ? l'intention exclusive de ses destinataires et sont > > confidentiels. > > > Si vous recevez ce message par erreur ou s'il ne vous est pas > > > destin?, merci de le d?truire ainsi que toute copie de votre syst?me > > > et d'en avertir imm?diatement l'exp?diteur. Toute lecture non > > > autoris?e, toute utilisation de ce message qui n'est pas conforme ? > > > sa destination, toute diffusion ou toute publication, totale ou > > > partielle, est interdite. L'Internet ne permettant pas d'assurer > > > l'int?grit? de ce message ?lectronique susceptible d'alt?ration, > > > l'exp?diteur (et ses > > > filiales) d?cline(nt) toute responsabilit? au titre de ce message > > > dans > > l'hypoth?se o? il aurait ?t? > > > modifi? ou falsifi?. > > > > > > This message and any attachments (the "message") is intended solely > > > for the intended recipient(s) and is confidential. If you receive > > > this message in error, or are not the intended recipient(s), please > > > delete it and any copies from your systems and immediately notify the > sender. > > > Any unauthorized view, use that does not comply with its purpose, > > > dissemination or disclosure, either whole or partial, is prohibited. > > > Since the internet cannot guarantee the integrity of this message > > > which may not be reliable, the sender (and its subsidiaries) shall > > > not be liable for the message if modified or falsified. > > > > > ________________________________ > > > > Ce message et toutes les pièces jointes (ci-après le "message") sont > > établis à l'intention exclusive de ses destinataires et sont > confidentiels. > > Si vous recevez ce message par erreur ou s'il ne vous est pas destiné, > > merci de le détruire ainsi que toute copie de votre système et d'en > > avertir immédiatement l'expéditeur. Toute lecture non autorisée, toute > > utilisation de ce message qui n'est pas conforme à sa destination, > > toute diffusion ou toute publication, totale ou partielle, est > > interdite. L'Internet ne permettant pas d'assurer l'intégrité de ce > > message électronique susceptible d'altération, l’expéditeur (et ses > > filiales) décline(nt) toute responsabilité au titre de ce message dans > > l'hypothèse où il aurait été modifié ou falsifié. > > > > This message and any attachments (the "message") is intended solely > > for the intended recipient(s) and is confidential. If you receive this > > message in error, or are not the intended recipient(s), please delete > > it and any copies from your systems and immediately notify the sender. > > Any unauthorized view, use that does not comply with its purpose, > > dissemination or disclosure, either whole or partial, is prohibited. > > Since the internet cannot guarantee the integrity of this message > > which may not be reliable, the sender (and its subsidiaries) shall not > > be liable for the message if modified or falsified. > > > ________________________________ > > Ce message et toutes les pièces jointes (ci-après le "message") sont > établis à l'intention exclusive de ses destinataires et sont confidentiels. > Si vous recevez ce message par erreur ou s'il ne vous est pas destiné, > merci de le détruire ainsi que toute copie de votre système et d'en avertir > immédiatement l'expéditeur. Toute lecture non autorisée, toute utilisation > de ce message qui n'est pas conforme à sa destination, toute diffusion ou > toute publication, totale ou partielle, est interdite. L'Internet ne > permettant pas d'assurer l'intégrité de ce message électronique susceptible > d'altération, l’expéditeur (et ses filiales) décline(nt) toute > responsabilité au titre de ce message dans l'hypothèse où il aurait été > modifié ou falsifié. > > This message and any attachments (the "message") is intended solely for > the intended recipient(s) and is confidential. If you receive this message > in error, or are not the intended recipient(s), please delete it and any > copies from your systems and immediately notify the sender. Any > unauthorized view, use that does not comply with its purpose, dissemination > or disclosure, either whole or partial, is prohibited. Since the internet > cannot guarantee the integrity of this message which may not be reliable, > the sender (and its subsidiaries) shall not be liable for the message if > modified or falsified. >