Change svn:eol-style to LF
This commit is contained in:
22
dist/.project
vendored
22
dist/.project
vendored
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>dist</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>dist</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
|
||||
402
dist/license.txt
vendored
402
dist/license.txt
vendored
@@ -1,201 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
42
dist/notice.txt
vendored
42
dist/notice.txt
vendored
@@ -1,21 +1,21 @@
|
||||
======================================================================
|
||||
== NOTICE file corresponding to section 4 d of the Apache License, ==
|
||||
== Version 2.0, in this case for the Spring Framework distribution. ==
|
||||
======================================================================
|
||||
|
||||
This product includes software developed by
|
||||
the Apache Software Foundation (http://www.apache.org).
|
||||
|
||||
The end-user documentation included with a redistribution, if any,
|
||||
must include the following acknowledgement:
|
||||
|
||||
"This product includes software developed by the Spring Framework
|
||||
Project (http://www.springframework.org)."
|
||||
|
||||
Alternatively, this acknowledgement may appear in the software itself,
|
||||
if and wherever such third-party acknowledgements normally appear.
|
||||
|
||||
The names "Spring" and "Spring Framework" must not be used to
|
||||
endorse or promote products derived from this software without
|
||||
prior written permission. For written permission, please contact
|
||||
rod.johnson@interface21.com or juergen.hoeller@interface21.com.
|
||||
======================================================================
|
||||
== NOTICE file corresponding to section 4 d of the Apache License, ==
|
||||
== Version 2.0, in this case for the Spring Framework distribution. ==
|
||||
======================================================================
|
||||
|
||||
This product includes software developed by
|
||||
the Apache Software Foundation (http://www.apache.org).
|
||||
|
||||
The end-user documentation included with a redistribution, if any,
|
||||
must include the following acknowledgement:
|
||||
|
||||
"This product includes software developed by the Spring Framework
|
||||
Project (http://www.springframework.org)."
|
||||
|
||||
Alternatively, this acknowledgement may appear in the software itself,
|
||||
if and wherever such third-party acknowledgements normally appear.
|
||||
|
||||
The names "Spring" and "Spring Framework" must not be used to
|
||||
endorse or promote products derived from this software without
|
||||
prior written permission. For written permission, please contact
|
||||
rod.johnson@interface21.com or juergen.hoeller@interface21.com.
|
||||
|
||||
@@ -4,21 +4,4 @@
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#Sun Jul 08 09:33:19 BST 2007
|
||||
eclipse.preferences.version=1
|
||||
project.repository.kind=jira
|
||||
project.repository.url=http\://opensource.atlassian.com/projects/spring
|
||||
#Sun Jul 08 09:33:19 BST 2007
|
||||
eclipse.preferences.version=1
|
||||
project.repository.kind=jira
|
||||
project.repository.url=http\://opensource.atlassian.com/projects/spring
|
||||
|
||||
@@ -1,421 +1,421 @@
|
||||
body {
|
||||
text-align: justify;
|
||||
margin-right: 2em;
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
a,
|
||||
a[accesskey^
|
||||
|
||||
=
|
||||
"h"
|
||||
]
|
||||
,
|
||||
a[accesskey^
|
||||
|
||||
=
|
||||
"n"
|
||||
]
|
||||
,
|
||||
a[accesskey^
|
||||
|
||||
=
|
||||
"u"
|
||||
]
|
||||
,
|
||||
a[accesskey^
|
||||
|
||||
=
|
||||
"p"
|
||||
]
|
||||
{
|
||||
font-family: Verdana, Arial, helvetica, sans-serif
|
||||
|
||||
;
|
||||
font-size:
|
||||
|
||||
12
|
||||
px
|
||||
|
||||
;
|
||||
color: #003399
|
||||
|
||||
;
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: #003399;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
p {
|
||||
font-family: Verdana, Arial, sans-serif;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-family: Verdana, Arial, sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
p, dl, dt, dd, blockquote {
|
||||
color: #000000;
|
||||
margin-bottom: 3px;
|
||||
margin-top: 3px;
|
||||
padding-top: 0px;
|
||||
}
|
||||
|
||||
ol, ul, p {
|
||||
margin-top: 6px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
p, blockquote {
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
p.releaseinfo {
|
||||
font-size: 100%;
|
||||
font-weight: bold;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
p.pubdate {
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
td {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
td, th, span {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
td[width^
|
||||
|
||||
=
|
||||
"40%"
|
||||
]
|
||||
{
|
||||
font-family: Verdana, Arial, helvetica, sans-serif
|
||||
|
||||
;
|
||||
font-size:
|
||||
|
||||
12
|
||||
px
|
||||
|
||||
;
|
||||
color: #003399
|
||||
|
||||
;
|
||||
}
|
||||
|
||||
table[summary^
|
||||
|
||||
=
|
||||
"Navigation header"
|
||||
]
|
||||
tbody tr th[colspan^
|
||||
|
||||
=
|
||||
"3"
|
||||
]
|
||||
{
|
||||
font-family: Verdana, Arial, helvetica, sans-serif
|
||||
|
||||
;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h6, H6 {
|
||||
color: #000000;
|
||||
font-weight: 500;
|
||||
margin-top: 0px;
|
||||
padding-top: 14px;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
h2.title {
|
||||
font-weight: 800;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
h2.subtitle {
|
||||
font-weight: 800;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.firstname, .surname {
|
||||
font-size: 12px;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
border: 1px black;
|
||||
empty-cells: hide;
|
||||
margin: 10px 0px 30px 50px;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
div.table {
|
||||
margin: 30px 0px 30px 0px;
|
||||
border: 1px dashed gray;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
div .table-contents table {
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
div.table > p.title {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
table[summary^
|
||||
|
||||
=
|
||||
"Navigation footer"
|
||||
]
|
||||
{
|
||||
border-collapse: collapse
|
||||
|
||||
;
|
||||
border-spacing:
|
||||
|
||||
0
|
||||
;
|
||||
border:
|
||||
|
||||
1
|
||||
px black
|
||||
|
||||
;
|
||||
empty-cells: hide
|
||||
|
||||
;
|
||||
margin:
|
||||
|
||||
0
|
||||
px
|
||||
|
||||
;
|
||||
width:
|
||||
|
||||
100
|
||||
%
|
||||
;
|
||||
}
|
||||
|
||||
table[summary^
|
||||
|
||||
=
|
||||
"Note"
|
||||
]
|
||||
,
|
||||
table[summary^
|
||||
|
||||
=
|
||||
"Warning"
|
||||
]
|
||||
,
|
||||
table[summary^
|
||||
|
||||
=
|
||||
"Tip"
|
||||
]
|
||||
{
|
||||
border-collapse: collapse
|
||||
|
||||
;
|
||||
border-spacing:
|
||||
|
||||
0
|
||||
;
|
||||
border:
|
||||
|
||||
1
|
||||
px black
|
||||
|
||||
;
|
||||
empty-cells: hide
|
||||
|
||||
;
|
||||
margin:
|
||||
|
||||
10
|
||||
px
|
||||
|
||||
0
|
||||
px
|
||||
|
||||
10
|
||||
px
|
||||
|
||||
-
|
||||
20
|
||||
px
|
||||
|
||||
;
|
||||
width:
|
||||
|
||||
100
|
||||
%
|
||||
;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 4pt;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
div.warning TD {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 150%;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 100%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 90%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 90%;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 100%;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
tt {
|
||||
font-size: 110%;
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.navheader, .navfooter {
|
||||
border: none;
|
||||
}
|
||||
|
||||
div.navfooter table {
|
||||
border: dashed gray;
|
||||
border-width: 1px 1px 1px 1px;
|
||||
background-color: #cde48d;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-size: 110%;
|
||||
padding: 5px;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: #CCCCCC;
|
||||
background-color: #f3f5e9;
|
||||
}
|
||||
|
||||
ul, ol, li {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
hr {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
background-color: #CCCCCC;
|
||||
border-width: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.variablelist {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.term {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.mediaobject {
|
||||
padding-top: 30px;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
.legalnotice {
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
float: right;
|
||||
margin: 10px 0px 10px 30px;
|
||||
padding: 10px 20px 20px 20px;
|
||||
width: 33%;
|
||||
border: 1px solid black;
|
||||
background-color: #F4F4F4;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.property {
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
}
|
||||
|
||||
a code {
|
||||
font-family: Verdana, Arial, monospace;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
td code {
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
div.note * td,
|
||||
div.tip * td,
|
||||
div.warning * td,
|
||||
div.calloutlist * td {
|
||||
text-align: justify;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
.programlisting .interfacename,
|
||||
.programlisting .literal,
|
||||
.programlisting .classname {
|
||||
font-size: 95%;
|
||||
}
|
||||
|
||||
.title .interfacename,
|
||||
.title .literal,
|
||||
.title .classname {
|
||||
font-size: 130%;
|
||||
}
|
||||
|
||||
/* everything in a <lineannotation/> is displayed in a coloured, comment-like font */
|
||||
.programlisting * .lineannotation,
|
||||
.programlisting * .lineannotation * {
|
||||
color: green;
|
||||
}
|
||||
body {
|
||||
text-align: justify;
|
||||
margin-right: 2em;
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
a,
|
||||
a[accesskey^
|
||||
|
||||
=
|
||||
"h"
|
||||
]
|
||||
,
|
||||
a[accesskey^
|
||||
|
||||
=
|
||||
"n"
|
||||
]
|
||||
,
|
||||
a[accesskey^
|
||||
|
||||
=
|
||||
"u"
|
||||
]
|
||||
,
|
||||
a[accesskey^
|
||||
|
||||
=
|
||||
"p"
|
||||
]
|
||||
{
|
||||
font-family: Verdana, Arial, helvetica, sans-serif
|
||||
|
||||
;
|
||||
font-size:
|
||||
|
||||
12
|
||||
px
|
||||
|
||||
;
|
||||
color: #003399
|
||||
|
||||
;
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: #003399;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
p {
|
||||
font-family: Verdana, Arial, sans-serif;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-family: Verdana, Arial, sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
p, dl, dt, dd, blockquote {
|
||||
color: #000000;
|
||||
margin-bottom: 3px;
|
||||
margin-top: 3px;
|
||||
padding-top: 0px;
|
||||
}
|
||||
|
||||
ol, ul, p {
|
||||
margin-top: 6px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
p, blockquote {
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
p.releaseinfo {
|
||||
font-size: 100%;
|
||||
font-weight: bold;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
p.pubdate {
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
td {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
td, th, span {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
td[width^
|
||||
|
||||
=
|
||||
"40%"
|
||||
]
|
||||
{
|
||||
font-family: Verdana, Arial, helvetica, sans-serif
|
||||
|
||||
;
|
||||
font-size:
|
||||
|
||||
12
|
||||
px
|
||||
|
||||
;
|
||||
color: #003399
|
||||
|
||||
;
|
||||
}
|
||||
|
||||
table[summary^
|
||||
|
||||
=
|
||||
"Navigation header"
|
||||
]
|
||||
tbody tr th[colspan^
|
||||
|
||||
=
|
||||
"3"
|
||||
]
|
||||
{
|
||||
font-family: Verdana, Arial, helvetica, sans-serif
|
||||
|
||||
;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h6, H6 {
|
||||
color: #000000;
|
||||
font-weight: 500;
|
||||
margin-top: 0px;
|
||||
padding-top: 14px;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
h2.title {
|
||||
font-weight: 800;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
h2.subtitle {
|
||||
font-weight: 800;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.firstname, .surname {
|
||||
font-size: 12px;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
border: 1px black;
|
||||
empty-cells: hide;
|
||||
margin: 10px 0px 30px 50px;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
div.table {
|
||||
margin: 30px 0px 30px 0px;
|
||||
border: 1px dashed gray;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
div .table-contents table {
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
div.table > p.title {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
table[summary^
|
||||
|
||||
=
|
||||
"Navigation footer"
|
||||
]
|
||||
{
|
||||
border-collapse: collapse
|
||||
|
||||
;
|
||||
border-spacing:
|
||||
|
||||
0
|
||||
;
|
||||
border:
|
||||
|
||||
1
|
||||
px black
|
||||
|
||||
;
|
||||
empty-cells: hide
|
||||
|
||||
;
|
||||
margin:
|
||||
|
||||
0
|
||||
px
|
||||
|
||||
;
|
||||
width:
|
||||
|
||||
100
|
||||
%
|
||||
;
|
||||
}
|
||||
|
||||
table[summary^
|
||||
|
||||
=
|
||||
"Note"
|
||||
]
|
||||
,
|
||||
table[summary^
|
||||
|
||||
=
|
||||
"Warning"
|
||||
]
|
||||
,
|
||||
table[summary^
|
||||
|
||||
=
|
||||
"Tip"
|
||||
]
|
||||
{
|
||||
border-collapse: collapse
|
||||
|
||||
;
|
||||
border-spacing:
|
||||
|
||||
0
|
||||
;
|
||||
border:
|
||||
|
||||
1
|
||||
px black
|
||||
|
||||
;
|
||||
empty-cells: hide
|
||||
|
||||
;
|
||||
margin:
|
||||
|
||||
10
|
||||
px
|
||||
|
||||
0
|
||||
px
|
||||
|
||||
10
|
||||
px
|
||||
|
||||
-
|
||||
20
|
||||
px
|
||||
|
||||
;
|
||||
width:
|
||||
|
||||
100
|
||||
%
|
||||
;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 4pt;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
div.warning TD {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 150%;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 100%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 90%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 90%;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 100%;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
tt {
|
||||
font-size: 110%;
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.navheader, .navfooter {
|
||||
border: none;
|
||||
}
|
||||
|
||||
div.navfooter table {
|
||||
border: dashed gray;
|
||||
border-width: 1px 1px 1px 1px;
|
||||
background-color: #cde48d;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-size: 110%;
|
||||
padding: 5px;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: #CCCCCC;
|
||||
background-color: #f3f5e9;
|
||||
}
|
||||
|
||||
ul, ol, li {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
hr {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
background-color: #CCCCCC;
|
||||
border-width: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.variablelist {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.term {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.mediaobject {
|
||||
padding-top: 30px;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
.legalnotice {
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
float: right;
|
||||
margin: 10px 0px 10px 30px;
|
||||
padding: 10px 20px 20px 20px;
|
||||
width: 33%;
|
||||
border: 1px solid black;
|
||||
background-color: #F4F4F4;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.property {
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
}
|
||||
|
||||
a code {
|
||||
font-family: Verdana, Arial, monospace;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
td code {
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
div.note * td,
|
||||
div.tip * td,
|
||||
div.warning * td,
|
||||
div.calloutlist * td {
|
||||
text-align: justify;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
.programlisting .interfacename,
|
||||
.programlisting .literal,
|
||||
.programlisting .classname {
|
||||
font-size: 95%;
|
||||
}
|
||||
|
||||
.title .interfacename,
|
||||
.title .literal,
|
||||
.title .classname {
|
||||
font-size: 130%;
|
||||
}
|
||||
|
||||
/* everything in a <lineannotation/> is displayed in a coloured, comment-like font */
|
||||
.programlisting * .lineannotation,
|
||||
.programlisting * .lineannotation * {
|
||||
color: green;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,353 +1,353 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--xtools2_universal_type_manager-->
|
||||
<?com.ibm.xtools.emf.core.signature <signature id="com.ibm.xtools.mmi.ui.signatures.diagram" version="7.0.0"><feature description="" name="Rational Modeling Platform (com.ibm.xtools.rmp)" url="" version="7.0.0"/></signature>?>
|
||||
<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.0/notation" xmlns:uml="http://www.eclipse.org/uml2/2.0.0/UML" xmlns:umlnotation="http://www.ibm.com/xtools/1.5.2/Umlnotation" xmi:id="_7ZFX8N9SEdyZfZ-HsR_CLw" type="Class" name="classdiagram">
|
||||
<children xmi:id="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFX8t9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFX899SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFX9N9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFX9d9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFX9t9SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFX999SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFX-N9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFX-d9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFX-t9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFX-99SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFX_N9SEdyZfZ-HsR_CLw" x="38991" y="14582"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFX_d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFX_t9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFX_99SEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYAN9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYAd9SEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_7ZFYAt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYA99SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYBN9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYBd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYBt9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYB99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_7ZFYCN9SEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=ItemStream%5Bjcu%5Ename=ItemStream.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYCd9SEdyZfZ-HsR_CLw" x="38991" y="9193"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYCt9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYC99SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYDN9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYDd9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYDt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYD99SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYEN9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYEd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYEt9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYE99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYFN9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=MockRestartableItemReader%5Bjsrctype%5Ename=SimpleStepExecutorTests%5Bjcu%5Ename=SimpleStepExecutorTests.java%5Bjpack%5Ename=org.springframework.batch.execution.step.simple%5Bjsrcroot%5Esrcfolder=src/test/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYFd9SEdyZfZ-HsR_CLw" x="18703" y="16484"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYFt9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYF99SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYGN9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYGd9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYGt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYG99SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYHN9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYHd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYHt9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYH99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYIN9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=StreamException%5Bjcu%5Ename=StreamException.java%5Bjpack%5Ename=org.springframework.batch.item.exception%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYId9SEdyZfZ-HsR_CLw" x="28213" y="13948"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYIt9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYI99SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYJN9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYJd9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYJt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYJ99SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYKN9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYKd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYKt9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYK99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYLN9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=ResourceLineReader%5Bjcu%5Ename=ResourceLineReader.java%5Bjpack%5Ename=org.springframework.batch.io.file.separator%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYLd9SEdyZfZ-HsR_CLw" x="26749" y="24689"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYLt9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYL99SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYMN9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYMd9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYMt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYM99SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYNN9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYNd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYNt9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYN99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYON9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=ItemStreamAdapterExtension%5Bjsrctype%5Ename=SimpleStreamManagerTests%5Bjcu%5Ename=SimpleStreamManagerTests.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/test/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYOd9SEdyZfZ-HsR_CLw" x="35913" y="24699"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYRN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYRd9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYRt9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYR99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYSN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYSd9SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYSt9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYS99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYTN9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYTd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYTt9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=AbstractItemStreamItemWriter%5Bjcu%5Ename=AbstractItemStreamItemWriter.java%5Bjpack%5Ename=org.springframework.batch.item.writer%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYT99SEdyZfZ-HsR_CLw" x="43429" y="23775"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYUN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYUd9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYUt9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYU99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYVN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYVd9SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYVt9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYV99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYWN9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYWd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYWt9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=ExecutionContext%5Bjcu%5Ename=ExecutionContext.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYW99SEdyZfZ-HsR_CLw" x="48501" y="8559"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYaN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYad9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYat9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYa99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYbN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYbd9SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYbt9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYb99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYcN9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYcd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYct9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=AbstractItemStreamItemReader%5Bjcu%5Ename=AbstractItemStreamItemReader.java%5Bjpack%5Ename=org.springframework.batch.item.reader%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYc99SEdyZfZ-HsR_CLw" x="51671" y="24409"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYdN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYdd9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYdt9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYd99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYeN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYed9SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYet9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYe99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYfN9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYfd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYft9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=AbstractTransactionalIoSource%5Bjcu%5Ename=AbstractTransactionalIoSource.java%5Bjpack%5Ename=org.springframework.batch.io.support%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYf99SEdyZfZ-HsR_CLw" x="60864" y="24118"/>
|
||||
</children>
|
||||
<children xmi:id="_OiG3X99TEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_OiQoQN9TEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_OiQoQd9TEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_OiQoQt9TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_OiQoQ99TEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_OiQoRN9TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_OiQoRd9TEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_OiQoRt9TEdyZfZ-HsR_CLw" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_OiQoR99TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_OiQoSN9TEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_OiQoSd9TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_OiG3YN9TEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=ItemWriter%5Bjcu%5Ename=ItemWriter.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_OiG3Yd9TEdyZfZ-HsR_CLw" x="45331" y="27262"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz4yt9TEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_Whz4zd9TEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_Whz4zt9TEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz4z99TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_Whz40N9TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_Whz40d9TEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_Whz40t9TEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Whz4099TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz41N9TEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Whz41d9TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_Whz4y99TEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=HibernateCursorItemReader%5Bjcu%5Ename=HibernateCursorItemReader.java%5Bjpack%5Ename=org.springframework.batch.io.cursor%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_Whz4zN9TEdyZfZ-HsR_CLw" x="51671" y="26945"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz41t9TEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_Whz42d9TEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_Whz42t9TEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz4299TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_Whz43N9TEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_Whz43d9TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_Whz43t9TEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_Whz4399TEdyZfZ-HsR_CLw" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Whz44N9TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz44d9TEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Whz44t9TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_Whz4199TEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=ItemReader%5Bjcu%5Ename=ItemReader.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_Whz42N9TEdyZfZ-HsR_CLw" x="52939" y="20605"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLDiagramStyle" xmi:id="_7ZFYgN9SEdyZfZ-HsR_CLw"/>
|
||||
<element xsi:nil="true"/>
|
||||
<edges xmi:id="_7ZFYgd9SEdyZfZ-HsR_CLw" source="_7ZFYdN9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYgt9SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYg99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYhN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYhd9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYht9SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=AbstractTransactionalIoSource%5Bjcu%5Ename=AbstractTransactionalIoSource.java%5Bjpack%5Ename=org.springframework.batch.io.support%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYh99SEdyZfZ-HsR_CLw" points="[0, -5424, 26260, 3770]$[-26273, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYk99SEdyZfZ-HsR_CLw" source="_7ZFX8d9SEdyZfZ-HsR_CLw" target="_7ZFX_d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYlN9SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYld9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYlt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYl99SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYmN9SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:InterfaceRealization" href="mmi:///#jimpl%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStream%5Bjcu%5Ename=ItemStream.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.InterfaceRealization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYmd9SEdyZfZ-HsR_CLw" points="[-13, -2183, 10610, 5529]$[-10623, -3770, 0, 3942]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYmt9SEdyZfZ-HsR_CLw" source="_7ZFYLt9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYm99SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYnN9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYnd9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYnt9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYn99SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=ItemStreamAdapterExtension%5Bjsrctype%5Ename=SimpleStreamManagerTests%5Bjcu%5Ename=SimpleStreamManagerTests.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/test/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYoN9SEdyZfZ-HsR_CLw" points="[0, -5424, -3241, 3770]$[3228, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYod9SEdyZfZ-HsR_CLw" source="_7ZFX8d9SEdyZfZ-HsR_CLw" target="_7ZFYFt9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYot9SEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_7ZFYo99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYpN9SEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_7ZFYpd9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYpt9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYp99SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=StreamException%5Bjcu%5Ename=StreamException.java%5Bjpack%5Ename=org.springframework.batch.item.exception%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYqN9SEdyZfZ-HsR_CLw" points="[-13, 2183, 19037, -7011]$[-19063, 3770, -13, -5424]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYqd9SEdyZfZ-HsR_CLw" source="_7ZFYCt9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYqt9SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYq99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYrN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYrd9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYrt9SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=MockRestartableItemReader%5Bjsrctype%5Ename=SimpleStepExecutorTests%5Bjcu%5Ename=SimpleStepExecutorTests.java%5Bjpack%5Ename=org.springframework.batch.execution.step.simple%5Bjsrcroot%5Esrcfolder=src/test/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYr99SEdyZfZ-HsR_CLw" points="[-14, -5424, -26472, 3770]$[26445, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYsN9SEdyZfZ-HsR_CLw" source="_7ZFYaN9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYsd9SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYst9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYs99SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYtN9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYtd9SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=AbstractItemStreamItemReader%5Bjcu%5Ename=AbstractItemStreamItemReader.java%5Bjpack%5Ename=org.springframework.batch.item.reader%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYtt9SEdyZfZ-HsR_CLw" points="[-13, -5424, 18296, 3770]$[-18322, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYw99SEdyZfZ-HsR_CLw" source="_7ZFYRN9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYxN9SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYxd9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYxt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYx99SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYyN9SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=AbstractItemStreamItemWriter%5Bjcu%5Ename=AbstractItemStreamItemWriter.java%5Bjpack%5Ename=org.springframework.batch.item.writer%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYyd9SEdyZfZ-HsR_CLw" points="[0, -5424, 4564, 3770]$[-4577, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYyt9SEdyZfZ-HsR_CLw" source="_7ZFYIt9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYy99SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYzN9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYzd9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYzt9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYz99SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=ResourceLineReader%5Bjcu%5Ename=ResourceLineReader.java%5Bjpack%5Ename=org.springframework.batch.io.file.separator%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFY0N9SEdyZfZ-HsR_CLw" points="[-14, -5424, -11682, 3770]$[11655, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFY0d9SEdyZfZ-HsR_CLw" source="_7ZFX8d9SEdyZfZ-HsR_CLw" target="_7ZFYUN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFY0t9SEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_7ZFY099SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFY1N9SEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_7ZFY1d9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFY1t9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFY199SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ExecutionContext%5Bjcu%5Ename=ExecutionContext.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFY2N9SEdyZfZ-HsR_CLw" points="[-13, 2183, -11416, -7011]$[11390, 3770, -13, -5424]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_OiQoSt9TEdyZfZ-HsR_CLw" source="_7ZFYRN9SEdyZfZ-HsR_CLw" target="_OiG3X99TEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_OiQoTd9TEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_OiQoT99TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_OiQoUN9TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_OiQoTt9TEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_OiQoS99TEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:InterfaceRealization" href="mmi:///#jimpl%5Bjsrctype%5Ename=AbstractItemStreamItemWriter%5Bjcu%5Ename=AbstractItemStreamItemWriter.java%5Bjpack%5Ename=org.springframework.batch.item.writer%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemWriter%5Bjcu%5Ename=ItemWriter.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.InterfaceRealization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_OiQoTN9TEdyZfZ-HsR_CLw" points="[0, -702, -3453, 2500]$[3440, -2289, -13, 913]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_Whz4499TEdyZfZ-HsR_CLw" source="_Whz4yt9TEdyZfZ-HsR_CLw" target="_7ZFYaN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_Whz45t9TEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_Whz46N9TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_Whz46d9TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_Whz4599TEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Whz45N9TEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=HibernateCursorItemReader%5Bjcu%5Ename=HibernateCursorItemReader.java%5Bjpack%5Ename=org.springframework.batch.io.cursor%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=AbstractItemStreamItemReader%5Bjcu%5Ename=AbstractItemStreamItemReader.java%5Bjpack%5Ename=org.springframework.batch.item.reader%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Whz45d9TEdyZfZ-HsR_CLw" points="[0, -6059, -13, 2288]$[0, -7646, -13, 701]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_Whz47d9TEdyZfZ-HsR_CLw" source="_7ZFYaN9SEdyZfZ-HsR_CLw" target="_Whz41t9TEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_Whz48N9TEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_Whz48t9TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_Whz4899TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_Whz48d9TEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Whz47t9TEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:InterfaceRealization" href="mmi:///#jimpl%5Bjsrctype%5Ename=AbstractItemStreamItemReader%5Bjcu%5Ename=AbstractItemStreamItemReader.java%5Bjpack%5Ename=org.springframework.batch.item.reader%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemReader%5Bjcu%5Ename=ItemReader.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.InterfaceRealization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Whz4799TEdyZfZ-HsR_CLw" points="[-13, -702, -3479, 2500]$[3453, -2289, -13, 913]"/>
|
||||
</edges>
|
||||
</notation:Diagram>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--xtools2_universal_type_manager-->
|
||||
<?com.ibm.xtools.emf.core.signature <signature id="com.ibm.xtools.mmi.ui.signatures.diagram" version="7.0.0"><feature description="" name="Rational Modeling Platform (com.ibm.xtools.rmp)" url="" version="7.0.0"/></signature>?>
|
||||
<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.0/notation" xmlns:uml="http://www.eclipse.org/uml2/2.0.0/UML" xmlns:umlnotation="http://www.ibm.com/xtools/1.5.2/Umlnotation" xmi:id="_7ZFX8N9SEdyZfZ-HsR_CLw" type="Class" name="classdiagram">
|
||||
<children xmi:id="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFX8t9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFX899SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFX9N9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFX9d9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFX9t9SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFX999SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFX-N9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFX-d9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFX-t9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFX-99SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFX_N9SEdyZfZ-HsR_CLw" x="38991" y="14582"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFX_d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFX_t9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFX_99SEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYAN9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYAd9SEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_7ZFYAt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYA99SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYBN9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYBd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYBt9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYB99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_7ZFYCN9SEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=ItemStream%5Bjcu%5Ename=ItemStream.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYCd9SEdyZfZ-HsR_CLw" x="38991" y="9193"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYCt9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYC99SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYDN9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYDd9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYDt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYD99SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYEN9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYEd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYEt9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYE99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYFN9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=MockRestartableItemReader%5Bjsrctype%5Ename=SimpleStepExecutorTests%5Bjcu%5Ename=SimpleStepExecutorTests.java%5Bjpack%5Ename=org.springframework.batch.execution.step.simple%5Bjsrcroot%5Esrcfolder=src/test/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYFd9SEdyZfZ-HsR_CLw" x="18703" y="16484"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYFt9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYF99SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYGN9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYGd9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYGt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYG99SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYHN9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYHd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYHt9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYH99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYIN9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=StreamException%5Bjcu%5Ename=StreamException.java%5Bjpack%5Ename=org.springframework.batch.item.exception%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYId9SEdyZfZ-HsR_CLw" x="28213" y="13948"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYIt9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYI99SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYJN9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYJd9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYJt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYJ99SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYKN9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYKd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYKt9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYK99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYLN9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=ResourceLineReader%5Bjcu%5Ename=ResourceLineReader.java%5Bjpack%5Ename=org.springframework.batch.io.file.separator%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYLd9SEdyZfZ-HsR_CLw" x="26749" y="24689"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYLt9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYL99SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYMN9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYMd9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYMt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYM99SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYNN9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYNd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYNt9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYN99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYON9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=ItemStreamAdapterExtension%5Bjsrctype%5Ename=SimpleStreamManagerTests%5Bjcu%5Ename=SimpleStreamManagerTests.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/test/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYOd9SEdyZfZ-HsR_CLw" x="35913" y="24699"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYRN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYRd9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYRt9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYR99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYSN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYSd9SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYSt9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYS99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYTN9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYTd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYTt9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=AbstractItemStreamItemWriter%5Bjcu%5Ename=AbstractItemStreamItemWriter.java%5Bjpack%5Ename=org.springframework.batch.item.writer%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYT99SEdyZfZ-HsR_CLw" x="43429" y="23775"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYUN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYUd9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYUt9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYU99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYVN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYVd9SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYVt9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYV99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYWN9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYWd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYWt9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=ExecutionContext%5Bjcu%5Ename=ExecutionContext.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYW99SEdyZfZ-HsR_CLw" x="48501" y="8559"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYaN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYad9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYat9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYa99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYbN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYbd9SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYbt9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYb99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYcN9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYcd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYct9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=AbstractItemStreamItemReader%5Bjcu%5Ename=AbstractItemStreamItemReader.java%5Bjpack%5Ename=org.springframework.batch.item.reader%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYc99SEdyZfZ-HsR_CLw" x="51671" y="24409"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYdN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYdd9SEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_7ZFYdt9SEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYd99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYeN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_7ZFYed9SEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_7ZFYet9SEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYe99SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_7ZFYfN9SEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_7ZFYfd9SEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_7ZFYft9SEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=AbstractTransactionalIoSource%5Bjcu%5Ename=AbstractTransactionalIoSource.java%5Bjpack%5Ename=org.springframework.batch.io.support%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYf99SEdyZfZ-HsR_CLw" x="60864" y="24118"/>
|
||||
</children>
|
||||
<children xmi:id="_OiG3X99TEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_OiQoQN9TEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_OiQoQd9TEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_OiQoQt9TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_OiQoQ99TEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_OiQoRN9TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_OiQoRd9TEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_OiQoRt9TEdyZfZ-HsR_CLw" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_OiQoR99TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_OiQoSN9TEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_OiQoSd9TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_OiG3YN9TEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=ItemWriter%5Bjcu%5Ename=ItemWriter.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_OiG3Yd9TEdyZfZ-HsR_CLw" x="45331" y="27262"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz4yt9TEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_Whz4zd9TEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_Whz4zt9TEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz4z99TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_Whz40N9TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_Whz40d9TEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_Whz40t9TEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Whz4099TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz41N9TEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Whz41d9TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_Whz4y99TEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=HibernateCursorItemReader%5Bjcu%5Ename=HibernateCursorItemReader.java%5Bjpack%5Ename=org.springframework.batch.io.cursor%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_Whz4zN9TEdyZfZ-HsR_CLw" x="51671" y="26945"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz41t9TEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_Whz42d9TEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_Whz42t9TEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz4299TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_Whz43N9TEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_Whz43d9TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_Whz43t9TEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_Whz4399TEdyZfZ-HsR_CLw" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Whz44N9TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_Whz44d9TEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Whz44t9TEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_Whz4199TEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=ItemReader%5Bjcu%5Ename=ItemReader.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_Whz42N9TEdyZfZ-HsR_CLw" x="52939" y="20605"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLDiagramStyle" xmi:id="_7ZFYgN9SEdyZfZ-HsR_CLw"/>
|
||||
<element xsi:nil="true"/>
|
||||
<edges xmi:id="_7ZFYgd9SEdyZfZ-HsR_CLw" source="_7ZFYdN9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYgt9SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYg99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYhN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYhd9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYht9SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=AbstractTransactionalIoSource%5Bjcu%5Ename=AbstractTransactionalIoSource.java%5Bjpack%5Ename=org.springframework.batch.io.support%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYh99SEdyZfZ-HsR_CLw" points="[0, -5424, 26260, 3770]$[-26273, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYk99SEdyZfZ-HsR_CLw" source="_7ZFX8d9SEdyZfZ-HsR_CLw" target="_7ZFX_d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYlN9SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYld9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYlt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYl99SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYmN9SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:InterfaceRealization" href="mmi:///#jimpl%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStream%5Bjcu%5Ename=ItemStream.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.InterfaceRealization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYmd9SEdyZfZ-HsR_CLw" points="[-13, -2183, 10610, 5529]$[-10623, -3770, 0, 3942]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYmt9SEdyZfZ-HsR_CLw" source="_7ZFYLt9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYm99SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYnN9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYnd9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYnt9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYn99SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=ItemStreamAdapterExtension%5Bjsrctype%5Ename=SimpleStreamManagerTests%5Bjcu%5Ename=SimpleStreamManagerTests.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/test/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYoN9SEdyZfZ-HsR_CLw" points="[0, -5424, -3241, 3770]$[3228, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYod9SEdyZfZ-HsR_CLw" source="_7ZFX8d9SEdyZfZ-HsR_CLw" target="_7ZFYFt9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYot9SEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_7ZFYo99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYpN9SEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_7ZFYpd9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYpt9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYp99SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=StreamException%5Bjcu%5Ename=StreamException.java%5Bjpack%5Ename=org.springframework.batch.item.exception%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYqN9SEdyZfZ-HsR_CLw" points="[-13, 2183, 19037, -7011]$[-19063, 3770, -13, -5424]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYqd9SEdyZfZ-HsR_CLw" source="_7ZFYCt9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYqt9SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYq99SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYrN9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYrd9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYrt9SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=MockRestartableItemReader%5Bjsrctype%5Ename=SimpleStepExecutorTests%5Bjcu%5Ename=SimpleStepExecutorTests.java%5Bjpack%5Ename=org.springframework.batch.execution.step.simple%5Bjsrcroot%5Esrcfolder=src/test/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYr99SEdyZfZ-HsR_CLw" points="[-14, -5424, -26472, 3770]$[26445, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYsN9SEdyZfZ-HsR_CLw" source="_7ZFYaN9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYsd9SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYst9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYs99SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYtN9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYtd9SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=AbstractItemStreamItemReader%5Bjcu%5Ename=AbstractItemStreamItemReader.java%5Bjpack%5Ename=org.springframework.batch.item.reader%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYtt9SEdyZfZ-HsR_CLw" points="[-13, -5424, 18296, 3770]$[-18322, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYw99SEdyZfZ-HsR_CLw" source="_7ZFYRN9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYxN9SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYxd9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYxt9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYx99SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYyN9SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=AbstractItemStreamItemWriter%5Bjcu%5Ename=AbstractItemStreamItemWriter.java%5Bjpack%5Ename=org.springframework.batch.item.writer%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFYyd9SEdyZfZ-HsR_CLw" points="[0, -5424, 4564, 3770]$[-4577, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFYyt9SEdyZfZ-HsR_CLw" source="_7ZFYIt9SEdyZfZ-HsR_CLw" target="_7ZFX8d9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFYy99SEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_7ZFYzN9SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFYzd9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFYzt9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFYz99SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=ResourceLineReader%5Bjcu%5Ename=ResourceLineReader.java%5Bjpack%5Ename=org.springframework.batch.io.file.separator%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFY0N9SEdyZfZ-HsR_CLw" points="[-14, -5424, -11682, 3770]$[11655, -7011, -13, 2183]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_7ZFY0d9SEdyZfZ-HsR_CLw" source="_7ZFX8d9SEdyZfZ-HsR_CLw" target="_7ZFYUN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_7ZFY0t9SEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_7ZFY099SEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_7ZFY1N9SEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_7ZFY1d9SEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ZFY1t9SEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_7ZFY199SEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=ItemStreamAdapter%5Bjcu%5Ename=ItemStreamAdapter.java%5Bjpack%5Ename=org.springframework.batch.item.stream%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ExecutionContext%5Bjcu%5Ename=ExecutionContext.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ZFY2N9SEdyZfZ-HsR_CLw" points="[-13, 2183, -11416, -7011]$[11390, 3770, -13, -5424]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_OiQoSt9TEdyZfZ-HsR_CLw" source="_7ZFYRN9SEdyZfZ-HsR_CLw" target="_OiG3X99TEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_OiQoTd9TEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_OiQoT99TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_OiQoUN9TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_OiQoTt9TEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_OiQoS99TEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:InterfaceRealization" href="mmi:///#jimpl%5Bjsrctype%5Ename=AbstractItemStreamItemWriter%5Bjcu%5Ename=AbstractItemStreamItemWriter.java%5Bjpack%5Ename=org.springframework.batch.item.writer%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemWriter%5Bjcu%5Ename=ItemWriter.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.InterfaceRealization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_OiQoTN9TEdyZfZ-HsR_CLw" points="[0, -702, -3453, 2500]$[3440, -2289, -13, 913]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_Whz4499TEdyZfZ-HsR_CLw" source="_Whz4yt9TEdyZfZ-HsR_CLw" target="_7ZFYaN9SEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_Whz45t9TEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_Whz46N9TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_Whz46d9TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_Whz4599TEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Whz45N9TEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Generalization" href="mmi:///#jgen%5Bjsrctype%5Ename=HibernateCursorItemReader%5Bjcu%5Ename=HibernateCursorItemReader.java%5Bjpack%5Ename=org.springframework.batch.io.cursor%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=AbstractItemStreamItemReader%5Bjcu%5Ename=AbstractItemStreamItemReader.java%5Bjpack%5Ename=org.springframework.batch.item.reader%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Generalization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Whz45d9TEdyZfZ-HsR_CLw" points="[0, -6059, -13, 2288]$[0, -7646, -13, 701]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_Whz47d9TEdyZfZ-HsR_CLw" source="_7ZFYaN9SEdyZfZ-HsR_CLw" target="_Whz41t9TEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_Whz48N9TEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_Whz48t9TEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_Whz4899TEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_Whz48d9TEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Whz47t9TEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:InterfaceRealization" href="mmi:///#jimpl%5Bjsrctype%5Ename=AbstractItemStreamItemReader%5Bjcu%5Ename=AbstractItemStreamItemReader.java%5Bjpack%5Ename=org.springframework.batch.item.reader%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ItemReader%5Bjcu%5Ename=ItemReader.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.InterfaceRealization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Whz4799TEdyZfZ-HsR_CLw" points="[-13, -702, -3479, 2500]$[3453, -2289, -13, 913]"/>
|
||||
</edges>
|
||||
</notation:Diagram>
|
||||
|
||||
@@ -1,482 +1,482 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--xtools2_universal_type_manager-->
|
||||
<?com.ibm.xtools.emf.core.signature <signature id="com.ibm.xtools.mmi.ui.signatures.diagram" version="7.0.0"><feature description="" name="Rational Modeling Platform (com.ibm.xtools.rmp)" url="" version="7.0.0"/></signature>?>
|
||||
<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.0/notation" xmlns:uml="http://www.eclipse.org/uml2/2.0.0/UML" xmlns:umlnotation="http://www.ibm.com/xtools/1.5.2/Umlnotation" xmi:id="_JiD3YNaYEdyFWa-S-HPO7A" type="Class" name="repository-classdiagram.dnx">
|
||||
<children xmi:id="_LV6TINqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_LV6TI9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_LV6TJNqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_LV6TJdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_LV6TJtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_LV6TJ9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_LV6TKNqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_LV6TKdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_LV6TKtqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_LV6TK9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_LV6TIdqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_LV6TItqUEdyZfZ-HsR_CLw" x="44713" y="6257"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zc_9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdAtqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdA9qUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdBNqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N8zdBdqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N8zdBtqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N8zdB9qUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdCNqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdCdqUEdyZfZ-HsR_CLw" visible="false" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdCtqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N8zdANqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=StepExecution%5Bjcu%5Ename=StepExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdAdqUEdyZfZ-HsR_CLw" x="49769" y="13314"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdC9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdDtqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdD9qUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdENqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N8zdEdqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N8zdEtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N8zdE9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N8zdFNqUEdyZfZ-HsR_CLw" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdFdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdFtqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdF9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N8zdDNqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=JobInstanceDao%5Bjcu%5Ename=JobInstanceDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdDdqUEdyZfZ-HsR_CLw" x="24092" y="1902"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdGNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdG9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdHNqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdHdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N8zdHtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N8zdH9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N8zdINqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdIdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdItqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdI9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N8zdGdqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=JobParameters%5Bjcu%5Ename=JobParameters.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdGtqUEdyZfZ-HsR_CLw" x="30432" y="10461"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdJNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdJ9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdKNqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdKdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N8zdKtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N8zdK9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N8zdLNqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdLdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdLtqUEdyZfZ-HsR_CLw" visible="false" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdL9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N8zdJdqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=JobExecution%5Bjcu%5Ename=JobExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdJtqUEdyZfZ-HsR_CLw" x="29164" y="7608" width="4512"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdMNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdM9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdNNqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdNdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N8zdNtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N8zdN9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N8zdONqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdOdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdOtqUEdyZfZ-HsR_CLw" visible="false" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdO9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N8zdMdqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=StepInstance%5Bjcu%5Ename=StepInstance.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdMtqUEdyZfZ-HsR_CLw" x="41527" y="17118"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdSdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdTNqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdTdqUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdTtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89N4NqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N89N4dqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89N4tqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89N49qUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89N5NqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N5dqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89N5tqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N8zdStqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=JobRepository%5Bjcu%5Ename=JobRepository.java%5Bjpack%5Ename=org.springframework.batch.core.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdS9qUEdyZfZ-HsR_CLw" x="44879" y="1438"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N59qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89N6tqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89N69qUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N7NqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89N7dqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N89N7tqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89N79qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89N8NqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89N8dqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N8tqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89N89qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N89N6NqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=Step%5Bjcu%5Ename=Step.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89N6dqUEdyZfZ-HsR_CLw" x="53256" y="1902"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N9NqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89N99qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89N-NqUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N-dqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89N-tqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N89N-9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89N_NqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89N_dqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89N_tqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N_9qUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OANqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N89N9dqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=JobExecutionDao%5Bjcu%5Ename=JobExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89N9tqUEdyZfZ-HsR_CLw" x="35187" y="1585"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OAdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89OBNqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89OBdqUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OBtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89OB9qUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N89OCNqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89OCdqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89OCtqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OC9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89ODNqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89ODdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N89OAtqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89OA9qUEdyZfZ-HsR_CLw" x="58962" y="5072"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OMNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89OM9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89ONNqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N89ONdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89ONtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89ON9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89OONqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OOdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OOtqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OO9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N89OMdqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=Entity%5Bjcu%5Ename=Entity.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89OMtqUEdyZfZ-HsR_CLw" x="46916" y="15533"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OPNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89OP9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89OQNqUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OQdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89OQtqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N89OQ9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89ORNqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89ORdqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89ORtqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OR9qUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OSNqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N89OPdqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=Job%5Bjcu%5Ename=Job.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89OPtqUEdyZfZ-HsR_CLw" x="30432" y="1585"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OSdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89OTNqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89OTdqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OTtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89OT9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89OUNqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89OUdqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OUtqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OU9qUEdyZfZ-HsR_CLw" visible="false" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OVNqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N89OStqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=JobInstance%5Bjcu%5Ename=JobInstance.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89OS9qUEdyZfZ-HsR_CLw" x="38357" y="12363"/>
|
||||
</children>
|
||||
<children xmi:id="_Z2RL_tqZEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_Z2RMAdqZEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_Z2RMAtqZEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_Z2RMA9qZEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_Z2RMBNqZEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_Z2RMBdqZEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_Z2aV4NqZEdyZfZ-HsR_CLw" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Z2aV4dqZEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_Z2aV4tqZEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Z2aV49qZEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_Z2RL_9qZEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=MapStepDao%5Bjcu%5Ename=MapStepDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_Z2RMANqZEdyZfZ-HsR_CLw" x="57836" y="11878"/>
|
||||
</children>
|
||||
<children xmi:id="_ALWw2t5mEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_ALWw3d5mEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_ALWw3t5mEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_ALWw395mEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_ALWw4N5mEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_ALWw4d5mEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_ALWw4t5mEdyZfZ-HsR_CLw" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_ALWw495mEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_ALWw5N5mEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_ALWw5d5mEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_ALWw295mEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=ExecutionContext%5Bjcu%5Ename=ExecutionContext.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_ALWw3N5mEdyZfZ-HsR_CLw" x="65936" y="2536"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLDiagramStyle" xmi:id="_JiD3YdaYEdyFWa-S-HPO7A"/>
|
||||
<element xsi:nil="true"/>
|
||||
<edges xmi:id="_N89OVdqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89OAdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G-4NqUEdyZfZ-HsR_CLw" type="FromMultiplicityLabel">
|
||||
<children xmi:id="_N9G-4tqUEdyZfZ-HsR_CLw" type="FromMultiplicity"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9G-4dqUEdyZfZ-HsR_CLw" y="396"/>
|
||||
</children>
|
||||
<children xmi:id="_N9G-49qUEdyZfZ-HsR_CLw" type="FromRoleLabel">
|
||||
<children xmi:id="_N9G-5dqUEdyZfZ-HsR_CLw" type="FromRole"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9G-5NqUEdyZfZ-HsR_CLw" y="-397"/>
|
||||
</children>
|
||||
<children xmi:id="_N9G-5tqUEdyZfZ-HsR_CLw" type="associationTypeLabel">
|
||||
<children xmi:id="_N9G-6NqUEdyZfZ-HsR_CLw" type="associationTypeCompartment"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9G-59qUEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N89OVtqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Property" href="mmi:///#jfield%5Ename=stepExecutionDao%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Property"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N89OV9qUEdyZfZ-HsR_CLw" points="[-14, 2884, -19500, -10385]$[19486, 4471, 0, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G-6dqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89OAdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G-7NqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G-7tqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G-8NqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G-79qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G-7dqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G-6tqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G-69qUEdyZfZ-HsR_CLw" points="[-14, 2884, -19500, -10385]$[19486, 4471, 0, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G--dqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89N59qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G-_NqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G-_tqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G_ANqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G-_9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G-_dqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G--tqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=Step%5Bjcu%5Ename=Step.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G--9qUEdyZfZ-HsR_CLw" points="[-14, 2884, -6324, -10385]$[6310, 4471, 0, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G_AdqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zc_9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G_BNqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G_BtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G_CNqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G_B9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G_BdqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G_AtqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=StepExecution%5Bjcu%5Ename=StepExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G_A9qUEdyZfZ-HsR_CLw" points="[-14, 2884, 30493, -10385]$[-30520, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G_GdqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89OPNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G_HNqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G_HtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G_INqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G_H9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G_HdqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G_GtqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=Job%5Bjcu%5Ename=Job.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G_G9qUEdyZfZ-HsR_CLw" points="[-14, 2884, -40124, -10385]$[40097, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G_IdqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89OSdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G_JNqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G_JtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G_KNqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G_J9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G_JdqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G_ItqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobInstance%5Bjcu%5Ename=JobInstance.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G_I9qUEdyZfZ-HsR_CLw" points="[-14, 2884, -45733, -10385]$[45706, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G_PdqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zdC9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G_QNqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G_QtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G_RNqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G_Q9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G_QdqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G_PtqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobInstanceDao%5Bjcu%5Ename=JobInstanceDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G_P9qUEdyZfZ-HsR_CLw" points="[-2302, -397, 26168, 1084]$[-14605, -2408, 13865, -927]$[-26353, -1640, 2117, -159]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QI2NqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zdJNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QI29qUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9QI3dqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9QI39qUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9QI3tqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9QI3NqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QI2dqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobExecution%5Bjcu%5Ename=JobExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QI2tqUEdyZfZ-HsR_CLw" points="[-14, 2884, 12475, -10385]$[-12502, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QI4NqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89OMNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QI49qUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9QI5dqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9QI59qUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9QI5tqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9QI5NqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QI4dqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=Entity%5Bjcu%5Ename=Entity.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QI4tqUEdyZfZ-HsR_CLw" points="[-14, 2884, -34912, -10385]$[34885, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QI8NqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zdGNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QI89qUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9QI9dqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9QI99qUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9QI9tqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9QI9NqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QI8dqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobParameters%5Bjcu%5Ename=JobParameters.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QI8tqUEdyZfZ-HsR_CLw" points="[-14, 2884, 18494, -10385]$[-18508, 4471, 0, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QJA9qUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zdC9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QJBtqUEdyZfZ-HsR_CLw" type="FromMultiplicityLabel">
|
||||
<children xmi:id="_N9QJCNqUEdyZfZ-HsR_CLw" type="FromMultiplicity"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJB9qUEdyZfZ-HsR_CLw" y="396"/>
|
||||
</children>
|
||||
<children xmi:id="_N9QJCdqUEdyZfZ-HsR_CLw" type="FromRoleLabel">
|
||||
<children xmi:id="_N9QJC9qUEdyZfZ-HsR_CLw" type="FromRole"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJCtqUEdyZfZ-HsR_CLw" y="-397"/>
|
||||
</children>
|
||||
<children xmi:id="_N9QJDNqUEdyZfZ-HsR_CLw" type="associationTypeLabel">
|
||||
<children xmi:id="_N9QJDtqUEdyZfZ-HsR_CLw" type="associationTypeCompartment"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJDdqUEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QJBNqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Property" href="mmi:///#jfield%5Ename=jobInstanceDao%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Property"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QJBdqUEdyZfZ-HsR_CLw" points="[-2275, -185, 26168, 1296]$[-14287, -1138, 14156, 343]$[-16219, -2116, 12224, -635]$[-26326, -1587, 2117, -106]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QJD9qUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89N9NqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QJEtqUEdyZfZ-HsR_CLw" type="FromMultiplicityLabel">
|
||||
<children xmi:id="_N9QJFNqUEdyZfZ-HsR_CLw" type="FromMultiplicity"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJE9qUEdyZfZ-HsR_CLw" y="396"/>
|
||||
</children>
|
||||
<children xmi:id="_N9QJFdqUEdyZfZ-HsR_CLw" type="FromRoleLabel">
|
||||
<children xmi:id="_N9QJF9qUEdyZfZ-HsR_CLw" type="FromRole"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJFtqUEdyZfZ-HsR_CLw" x="207" y="-463"/>
|
||||
</children>
|
||||
<children xmi:id="_N9QJGNqUEdyZfZ-HsR_CLw" type="associationTypeLabel">
|
||||
<children xmi:id="_N9QJGtqUEdyZfZ-HsR_CLw" type="associationTypeCompartment"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJGdqUEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QJENqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Property" href="mmi:///#jfield%5Ename=jobExecutionDao%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Property"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QJEdqUEdyZfZ-HsR_CLw" points="[-14, 2884, -12872, -10385]$[12845, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QJG9qUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89N9NqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QJHtqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9QJINqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9QJItqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9QJIdqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9QJH9qUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QJHNqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobExecutionDao%5Bjcu%5Ename=JobExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QJHdqUEdyZfZ-HsR_CLw" points="[-14, 2884, -12872, -10385]$[12845, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QJI9qUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zdSdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QJJtqUEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_N9QJKNqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9QJKdqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9QJJ9qUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QJJNqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:InterfaceRealization" href="mmi:///#jimpl%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobRepository%5Bjcu%5Ename=JobRepository.java%5Bjpack%5Ename=org.springframework.batch.core.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.InterfaceRealization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QJJdqUEdyZfZ-HsR_CLw" points="[-14, -2884, 0, 3202]$[-14, -4472, 0, 1614]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_PbIp39qZEdyZfZ-HsR_CLw" source="_N89OAdqUEdyZfZ-HsR_CLw" target="_N8zc_9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_PbIp4tqZEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_PbIp5NqZEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_PbIp5tqZEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_PbIp5dqZEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_PbIp49qZEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_PbIp4NqZEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=StepExecution%5Bjcu%5Ename=StepExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_PbIp4dqZEdyZfZ-HsR_CLw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_ALWw5t5mEdyZfZ-HsR_CLw" source="_Z2RL_tqZEdyZfZ-HsR_CLw" target="_N89OAdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_ALWw6d5mEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_ALWw695mEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_ALWw7N5mEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_ALWw6t5mEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_ALWw595mEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:InterfaceRealization" href="mmi:///#jimpl%5Bjsrctype%5Ename=MapStepDao%5Bjcu%5Ename=MapStepDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.InterfaceRealization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ALWw6N5mEdyZfZ-HsR_CLw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_ALWw8N5mEdyZfZ-HsR_CLw" source="_N89OAdqUEdyZfZ-HsR_CLw" target="_N8zdJNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_ALWw895mEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_ALWw9d5mEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_ALWw995mEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_ALWw9t5mEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_ALWw9N5mEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_ALWw8d5mEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobExecution%5Bjcu%5Ename=JobExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ALWw8t5mEdyZfZ-HsR_CLw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_ALWw_95mEdyZfZ-HsR_CLw" source="_N89OAdqUEdyZfZ-HsR_CLw" target="_ALWw2t5mEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_ALWxAt5mEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_ALWxBN5mEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_ALWxBt5mEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_ALWxBd5mEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_ALWxA95mEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_ALWxAN5mEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ExecutionContext%5Bjcu%5Ename=ExecutionContext.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ALWxAd5mEdyZfZ-HsR_CLw" points="[-13, 2038, -13, -7011]$[-13, 3625, -13, -5424]"/>
|
||||
</edges>
|
||||
</notation:Diagram>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--xtools2_universal_type_manager-->
|
||||
<?com.ibm.xtools.emf.core.signature <signature id="com.ibm.xtools.mmi.ui.signatures.diagram" version="7.0.0"><feature description="" name="Rational Modeling Platform (com.ibm.xtools.rmp)" url="" version="7.0.0"/></signature>?>
|
||||
<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.0/notation" xmlns:uml="http://www.eclipse.org/uml2/2.0.0/UML" xmlns:umlnotation="http://www.ibm.com/xtools/1.5.2/Umlnotation" xmi:id="_JiD3YNaYEdyFWa-S-HPO7A" type="Class" name="repository-classdiagram.dnx">
|
||||
<children xmi:id="_LV6TINqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_LV6TI9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_LV6TJNqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_LV6TJdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_LV6TJtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_LV6TJ9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_LV6TKNqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_LV6TKdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_LV6TKtqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_LV6TK9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_LV6TIdqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_LV6TItqUEdyZfZ-HsR_CLw" x="44713" y="6257"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zc_9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdAtqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdA9qUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdBNqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N8zdBdqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N8zdBtqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N8zdB9qUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdCNqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdCdqUEdyZfZ-HsR_CLw" visible="false" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdCtqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N8zdANqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=StepExecution%5Bjcu%5Ename=StepExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdAdqUEdyZfZ-HsR_CLw" x="49769" y="13314"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdC9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdDtqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdD9qUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdENqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N8zdEdqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N8zdEtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N8zdE9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N8zdFNqUEdyZfZ-HsR_CLw" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdFdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdFtqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdF9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N8zdDNqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=JobInstanceDao%5Bjcu%5Ename=JobInstanceDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdDdqUEdyZfZ-HsR_CLw" x="24092" y="1902"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdGNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdG9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdHNqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdHdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N8zdHtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N8zdH9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N8zdINqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdIdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdItqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdI9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N8zdGdqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=JobParameters%5Bjcu%5Ename=JobParameters.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdGtqUEdyZfZ-HsR_CLw" x="30432" y="10461"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdJNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdJ9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdKNqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdKdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N8zdKtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N8zdK9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N8zdLNqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdLdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdLtqUEdyZfZ-HsR_CLw" visible="false" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdL9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N8zdJdqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=JobExecution%5Bjcu%5Ename=JobExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdJtqUEdyZfZ-HsR_CLw" x="29164" y="7608" width="4512"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdMNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdM9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdNNqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdNdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N8zdNtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N8zdN9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N8zdONqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdOdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdOtqUEdyZfZ-HsR_CLw" visible="false" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N8zdO9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N8zdMdqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=StepInstance%5Bjcu%5Ename=StepInstance.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdMtqUEdyZfZ-HsR_CLw" x="41527" y="17118"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdSdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N8zdTNqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N8zdTdqUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N8zdTtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89N4NqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N89N4dqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89N4tqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89N49qUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89N5NqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N5dqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89N5tqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N8zdStqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=JobRepository%5Bjcu%5Ename=JobRepository.java%5Bjpack%5Ename=org.springframework.batch.core.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N8zdS9qUEdyZfZ-HsR_CLw" x="44879" y="1438"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N59qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89N6tqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89N69qUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N7NqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89N7dqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N89N7tqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89N79qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89N8NqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89N8dqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N8tqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89N89qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N89N6NqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=Step%5Bjcu%5Ename=Step.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89N6dqUEdyZfZ-HsR_CLw" x="53256" y="1902"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N9NqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89N99qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89N-NqUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N-dqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89N-tqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N89N-9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89N_NqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89N_dqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89N_tqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89N_9qUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OANqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N89N9dqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=JobExecutionDao%5Bjcu%5Ename=JobExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89N9tqUEdyZfZ-HsR_CLw" x="35187" y="1585"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OAdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89OBNqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89OBdqUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OBtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89OB9qUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N89OCNqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89OCdqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89OCtqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OC9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89ODNqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89ODdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N89OAtqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89OA9qUEdyZfZ-HsR_CLw" x="58962" y="5072"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OMNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89OM9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89ONNqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N89ONdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89ONtqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89ON9qUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89OONqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OOdqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OOtqUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OO9qUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N89OMdqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=Entity%5Bjcu%5Ename=Entity.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89OMtqUEdyZfZ-HsR_CLw" x="46916" y="15533"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OPNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89OP9qUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89OQNqUEdyZfZ-HsR_CLw" width="530" height="530"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OQdqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89OQtqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N89OQ9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89ORNqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89ORdqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89ORtqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OR9qUEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OSNqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_N89OPdqUEdyZfZ-HsR_CLw" showStereotype="Label" useClassifierShape="true"/>
|
||||
<element xmi:type="uml:Interface" href="mmi:///#jsrctype%5Ename=Job%5Bjcu%5Ename=Job.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Interface"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89OPtqUEdyZfZ-HsR_CLw" x="30432" y="1585"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OSdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N89OTNqUEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_N89OTdqUEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OTtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N89OT9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_N89OUNqUEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_N89OUdqUEdyZfZ-HsR_CLw" visible="false" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OUtqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_N89OU9qUEdyZfZ-HsR_CLw" visible="false" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_N89OVNqUEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_N89OStqUEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=JobInstance%5Bjcu%5Ename=JobInstance.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N89OS9qUEdyZfZ-HsR_CLw" x="38357" y="12363"/>
|
||||
</children>
|
||||
<children xmi:id="_Z2RL_tqZEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_Z2RMAdqZEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_Z2RMAtqZEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_Z2RMA9qZEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_Z2RMBNqZEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_Z2RMBdqZEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_Z2aV4NqZEdyZfZ-HsR_CLw" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Z2aV4dqZEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_Z2aV4tqZEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Z2aV49qZEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_Z2RL_9qZEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=MapStepDao%5Bjcu%5Ename=MapStepDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_Z2RMANqZEdyZfZ-HsR_CLw" x="57836" y="11878"/>
|
||||
</children>
|
||||
<children xmi:id="_ALWw2t5mEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_ALWw3d5mEdyZfZ-HsR_CLw" type="ImageCompartment">
|
||||
<layoutConstraint xmi:type="notation:Size" xmi:id="_ALWw3t5mEdyZfZ-HsR_CLw" width="1320" height="1320"/>
|
||||
</children>
|
||||
<children xmi:id="_ALWw395mEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_ALWw4N5mEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<children xmi:id="_ALWw4d5mEdyZfZ-HsR_CLw" type="Parent"/>
|
||||
<children xmi:id="_ALWw4t5mEdyZfZ-HsR_CLw" type="AttributeCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_ALWw495mEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<children xmi:id="_ALWw5N5mEdyZfZ-HsR_CLw" type="OperationCompartment">
|
||||
<styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_ALWw5d5mEdyZfZ-HsR_CLw"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_ALWw295mEdyZfZ-HsR_CLw" showStereotype="Label"/>
|
||||
<element xmi:type="uml:Class" href="mmi:///#jsrctype%5Ename=ExecutionContext%5Bjcu%5Ename=ExecutionContext.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D$uml.Class"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_ALWw3N5mEdyZfZ-HsR_CLw" x="65936" y="2536"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLDiagramStyle" xmi:id="_JiD3YdaYEdyFWa-S-HPO7A"/>
|
||||
<element xsi:nil="true"/>
|
||||
<edges xmi:id="_N89OVdqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89OAdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G-4NqUEdyZfZ-HsR_CLw" type="FromMultiplicityLabel">
|
||||
<children xmi:id="_N9G-4tqUEdyZfZ-HsR_CLw" type="FromMultiplicity"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9G-4dqUEdyZfZ-HsR_CLw" y="396"/>
|
||||
</children>
|
||||
<children xmi:id="_N9G-49qUEdyZfZ-HsR_CLw" type="FromRoleLabel">
|
||||
<children xmi:id="_N9G-5dqUEdyZfZ-HsR_CLw" type="FromRole"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9G-5NqUEdyZfZ-HsR_CLw" y="-397"/>
|
||||
</children>
|
||||
<children xmi:id="_N9G-5tqUEdyZfZ-HsR_CLw" type="associationTypeLabel">
|
||||
<children xmi:id="_N9G-6NqUEdyZfZ-HsR_CLw" type="associationTypeCompartment"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9G-59qUEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N89OVtqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Property" href="mmi:///#jfield%5Ename=stepExecutionDao%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Property"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N89OV9qUEdyZfZ-HsR_CLw" points="[-14, 2884, -19500, -10385]$[19486, 4471, 0, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G-6dqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89OAdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G-7NqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G-7tqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G-8NqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G-79qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G-7dqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G-6tqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G-69qUEdyZfZ-HsR_CLw" points="[-14, 2884, -19500, -10385]$[19486, 4471, 0, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G--dqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89N59qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G-_NqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G-_tqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G_ANqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G-_9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G-_dqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G--tqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=Step%5Bjcu%5Ename=Step.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G--9qUEdyZfZ-HsR_CLw" points="[-14, 2884, -6324, -10385]$[6310, 4471, 0, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G_AdqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zc_9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G_BNqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G_BtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G_CNqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G_B9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G_BdqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G_AtqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=StepExecution%5Bjcu%5Ename=StepExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G_A9qUEdyZfZ-HsR_CLw" points="[-14, 2884, 30493, -10385]$[-30520, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G_GdqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89OPNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G_HNqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G_HtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G_INqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G_H9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G_HdqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G_GtqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=Job%5Bjcu%5Ename=Job.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G_G9qUEdyZfZ-HsR_CLw" points="[-14, 2884, -40124, -10385]$[40097, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G_IdqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89OSdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G_JNqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G_JtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G_KNqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G_J9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G_JdqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G_ItqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobInstance%5Bjcu%5Ename=JobInstance.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G_I9qUEdyZfZ-HsR_CLw" points="[-14, 2884, -45733, -10385]$[45706, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9G_PdqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zdC9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9G_QNqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9G_QtqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9G_RNqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9G_Q9qUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9G_QdqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9G_PtqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobInstanceDao%5Bjcu%5Ename=JobInstanceDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9G_P9qUEdyZfZ-HsR_CLw" points="[-2302, -397, 26168, 1084]$[-14605, -2408, 13865, -927]$[-26353, -1640, 2117, -159]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QI2NqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zdJNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QI29qUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9QI3dqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9QI39qUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9QI3tqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9QI3NqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QI2dqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobExecution%5Bjcu%5Ename=JobExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QI2tqUEdyZfZ-HsR_CLw" points="[-14, 2884, 12475, -10385]$[-12502, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QI4NqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89OMNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QI49qUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9QI5dqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9QI59qUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9QI5tqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9QI5NqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QI4dqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=Entity%5Bjcu%5Ename=Entity.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QI4tqUEdyZfZ-HsR_CLw" points="[-14, 2884, -34912, -10385]$[34885, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QI8NqUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zdGNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QI89qUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9QI9dqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9QI99qUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9QI9tqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9QI9NqUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QI8dqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobParameters%5Bjcu%5Ename=JobParameters.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QI8tqUEdyZfZ-HsR_CLw" points="[-14, 2884, 18494, -10385]$[-18508, 4471, 0, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QJA9qUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zdC9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QJBtqUEdyZfZ-HsR_CLw" type="FromMultiplicityLabel">
|
||||
<children xmi:id="_N9QJCNqUEdyZfZ-HsR_CLw" type="FromMultiplicity"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJB9qUEdyZfZ-HsR_CLw" y="396"/>
|
||||
</children>
|
||||
<children xmi:id="_N9QJCdqUEdyZfZ-HsR_CLw" type="FromRoleLabel">
|
||||
<children xmi:id="_N9QJC9qUEdyZfZ-HsR_CLw" type="FromRole"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJCtqUEdyZfZ-HsR_CLw" y="-397"/>
|
||||
</children>
|
||||
<children xmi:id="_N9QJDNqUEdyZfZ-HsR_CLw" type="associationTypeLabel">
|
||||
<children xmi:id="_N9QJDtqUEdyZfZ-HsR_CLw" type="associationTypeCompartment"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJDdqUEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QJBNqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Property" href="mmi:///#jfield%5Ename=jobInstanceDao%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Property"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QJBdqUEdyZfZ-HsR_CLw" points="[-2275, -185, 26168, 1296]$[-14287, -1138, 14156, 343]$[-16219, -2116, 12224, -635]$[-26326, -1587, 2117, -106]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QJD9qUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89N9NqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QJEtqUEdyZfZ-HsR_CLw" type="FromMultiplicityLabel">
|
||||
<children xmi:id="_N9QJFNqUEdyZfZ-HsR_CLw" type="FromMultiplicity"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJE9qUEdyZfZ-HsR_CLw" y="396"/>
|
||||
</children>
|
||||
<children xmi:id="_N9QJFdqUEdyZfZ-HsR_CLw" type="FromRoleLabel">
|
||||
<children xmi:id="_N9QJF9qUEdyZfZ-HsR_CLw" type="FromRole"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJFtqUEdyZfZ-HsR_CLw" x="207" y="-463"/>
|
||||
</children>
|
||||
<children xmi:id="_N9QJGNqUEdyZfZ-HsR_CLw" type="associationTypeLabel">
|
||||
<children xmi:id="_N9QJGtqUEdyZfZ-HsR_CLw" type="associationTypeCompartment"/>
|
||||
<layoutConstraint xmi:type="notation:Location" xmi:id="_N9QJGdqUEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QJENqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Property" href="mmi:///#jfield%5Ename=jobExecutionDao%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Property"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QJEdqUEdyZfZ-HsR_CLw" points="[-14, 2884, -12872, -10385]$[12845, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QJG9qUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N89N9NqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QJHtqUEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_N9QJINqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9QJItqUEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_N9QJIdqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9QJH9qUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QJHNqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobExecutionDao%5Bjcu%5Ename=JobExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QJHdqUEdyZfZ-HsR_CLw" points="[-14, 2884, -12872, -10385]$[12845, 4471, -13, -8798]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_N9QJI9qUEdyZfZ-HsR_CLw" source="_LV6TINqUEdyZfZ-HsR_CLw" target="_N8zdSdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_N9QJJtqUEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_N9QJKNqUEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_N9QJKdqUEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_N9QJJ9qUEdyZfZ-HsR_CLw" y="-530"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_N9QJJNqUEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:InterfaceRealization" href="mmi:///#jimpl%5Bjsrctype%5Ename=SimpleJobRepository%5Bjcu%5Ename=SimpleJobRepository.java%5Bjpack%5Ename=org.springframework.batch.execution.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobRepository%5Bjcu%5Ename=JobRepository.java%5Bjpack%5Ename=org.springframework.batch.core.repository%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.InterfaceRealization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N9QJJdqUEdyZfZ-HsR_CLw" points="[-14, -2884, 0, 3202]$[-14, -4472, 0, 1614]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_PbIp39qZEdyZfZ-HsR_CLw" source="_N89OAdqUEdyZfZ-HsR_CLw" target="_N8zc_9qUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_PbIp4tqZEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_PbIp5NqZEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_PbIp5tqZEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_PbIp5dqZEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_PbIp49qZEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_PbIp4NqZEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=StepExecution%5Bjcu%5Ename=StepExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_PbIp4dqZEdyZfZ-HsR_CLw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_ALWw5t5mEdyZfZ-HsR_CLw" source="_Z2RL_tqZEdyZfZ-HsR_CLw" target="_N89OAdqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_ALWw6d5mEdyZfZ-HsR_CLw" type="NameLabel">
|
||||
<children xmi:id="_ALWw695mEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_ALWw7N5mEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_ALWw6t5mEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_ALWw595mEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:InterfaceRealization" href="mmi:///#jimpl%5Bjsrctype%5Ename=MapStepDao%5Bjcu%5Ename=MapStepDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D$uml.InterfaceRealization"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ALWw6N5mEdyZfZ-HsR_CLw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_ALWw8N5mEdyZfZ-HsR_CLw" source="_N89OAdqUEdyZfZ-HsR_CLw" target="_N8zdJNqUEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_ALWw895mEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_ALWw9d5mEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_ALWw995mEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_ALWw9t5mEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_ALWw9N5mEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_ALWw8d5mEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=JobExecution%5Bjcu%5Ename=JobExecution.java%5Bjpack%5Ename=org.springframework.batch.core.domain%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-core%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ALWw8t5mEdyZfZ-HsR_CLw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
|
||||
</edges>
|
||||
<edges xmi:id="_ALWw_95mEdyZfZ-HsR_CLw" source="_N89OAdqUEdyZfZ-HsR_CLw" target="_ALWw2t5mEdyZfZ-HsR_CLw">
|
||||
<children xmi:id="_ALWxAt5mEdyZfZ-HsR_CLw" type="KindLabel">
|
||||
<children xmi:id="_ALWxBN5mEdyZfZ-HsR_CLw" type="Stereotype"/>
|
||||
<children xmi:id="_ALWxBt5mEdyZfZ-HsR_CLw" type="Kind"/>
|
||||
<children xmi:id="_ALWxBd5mEdyZfZ-HsR_CLw" type="Name"/>
|
||||
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_ALWxA95mEdyZfZ-HsR_CLw" y="-186"/>
|
||||
</children>
|
||||
<styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_ALWxAN5mEdyZfZ-HsR_CLw" showStereotype="Text"/>
|
||||
<element xmi:type="uml:Usage" href="mmi:///#jdep%5Bjsrctype%5Ename=StepExecutionDao%5Bjcu%5Ename=StepExecutionDao.java%5Bjpack%5Ename=org.springframework.batch.execution.repository.dao%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-execution%5D%5D%5D%5D%5D%5Bjsrctype%5Ename=ExecutionContext%5Bjcu%5Ename=ExecutionContext.java%5Bjpack%5Ename=org.springframework.batch.item%5Bjsrcroot%5Esrcfolder=src/main/java%5Bproject%5Eid=spring-batch-infrastructure%5D%5D%5D%5D%5D$uml.Usage"/>
|
||||
<bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ALWxAd5mEdyZfZ-HsR_CLw" points="[-13, 2038, -13, -7011]$[-13, 3625, -13, -5424]"/>
|
||||
</edges>
|
||||
</notation:Diagram>
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="batch-job-testing">
|
||||
<title>Batch Unit and Integration Tests</title>
|
||||
|
||||
<section>
|
||||
<title id="bjt.1">Unit Testing</title>
|
||||
<para>Document Batch Job Unit Testing features. This includes the use of Mock Objects,
|
||||
embedded database (HSQLDB), etc. </para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="bjt.2">Integration Testing</title>
|
||||
<para>Document how to test against the targeted database, applications, etc.</para>
|
||||
</section>
|
||||
|
||||
</chapter>
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="batch-job-testing">
|
||||
<title>Batch Unit and Integration Tests</title>
|
||||
|
||||
<section>
|
||||
<title id="bjt.1">Unit Testing</title>
|
||||
<para>Document Batch Job Unit Testing features. This includes the use of Mock Objects,
|
||||
embedded database (HSQLDB), etc. </para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="bjt.2">Integration Testing</title>
|
||||
<para>Document how to test against the targeted database, applications, etc.</para>
|
||||
</section>
|
||||
|
||||
</chapter>
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="batch-launch">
|
||||
<title>Run Tier - Launching Batch Jobs</title>
|
||||
<section>
|
||||
<title id="bl.1">Mapping Batch Error Codes to Launch Client Error Codes</title>
|
||||
<para>Mapping Batch Error Codes to Launch Client Error Codes</para>
|
||||
</section>
|
||||
<section>
|
||||
<title id="bl.2">Launch Batch from Command Line</title>
|
||||
<para>Document Command Line Launching</para>
|
||||
</section>
|
||||
<section>
|
||||
<title id="bl.3">Launch Batch On Demand</title>
|
||||
<para>Document Launching Batch Jobs on Demand</para>
|
||||
</section>
|
||||
</chapter>
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="batch-launch">
|
||||
<title>Run Tier - Launching Batch Jobs</title>
|
||||
<section>
|
||||
<title id="bl.1">Mapping Batch Error Codes to Launch Client Error Codes</title>
|
||||
<para>Mapping Batch Error Codes to Launch Client Error Codes</para>
|
||||
</section>
|
||||
<section>
|
||||
<title id="bl.2">Launch Batch from Command Line</title>
|
||||
<para>Document Command Line Launching</para>
|
||||
</section>
|
||||
<section>
|
||||
<title id="bl.3">Launch Batch On Demand</title>
|
||||
<para>Document Launching Batch Jobs on Demand</para>
|
||||
</section>
|
||||
</chapter>
|
||||
|
||||
@@ -1,52 +1,52 @@
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="batch-performance-testing">
|
||||
<title>Batch Performance Testing</title>
|
||||
<section>
|
||||
<title id="bpt.1">Performance Testing Overview</title>
|
||||
<para>A batch performance test team needs to have the following at their disposal:
|
||||
</para>
|
||||
<para>
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
Define performance Targets -
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Establishing the requirements for a performance testing environment -
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Performance Data - generating adequate volumes of realistic data for performance testing
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Performance Tools -
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Performance Team Roles - Tool SME's, performance DBA.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="bpt.2">Defining Performance Targets</title>
|
||||
<para></para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="bpt.3">Establishing Performance requirements and installing the environment.</title>
|
||||
<para>Establishing the requirements for the performance environment. </para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="bpt.4">Performance Data</title>
|
||||
<para>Generating adequate volumes of realistic data for performance testing.</para>
|
||||
</section>
|
||||
<section>
|
||||
<title id="bpt.5">Performance Tools</title>
|
||||
<para></para>
|
||||
</section>
|
||||
<section>
|
||||
<title id="bpt.6">Performance Team Roles</title>
|
||||
<para>Tool SME's, performance dba's, environment experts (OS, JVM, etc.)</para>
|
||||
</section>
|
||||
</chapter>
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="batch-performance-testing">
|
||||
<title>Batch Performance Testing</title>
|
||||
<section>
|
||||
<title id="bpt.1">Performance Testing Overview</title>
|
||||
<para>A batch performance test team needs to have the following at their disposal:
|
||||
</para>
|
||||
<para>
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
Define performance Targets -
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Establishing the requirements for a performance testing environment -
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Performance Data - generating adequate volumes of realistic data for performance testing
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Performance Tools -
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Performance Team Roles - Tool SME's, performance DBA.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="bpt.2">Defining Performance Targets</title>
|
||||
<para></para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="bpt.3">Establishing Performance requirements and installing the environment.</title>
|
||||
<para>Establishing the requirements for the performance environment. </para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="bpt.4">Performance Data</title>
|
||||
<para>Generating adequate volumes of realistic data for performance testing.</para>
|
||||
</section>
|
||||
<section>
|
||||
<title id="bpt.5">Performance Tools</title>
|
||||
<para></para>
|
||||
</section>
|
||||
<section>
|
||||
<title id="bpt.6">Performance Team Roles</title>
|
||||
<para>Tool SME's, performance dba's, environment experts (OS, JVM, etc.)</para>
|
||||
</section>
|
||||
</chapter>
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="namespace">
|
||||
<title>Namespace Support</title>
|
||||
|
||||
<section>
|
||||
<title id="ns.1">Namespace Support</title>
|
||||
<para>Document Namespace support here. </para>
|
||||
</section>
|
||||
|
||||
</chapter>
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="namespace">
|
||||
<title>Namespace Support</title>
|
||||
|
||||
<section>
|
||||
<title id="ns.1">Namespace Support</title>
|
||||
<para>Document Namespace support here. </para>
|
||||
</section>
|
||||
|
||||
</chapter>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="Partitioned Containers">
|
||||
<title>Batch IO Support</title>
|
||||
<section>
|
||||
<title id="s.1">Partitioned Containers</title>
|
||||
<para>Much stuff goes here.</para>
|
||||
</section>
|
||||
|
||||
</chapter>
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="Partitioned Containers">
|
||||
<title>Batch IO Support</title>
|
||||
<section>
|
||||
<title id="s.1">Partitioned Containers</title>
|
||||
<para>Much stuff goes here.</para>
|
||||
</section>
|
||||
|
||||
</chapter>
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="spring-tasklet">
|
||||
<title>Tasklet and the Repeat Template</title>
|
||||
|
||||
<section>
|
||||
<title id="sp.1">What is a Tasklet?</title>
|
||||
<para>Document what a Tasklet is. Include the diagram of showing its place in the batch domain world.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="sp.2">Item Providers</title>
|
||||
<para>Document Item Providers. Discuss some default item providers</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="sp.3">Item Processor</title>
|
||||
<para>Talk about default Item Processor</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="sp.4">Item Provider Process Tasklet</title>
|
||||
<para>Don't worry about how all the pieces work but focus on Talk about default Item Processor</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="sp.5">The role of the Repeat Template</title>
|
||||
<para>The two repeat templates used by ItemProcessor.</para>
|
||||
</section>
|
||||
</chapter>
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
||||
<chapter id="spring-tasklet">
|
||||
<title>Tasklet and the Repeat Template</title>
|
||||
|
||||
<section>
|
||||
<title id="sp.1">What is a Tasklet?</title>
|
||||
<para>Document what a Tasklet is. Include the diagram of showing its place in the batch domain world.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="sp.2">Item Providers</title>
|
||||
<para>Document Item Providers. Discuss some default item providers</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="sp.3">Item Processor</title>
|
||||
<para>Talk about default Item Processor</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="sp.4">Item Provider Process Tasklet</title>
|
||||
<para>Don't worry about how all the pieces work but focus on Talk about default Item Processor</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title id="sp.5">The role of the Repeat Template</title>
|
||||
<para>The two repeat templates used by ItemProcessor.</para>
|
||||
</section>
|
||||
</chapter>
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>spring-batch-core</name>
|
||||
<comment>Core domain for batch processing, expressing a domain of Jobs, Steps, Chunks, etc.</comment>
|
||||
<projects>
|
||||
<project>spring-batch-infrastructure</project>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.springframework.ide.eclipse.core.springbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.springframework.ide.eclipse.core.springnature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>spring-batch-core</name>
|
||||
<comment>Core domain for batch processing, expressing a domain of Jobs, Steps, Chunks, etc.</comment>
|
||||
<projects>
|
||||
<project>spring-batch-infrastructure</project>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.springframework.ide.eclipse.core.springbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.springframework.ide.eclipse.core.springnature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#Mon Dec 10 14:44:35 EST 2007
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.source=1.4
|
||||
org.eclipse.jdt.core.compiler.compliance=1.4
|
||||
#Mon Dec 10 14:44:35 EST 2007
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.source=1.4
|
||||
org.eclipse.jdt.core.compiler.compliance=1.4
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#Thu Aug 23 07:01:16 BST 2007
|
||||
eclipse.preferences.version=1
|
||||
project.repository.kind=jira
|
||||
project.repository.url=http\://opensource.atlassian.com/projects/spring
|
||||
#Thu Aug 23 07:01:16 BST 2007
|
||||
eclipse.preferences.version=1
|
||||
project.repository.kind=jira
|
||||
project.repository.url=http\://opensource.atlassian.com/projects/spring
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beansProjectDescription>
|
||||
<configExtensions>
|
||||
<configExtension>xml</configExtension>
|
||||
</configExtensions>
|
||||
<configs>
|
||||
</configs>
|
||||
<configSets>
|
||||
<configSet>
|
||||
<name><![CDATA[sqlDaoTest]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
</configs>
|
||||
</configSet>
|
||||
<configSet>
|
||||
<name><![CDATA[hibernateDaoTest]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
</configs>
|
||||
</configSet>
|
||||
<configSet>
|
||||
<name><![CDATA[launcher]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
</configs>
|
||||
</configSet>
|
||||
</configSets>
|
||||
</beansProjectDescription>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beansProjectDescription>
|
||||
<configExtensions>
|
||||
<configExtension>xml</configExtension>
|
||||
</configExtensions>
|
||||
<configs>
|
||||
</configs>
|
||||
<configSets>
|
||||
<configSet>
|
||||
<name><![CDATA[sqlDaoTest]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
</configs>
|
||||
</configSet>
|
||||
<configSet>
|
||||
<name><![CDATA[hibernateDaoTest]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
</configs>
|
||||
</configSet>
|
||||
<configSet>
|
||||
<name><![CDATA[launcher]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
</configs>
|
||||
</configSet>
|
||||
</configSets>
|
||||
</beansProjectDescription>
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.configuration;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.repository.NoSuchJobException;
|
||||
|
||||
/**
|
||||
* A runtime service locator interface for retrieving job configurations by
|
||||
* <code>name</code>.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface JobLocator {
|
||||
|
||||
/**
|
||||
* Locates a {@link Job} at runtime.
|
||||
*
|
||||
* @param name the name of the {@link Job} which should be
|
||||
* unique
|
||||
* @return a {@link Job} identified by the given name
|
||||
*
|
||||
* @throws NoSuchJobException if the required configuration can
|
||||
* not be found.
|
||||
*/
|
||||
Job getJob(String name) throws NoSuchJobException;
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.configuration;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.repository.NoSuchJobException;
|
||||
|
||||
/**
|
||||
* A runtime service locator interface for retrieving job configurations by
|
||||
* <code>name</code>.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface JobLocator {
|
||||
|
||||
/**
|
||||
* Locates a {@link Job} at runtime.
|
||||
*
|
||||
* @param name the name of the {@link Job} which should be
|
||||
* unique
|
||||
* @return a {@link Job} identified by the given name
|
||||
*
|
||||
* @throws NoSuchJobException if the required configuration can
|
||||
* not be found.
|
||||
*/
|
||||
Job getJob(String name) throws NoSuchJobException;
|
||||
}
|
||||
|
||||
@@ -1,47 +1,47 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.configuration;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
|
||||
/**
|
||||
* A runtime service registry interface for registering job configurations by
|
||||
* <code>name</code>.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface JobRegistry extends JobLocator {
|
||||
|
||||
/**
|
||||
* Registers a {@link Job} at runtime.
|
||||
*
|
||||
* @param jobFactory the {@link Job} to be registered
|
||||
*
|
||||
* @throws DuplicateJobException if a factory with the same job name has
|
||||
* already been registered.
|
||||
*/
|
||||
void register(JobFactory jobFactory) throws DuplicateJobException;
|
||||
|
||||
/**
|
||||
* Unregisters a previously registered {@link Job}. If it was not
|
||||
* previously registered there is no error.
|
||||
*
|
||||
* @param jobName the {@link Job} to unregister.
|
||||
*/
|
||||
void unregister(String jobName);
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.configuration;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
|
||||
/**
|
||||
* A runtime service registry interface for registering job configurations by
|
||||
* <code>name</code>.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface JobRegistry extends JobLocator {
|
||||
|
||||
/**
|
||||
* Registers a {@link Job} at runtime.
|
||||
*
|
||||
* @param jobFactory the {@link Job} to be registered
|
||||
*
|
||||
* @throws DuplicateJobException if a factory with the same job name has
|
||||
* already been registered.
|
||||
*/
|
||||
void register(JobFactory jobFactory) throws DuplicateJobException;
|
||||
|
||||
/**
|
||||
* Unregisters a previously registered {@link Job}. If it was not
|
||||
* previously registered there is no error.
|
||||
*
|
||||
* @param jobName the {@link Job} to unregister.
|
||||
*/
|
||||
void unregister(String jobName);
|
||||
}
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.configuration;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* A listable extension of {@link JobRegistry}.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface ListableJobRegistry extends JobRegistry {
|
||||
|
||||
/**
|
||||
* Provides the currently registered job names. The return value is
|
||||
* unmodifiable and disconnected from the underlying registry storage.
|
||||
*
|
||||
* @return a collection of String. Empty if none are registered.
|
||||
*/
|
||||
Collection getJobNames();
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.configuration;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* A listable extension of {@link JobRegistry}.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface ListableJobRegistry extends JobRegistry {
|
||||
|
||||
/**
|
||||
* Provides the currently registered job names. The return value is
|
||||
* unmodifiable and disconnected from the underlying registry storage.
|
||||
*
|
||||
* @return a collection of String. Empty if none are registered.
|
||||
*/
|
||||
Collection getJobNames();
|
||||
}
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExecutionException extends Exception {
|
||||
|
||||
public JobExecutionException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public JobExecutionException(String msg, Throwable cause) {
|
||||
super(msg, cause);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExecutionException extends Exception {
|
||||
|
||||
public JobExecutionException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public JobExecutionException(String msg, Throwable cause) {
|
||||
super(msg, cause);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,65 +1,65 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import org.springframework.batch.io.exception.InfrastructureException;
|
||||
|
||||
/**
|
||||
* Batch domain interface representing the configuration of a step. As with the
|
||||
* (@link Job), a {@link Step} is meant to explicitly represent a the
|
||||
* configuration of a step by a developer, but also the ability to execute the
|
||||
* step.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface Step {
|
||||
|
||||
/**
|
||||
* @return the name of this step.
|
||||
*/
|
||||
String getName();
|
||||
|
||||
/**
|
||||
* @return true if a step that is already marked as complete can be started
|
||||
* again.
|
||||
*/
|
||||
boolean isAllowStartIfComplete();
|
||||
|
||||
/**
|
||||
* @return the number of times a job can be started with the same
|
||||
* identifier.
|
||||
*/
|
||||
int getStartLimit();
|
||||
|
||||
/**
|
||||
* Process the step and assign progress and status meta information to the
|
||||
* {@link StepExecution} provided. The {@link Step} is responsible for
|
||||
* setting the meta information and also saving it if required by the
|
||||
* implementation.<br/>
|
||||
*
|
||||
* It is not safe to re-use an instance of {@link Step} to process multiple
|
||||
* concurrent executions.
|
||||
*
|
||||
* @param stepExecution an entity representing the step to be executed
|
||||
*
|
||||
* @throws JobInterruptedException if the step is interrupted externally
|
||||
* @throws InfrastructureException if there is a problem that needs to be
|
||||
* signalled to the caller
|
||||
*/
|
||||
void execute(StepExecution stepExecution) throws JobInterruptedException, InfrastructureException;
|
||||
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import org.springframework.batch.io.exception.InfrastructureException;
|
||||
|
||||
/**
|
||||
* Batch domain interface representing the configuration of a step. As with the
|
||||
* (@link Job), a {@link Step} is meant to explicitly represent a the
|
||||
* configuration of a step by a developer, but also the ability to execute the
|
||||
* step.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface Step {
|
||||
|
||||
/**
|
||||
* @return the name of this step.
|
||||
*/
|
||||
String getName();
|
||||
|
||||
/**
|
||||
* @return true if a step that is already marked as complete can be started
|
||||
* again.
|
||||
*/
|
||||
boolean isAllowStartIfComplete();
|
||||
|
||||
/**
|
||||
* @return the number of times a job can be started with the same
|
||||
* identifier.
|
||||
*/
|
||||
int getStartLimit();
|
||||
|
||||
/**
|
||||
* Process the step and assign progress and status meta information to the
|
||||
* {@link StepExecution} provided. The {@link Step} is responsible for
|
||||
* setting the meta information and also saving it if required by the
|
||||
* implementation.<br/>
|
||||
*
|
||||
* It is not safe to re-use an instance of {@link Step} to process multiple
|
||||
* concurrent executions.
|
||||
*
|
||||
* @param stepExecution an entity representing the step to be executed
|
||||
*
|
||||
* @throws JobInterruptedException if the step is interrupted externally
|
||||
* @throws InfrastructureException if there is a problem that needs to be
|
||||
* signalled to the caller
|
||||
*/
|
||||
void execute(StepExecution stepExecution) throws JobInterruptedException, InfrastructureException;
|
||||
|
||||
}
|
||||
@@ -1,44 +1,44 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
|
||||
/**
|
||||
* Checked exception that indicates a name clash when registering
|
||||
* {@link Job} instances.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class DuplicateJobException extends JobException {
|
||||
|
||||
/**
|
||||
* Create an exception with the given message.
|
||||
*/
|
||||
public DuplicateJobException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg The message to send to caller
|
||||
* @param e the cause of the exception
|
||||
*/
|
||||
public DuplicateJobException(String msg, Throwable e) {
|
||||
super(msg, e);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
|
||||
/**
|
||||
* Checked exception that indicates a name clash when registering
|
||||
* {@link Job} instances.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class DuplicateJobException extends JobException {
|
||||
|
||||
/**
|
||||
* Create an exception with the given message.
|
||||
*/
|
||||
public DuplicateJobException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg The message to send to caller
|
||||
* @param e the cause of the exception
|
||||
*/
|
||||
public DuplicateJobException(String msg, Throwable e) {
|
||||
super(msg, e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
|
||||
/**
|
||||
* Base class for checked exceptions related to {@link Job}
|
||||
* creation, registration or use.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobException extends Exception {
|
||||
|
||||
/**
|
||||
* Create an exception with the given message.
|
||||
*/
|
||||
public JobException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg The message to send to caller
|
||||
* @param e the cause of the exception
|
||||
*/
|
||||
public JobException(String msg, Throwable e) {
|
||||
super(msg, e);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
|
||||
/**
|
||||
* Base class for checked exceptions related to {@link Job}
|
||||
* creation, registration or use.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobException extends Exception {
|
||||
|
||||
/**
|
||||
* Create an exception with the given message.
|
||||
*/
|
||||
public JobException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg The message to send to caller
|
||||
* @param e the cause of the exception
|
||||
*/
|
||||
public JobException(String msg, Throwable e) {
|
||||
super(msg, e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecutionException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExecutionAlreadyRunningException extends JobExecutionException {
|
||||
|
||||
/**
|
||||
* @param msg
|
||||
*/
|
||||
public JobExecutionAlreadyRunningException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg
|
||||
* @param cause
|
||||
*/
|
||||
public JobExecutionAlreadyRunningException(String msg, Throwable cause) {
|
||||
super(msg, cause);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecutionException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExecutionAlreadyRunningException extends JobExecutionException {
|
||||
|
||||
/**
|
||||
* @param msg
|
||||
*/
|
||||
public JobExecutionAlreadyRunningException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg
|
||||
* @param cause
|
||||
*/
|
||||
public JobExecutionAlreadyRunningException(String msg, Throwable cause) {
|
||||
super(msg, cause);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
/**
|
||||
* An exception indicating an illegal attempt to restart a job.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobRestartException extends JobException {
|
||||
|
||||
/**
|
||||
* @param string the message
|
||||
*/
|
||||
public JobRestartException(String string) {
|
||||
super(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg the cause
|
||||
* @param t the message
|
||||
*/
|
||||
public JobRestartException(String msg, Throwable t) {
|
||||
super(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
/**
|
||||
* An exception indicating an illegal attempt to restart a job.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobRestartException extends JobException {
|
||||
|
||||
/**
|
||||
* @param string the message
|
||||
*/
|
||||
public JobRestartException(String string) {
|
||||
super(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg the cause
|
||||
* @param t the message
|
||||
*/
|
||||
public JobRestartException(String msg, Throwable t) {
|
||||
super(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,46 +1,46 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
|
||||
|
||||
/**
|
||||
* Checked exception to indicate that a required {@link Job} is not
|
||||
* available.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class NoSuchJobException extends JobException {
|
||||
|
||||
private static final long serialVersionUID = -8044082897778706564L;
|
||||
|
||||
/**
|
||||
* Create an exception with the given message.
|
||||
*/
|
||||
public NoSuchJobException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg The message to send to caller
|
||||
* @param e the cause of the exception
|
||||
*/
|
||||
public NoSuchJobException(String msg, Throwable e) {
|
||||
super(msg, e);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
|
||||
|
||||
/**
|
||||
* Checked exception to indicate that a required {@link Job} is not
|
||||
* available.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class NoSuchJobException extends JobException {
|
||||
|
||||
private static final long serialVersionUID = -8044082897778706564L;
|
||||
|
||||
/**
|
||||
* Create an exception with the given message.
|
||||
*/
|
||||
public NoSuchJobException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg The message to send to caller
|
||||
* @param e the cause of the exception
|
||||
*/
|
||||
public NoSuchJobException(String msg, Throwable e) {
|
||||
super(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.runtime;
|
||||
|
||||
import org.springframework.batch.common.ExceptionClassifier;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* Extension of the {@link ExceptionClassifier} that explicitly deals with
|
||||
* returns an {@link ExitStatus}. This is useful for mapping from an exception
|
||||
* type to an exit status with a customised code or detailed message.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
*
|
||||
*/
|
||||
public interface ExitStatusExceptionClassifier extends ExceptionClassifier {
|
||||
|
||||
public static final String FATAL_EXCEPTION = "FATAL_EXCEPTION";
|
||||
|
||||
public static final String JOB_INTERRUPTED = "JOB_INTERRUPTED";
|
||||
|
||||
/**
|
||||
* Typesafe version of classify that explicitly returns an
|
||||
* {@link ExitStatus} object.
|
||||
*
|
||||
* @param throwable
|
||||
* @return ExitStatus representing the ExitCode and Message for the given
|
||||
* exception.
|
||||
*/
|
||||
public ExitStatus classifyForExitCode(Throwable throwable);
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.runtime;
|
||||
|
||||
import org.springframework.batch.common.ExceptionClassifier;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* Extension of the {@link ExceptionClassifier} that explicitly deals with
|
||||
* returns an {@link ExitStatus}. This is useful for mapping from an exception
|
||||
* type to an exit status with a customised code or detailed message.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
*
|
||||
*/
|
||||
public interface ExitStatusExceptionClassifier extends ExceptionClassifier {
|
||||
|
||||
public static final String FATAL_EXCEPTION = "FATAL_EXCEPTION";
|
||||
|
||||
public static final String JOB_INTERRUPTED = "JOB_INTERRUPTED";
|
||||
|
||||
/**
|
||||
* Typesafe version of classify that explicitly returns an
|
||||
* {@link ExitStatus} object.
|
||||
*
|
||||
* @param throwable
|
||||
* @return ExitStatus representing the ExitCode and Message for the given
|
||||
* exception.
|
||||
*/
|
||||
public ExitStatus classifyForExitCode(Throwable throwable);
|
||||
}
|
||||
|
||||
@@ -1,83 +1,83 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class BatchStatusTests extends TestCase {
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.BatchStatus#toString()}.
|
||||
*/
|
||||
public void testToString() {
|
||||
assertEquals("FAILED", BatchStatus.FAILED.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.BatchStatus#getStatus(java.lang.String)}.
|
||||
*/
|
||||
public void testGetStatus() {
|
||||
assertEquals(BatchStatus.FAILED, BatchStatus.getStatus(BatchStatus.FAILED.toString()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.BatchStatus#getStatus(java.lang.String)}.
|
||||
*/
|
||||
public void testGetStatusWrongCode() {
|
||||
try {
|
||||
BatchStatus.getStatus("foo");
|
||||
fail();
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.BatchStatus#getStatus(java.lang.String)}.
|
||||
*/
|
||||
public void testGetStatusNullCode() {
|
||||
assertNull(BatchStatus.getStatus(null));
|
||||
}
|
||||
|
||||
public void testSerialization() throws Exception {
|
||||
|
||||
ByteArrayOutputStream bout = new ByteArrayOutputStream();
|
||||
ObjectOutputStream out = new ObjectOutputStream(bout);
|
||||
|
||||
out.writeObject(BatchStatus.COMPLETED);
|
||||
out.flush();
|
||||
|
||||
ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
|
||||
ObjectInputStream in = new ObjectInputStream(bin);
|
||||
|
||||
BatchStatus status = (BatchStatus) in.readObject();
|
||||
assertEquals(BatchStatus.COMPLETED, status);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class BatchStatusTests extends TestCase {
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.BatchStatus#toString()}.
|
||||
*/
|
||||
public void testToString() {
|
||||
assertEquals("FAILED", BatchStatus.FAILED.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.BatchStatus#getStatus(java.lang.String)}.
|
||||
*/
|
||||
public void testGetStatus() {
|
||||
assertEquals(BatchStatus.FAILED, BatchStatus.getStatus(BatchStatus.FAILED.toString()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.BatchStatus#getStatus(java.lang.String)}.
|
||||
*/
|
||||
public void testGetStatusWrongCode() {
|
||||
try {
|
||||
BatchStatus.getStatus("foo");
|
||||
fail();
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.BatchStatus#getStatus(java.lang.String)}.
|
||||
*/
|
||||
public void testGetStatusNullCode() {
|
||||
assertNull(BatchStatus.getStatus(null));
|
||||
}
|
||||
|
||||
public void testSerialization() throws Exception {
|
||||
|
||||
ByteArrayOutputStream bout = new ByteArrayOutputStream();
|
||||
ObjectOutputStream out = new ObjectOutputStream(bout);
|
||||
|
||||
out.writeObject(BatchStatus.COMPLETED);
|
||||
out.flush();
|
||||
|
||||
ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
|
||||
ObjectInputStream in = new ObjectInputStream(bin);
|
||||
|
||||
BatchStatus status = (BatchStatus) in.readObject();
|
||||
assertEquals(BatchStatus.COMPLETED, status);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,128 +1,128 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class EntityTests extends TestCase {
|
||||
|
||||
Entity entity = new Entity(new Long(11));
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#hashCode()}.
|
||||
*/
|
||||
public void testHashCode() {
|
||||
assertEquals(entity.hashCode(), new Entity(entity.getId()).hashCode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#hashCode()}.
|
||||
*/
|
||||
public void testHashCodeNullId() {
|
||||
int withoutNull = entity.hashCode();
|
||||
entity.setId(null);
|
||||
int withNull = entity.hashCode();
|
||||
assertTrue(withoutNull!=withNull);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#getVersion()}.
|
||||
*/
|
||||
public void testGetVersion() {
|
||||
assertEquals(null, entity.getVersion());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#getVersion()}.
|
||||
*/
|
||||
public void testIncrementVersion() {
|
||||
entity.incrementVersion();
|
||||
assertEquals(new Integer(0), entity.getVersion());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#getVersion()}.
|
||||
*/
|
||||
public void testIncrementVersionTwice() {
|
||||
entity.incrementVersion();
|
||||
entity.incrementVersion();
|
||||
assertEquals(new Integer(1), entity.getVersion());
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testToString() throws Exception {
|
||||
Entity job = new Entity();
|
||||
assertTrue(job.toString().indexOf("id=null") >= 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsSelf() {
|
||||
assertEquals(entity, entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsSelfWithNullId() {
|
||||
entity = new Entity(null);
|
||||
assertEquals(entity, entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsEntityWithNullId() {
|
||||
entity = new Entity(null);
|
||||
assertNotSame(entity, new Entity(null));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsEntity() {
|
||||
assertEquals(entity, new Entity(entity.getId()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsEntityWrongId() {
|
||||
assertFalse(entity.equals(new Entity()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsObject() {
|
||||
assertFalse(entity.equals(new Object()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsNull() {
|
||||
assertFalse(entity.equals(null));
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class EntityTests extends TestCase {
|
||||
|
||||
Entity entity = new Entity(new Long(11));
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#hashCode()}.
|
||||
*/
|
||||
public void testHashCode() {
|
||||
assertEquals(entity.hashCode(), new Entity(entity.getId()).hashCode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#hashCode()}.
|
||||
*/
|
||||
public void testHashCodeNullId() {
|
||||
int withoutNull = entity.hashCode();
|
||||
entity.setId(null);
|
||||
int withNull = entity.hashCode();
|
||||
assertTrue(withoutNull!=withNull);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#getVersion()}.
|
||||
*/
|
||||
public void testGetVersion() {
|
||||
assertEquals(null, entity.getVersion());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#getVersion()}.
|
||||
*/
|
||||
public void testIncrementVersion() {
|
||||
entity.incrementVersion();
|
||||
assertEquals(new Integer(0), entity.getVersion());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#getVersion()}.
|
||||
*/
|
||||
public void testIncrementVersionTwice() {
|
||||
entity.incrementVersion();
|
||||
entity.incrementVersion();
|
||||
assertEquals(new Integer(1), entity.getVersion());
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testToString() throws Exception {
|
||||
Entity job = new Entity();
|
||||
assertTrue(job.toString().indexOf("id=null") >= 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsSelf() {
|
||||
assertEquals(entity, entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsSelfWithNullId() {
|
||||
entity = new Entity(null);
|
||||
assertEquals(entity, entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsEntityWithNullId() {
|
||||
entity = new Entity(null);
|
||||
assertNotSame(entity, new Entity(null));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsEntity() {
|
||||
assertEquals(entity, new Entity(entity.getId()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsEntityWrongId() {
|
||||
assertFalse(entity.equals(new Entity()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsObject() {
|
||||
assertFalse(entity.equals(new Object()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.Entity#equals(java.lang.Object)}.
|
||||
*/
|
||||
public void testEqualsNull() {
|
||||
assertFalse(entity.equals(null));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
import org.springframework.batch.core.domain.JobExecutionException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExecutionExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new JobExecutionException(msg);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String, java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new JobExecutionException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
import org.springframework.batch.core.domain.JobExecutionException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExecutionExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new JobExecutionException(msg);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String, java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new JobExecutionException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,155 +1,155 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExecutionTests extends TestCase {
|
||||
|
||||
private JobExecution execution = new JobExecution(new JobInstance(new Long(11), new JobParameters(), new JobSupport("foo")), new Long(12));
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#JobExecution()}.
|
||||
*/
|
||||
public void testJobExecution() {
|
||||
assertNull(new JobExecution().getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getEndTime()}.
|
||||
*/
|
||||
public void testGetEndTime() {
|
||||
assertNull(execution.getEndTime());
|
||||
execution.setEndTime(new Date(100L));
|
||||
assertEquals(100L, execution.getEndTime().getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getEndTime()}.
|
||||
*/
|
||||
public void testIsRunning() {
|
||||
assertTrue(execution.isRunning());
|
||||
execution.setEndTime(new Date(100L));
|
||||
assertFalse(execution.isRunning());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getEndTime()}.
|
||||
*/
|
||||
public void testIsRunningWithStoppedExecution() {
|
||||
assertTrue(execution.isRunning());
|
||||
execution.stop();
|
||||
assertTrue(execution.isRunning());
|
||||
assertTrue(execution.isStopping());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getStartTime()}.
|
||||
*/
|
||||
public void testGetStartTime() {
|
||||
assertNull(execution.getStartTime());
|
||||
execution.setStartTime(new Date(0L));
|
||||
assertEquals(0L, execution.getStartTime().getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getStatus()}.
|
||||
*/
|
||||
public void testGetStatus() {
|
||||
assertEquals(BatchStatus.STARTING, execution.getStatus());
|
||||
execution.setStatus(BatchStatus.COMPLETED);
|
||||
assertEquals(BatchStatus.COMPLETED, execution.getStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getJobId()}.
|
||||
*/
|
||||
public void testGetJobId() {
|
||||
assertEquals(11, execution.getJobId().longValue());
|
||||
execution = new JobExecution(new JobInstance(new Long(23), new JobParameters(), new JobSupport("testJob")), null);
|
||||
assertEquals(23, execution.getJobId().longValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getJobId()}.
|
||||
*/
|
||||
public void testGetJobIdForNullJob() {
|
||||
execution = new JobExecution(null);
|
||||
assertEquals(null, execution.getJobId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getJobId()}.
|
||||
*/
|
||||
public void testGetJob() {
|
||||
assertNotNull(execution.getJobInstance());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getExitStatus()}.
|
||||
*/
|
||||
public void testGetExitCode() {
|
||||
assertEquals(ExitStatus.UNKNOWN, execution.getExitStatus());
|
||||
execution.setExitStatus(new ExitStatus(true, "23"));
|
||||
assertEquals("23", execution.getExitStatus().getExitCode());
|
||||
}
|
||||
|
||||
public void testContextContainsInfo() throws Exception {
|
||||
assertEquals("foo", execution.getJobInstance().getJobName());
|
||||
}
|
||||
|
||||
public void testAddAndRemoveStepExecution() throws Exception {
|
||||
assertEquals(0, execution.getStepExecutions().size());
|
||||
execution.createStepExecution(new StepSupport("stepName"));
|
||||
assertEquals(1, execution.getStepExecutions().size());
|
||||
}
|
||||
|
||||
public void testStop() throws Exception {
|
||||
StepExecution stepExecution = execution.createStepExecution(new StepSupport("stepName"));
|
||||
assertFalse(stepExecution.isTerminateOnly());
|
||||
execution.stop();
|
||||
assertTrue(stepExecution.isTerminateOnly());
|
||||
}
|
||||
|
||||
public void testToString() throws Exception {
|
||||
assertTrue("JobExecution string does not contain id", execution.toString().indexOf("id=") >= 0);
|
||||
assertTrue("JobExecution string does not contain name: " + execution, execution.toString().indexOf("foo") >= 0);
|
||||
}
|
||||
|
||||
public void testToStringWithNullJob() throws Exception {
|
||||
execution = new JobExecution();
|
||||
assertTrue("JobExecution string does not contain id", execution.toString().indexOf("id=") >= 0);
|
||||
assertTrue("JobExecution string does not contain job: " + execution, execution.toString().indexOf("job=") >= 0);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExecutionTests extends TestCase {
|
||||
|
||||
private JobExecution execution = new JobExecution(new JobInstance(new Long(11), new JobParameters(), new JobSupport("foo")), new Long(12));
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#JobExecution()}.
|
||||
*/
|
||||
public void testJobExecution() {
|
||||
assertNull(new JobExecution().getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getEndTime()}.
|
||||
*/
|
||||
public void testGetEndTime() {
|
||||
assertNull(execution.getEndTime());
|
||||
execution.setEndTime(new Date(100L));
|
||||
assertEquals(100L, execution.getEndTime().getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getEndTime()}.
|
||||
*/
|
||||
public void testIsRunning() {
|
||||
assertTrue(execution.isRunning());
|
||||
execution.setEndTime(new Date(100L));
|
||||
assertFalse(execution.isRunning());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getEndTime()}.
|
||||
*/
|
||||
public void testIsRunningWithStoppedExecution() {
|
||||
assertTrue(execution.isRunning());
|
||||
execution.stop();
|
||||
assertTrue(execution.isRunning());
|
||||
assertTrue(execution.isStopping());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getStartTime()}.
|
||||
*/
|
||||
public void testGetStartTime() {
|
||||
assertNull(execution.getStartTime());
|
||||
execution.setStartTime(new Date(0L));
|
||||
assertEquals(0L, execution.getStartTime().getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getStatus()}.
|
||||
*/
|
||||
public void testGetStatus() {
|
||||
assertEquals(BatchStatus.STARTING, execution.getStatus());
|
||||
execution.setStatus(BatchStatus.COMPLETED);
|
||||
assertEquals(BatchStatus.COMPLETED, execution.getStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getJobId()}.
|
||||
*/
|
||||
public void testGetJobId() {
|
||||
assertEquals(11, execution.getJobId().longValue());
|
||||
execution = new JobExecution(new JobInstance(new Long(23), new JobParameters(), new JobSupport("testJob")), null);
|
||||
assertEquals(23, execution.getJobId().longValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getJobId()}.
|
||||
*/
|
||||
public void testGetJobIdForNullJob() {
|
||||
execution = new JobExecution(null);
|
||||
assertEquals(null, execution.getJobId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getJobId()}.
|
||||
*/
|
||||
public void testGetJob() {
|
||||
assertNotNull(execution.getJobInstance());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getExitStatus()}.
|
||||
*/
|
||||
public void testGetExitCode() {
|
||||
assertEquals(ExitStatus.UNKNOWN, execution.getExitStatus());
|
||||
execution.setExitStatus(new ExitStatus(true, "23"));
|
||||
assertEquals("23", execution.getExitStatus().getExitCode());
|
||||
}
|
||||
|
||||
public void testContextContainsInfo() throws Exception {
|
||||
assertEquals("foo", execution.getJobInstance().getJobName());
|
||||
}
|
||||
|
||||
public void testAddAndRemoveStepExecution() throws Exception {
|
||||
assertEquals(0, execution.getStepExecutions().size());
|
||||
execution.createStepExecution(new StepSupport("stepName"));
|
||||
assertEquals(1, execution.getStepExecutions().size());
|
||||
}
|
||||
|
||||
public void testStop() throws Exception {
|
||||
StepExecution stepExecution = execution.createStepExecution(new StepSupport("stepName"));
|
||||
assertFalse(stepExecution.isTerminateOnly());
|
||||
execution.stop();
|
||||
assertTrue(stepExecution.isTerminateOnly());
|
||||
}
|
||||
|
||||
public void testToString() throws Exception {
|
||||
assertTrue("JobExecution string does not contain id", execution.toString().indexOf("id=") >= 0);
|
||||
assertTrue("JobExecution string does not contain name: " + execution, execution.toString().indexOf("foo") >= 0);
|
||||
}
|
||||
|
||||
public void testToStringWithNullJob() throws Exception {
|
||||
execution = new JobExecution();
|
||||
assertTrue("JobExecution string does not contain id", execution.toString().indexOf("id=") >= 0);
|
||||
assertTrue("JobExecution string does not contain job: " + execution, execution.toString().indexOf("job=") >= 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,52 +1,52 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* @author dsyer
|
||||
*
|
||||
*/
|
||||
public class JobInstanceTests extends TestCase {
|
||||
|
||||
private JobInstance instance = new JobInstance(new Long(11), new JobParameters(), new JobSupport("job"));
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.JobInstance#getIdentifier()}.
|
||||
*/
|
||||
public void testGetName() {
|
||||
instance = new JobInstance(new Long(1), new JobParameters(), new JobSupport("foo"));
|
||||
assertEquals("foo", instance.getJobName());
|
||||
}
|
||||
|
||||
public void testGetJob(){
|
||||
assertEquals("job", instance.getJob().getName());
|
||||
}
|
||||
|
||||
public void testCreateWithNulls(){
|
||||
try {
|
||||
new JobInstance(null, null, null);
|
||||
fail("job instance can't exist without job specified");
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
// expected
|
||||
}
|
||||
instance = new JobInstance(null, null, new JobSupport("testJob"));
|
||||
assertEquals("testJob", instance.getJobName());
|
||||
assertEquals(0, instance.getJobParameters().getParameters().size());
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* @author dsyer
|
||||
*
|
||||
*/
|
||||
public class JobInstanceTests extends TestCase {
|
||||
|
||||
private JobInstance instance = new JobInstance(new Long(11), new JobParameters(), new JobSupport("job"));
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.JobInstance#getIdentifier()}.
|
||||
*/
|
||||
public void testGetName() {
|
||||
instance = new JobInstance(new Long(1), new JobParameters(), new JobSupport("foo"));
|
||||
assertEquals("foo", instance.getJobName());
|
||||
}
|
||||
|
||||
public void testGetJob(){
|
||||
assertEquals("job", instance.getJob().getName());
|
||||
}
|
||||
|
||||
public void testCreateWithNulls(){
|
||||
try {
|
||||
new JobInstance(null, null, null);
|
||||
fail("job instance can't exist without job specified");
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
// expected
|
||||
}
|
||||
instance = new JobInstance(null, null, new JobSupport("testJob"));
|
||||
assertEquals("testJob", instance.getJobName());
|
||||
assertEquals(0, instance.getJobParameters().getParameters().size());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
import org.springframework.batch.core.domain.JobInterruptedException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobInterruptedExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new JobInterruptedException(msg);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String, java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new RuntimeException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
import org.springframework.batch.core.domain.JobInterruptedException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobInterruptedExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new JobInterruptedException(msg);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String, java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new RuntimeException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,271 +1,271 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.item.ExecutionContext;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
import org.springframework.batch.support.PropertiesConverter;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class StepExecutionTests extends TestCase {
|
||||
|
||||
private StepExecution execution = newStepExecution(new StepSupport("stepName"),
|
||||
new Long(23));
|
||||
|
||||
private StepExecution blankExecution = new StepExecution(new StepSupport("blank"), new JobExecution());
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#JobExecution()}.
|
||||
*/
|
||||
public void testStepExecution() {
|
||||
assertNull(new StepExecution().getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#JobExecution()}.
|
||||
*/
|
||||
public void testStepExecutionWithNullId() {
|
||||
assertNull(new StepExecution(new StepSupport("stepName"), new JobExecution()).getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getEndTime()}.
|
||||
*/
|
||||
public void testGetEndTime() {
|
||||
assertNull(execution.getEndTime());
|
||||
execution.setEndTime(new Date(0L));
|
||||
assertEquals(0L, execution.getEndTime().getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getStartTime()}.
|
||||
*/
|
||||
public void testGetStartTime() {
|
||||
assertNotNull(execution.getStartTime());
|
||||
execution.setStartTime(new Date(10L));
|
||||
assertEquals(10L, execution.getStartTime().getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getStatus()}.
|
||||
*/
|
||||
public void testGetStatus() {
|
||||
assertEquals(BatchStatus.STARTING, execution.getStatus());
|
||||
execution.setStatus(BatchStatus.COMPLETED);
|
||||
assertEquals(BatchStatus.COMPLETED, execution.getStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getJobId()}.
|
||||
*/
|
||||
public void testGetJobId() {
|
||||
assertEquals(23, execution.getJobExecutionId().longValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getExitStatus()}.
|
||||
*/
|
||||
public void testGetExitCode() {
|
||||
assertEquals(ExitStatus.UNKNOWN, execution.getExitStatus());
|
||||
execution.setExitStatus(ExitStatus.FINISHED);
|
||||
assertEquals(ExitStatus.FINISHED, execution.getExitStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#incrementCommitCount()}.
|
||||
*/
|
||||
public void testIncrementCommitCount() {
|
||||
int before = execution.getCommitCount().intValue();
|
||||
execution.incrementCommitCount();
|
||||
int after = execution.getCommitCount().intValue();
|
||||
assertEquals(before + 1, after);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#incrementTaskCount()}.
|
||||
*/
|
||||
public void testIncrementLuwCount() {
|
||||
int before = execution.getTaskCount().intValue();
|
||||
execution.incrementTaskCount();
|
||||
int after = execution.getTaskCount().intValue();
|
||||
assertEquals(before + 1, after);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#rollback()}.
|
||||
*/
|
||||
public void testIncrementRollbackCount() {
|
||||
int before = execution.getRollbackCount().intValue();
|
||||
execution.rollback();
|
||||
int after = execution.getRollbackCount().intValue();
|
||||
assertEquals(before + 1, after);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#getCommitCount()}.
|
||||
*/
|
||||
public void testGetCommitCount() {
|
||||
execution.setCommitCount(123);
|
||||
assertEquals(123, execution.getCommitCount().intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#getTaskCount()}.
|
||||
*/
|
||||
public void testGetTaskCount() {
|
||||
execution.setTaskCount(123);
|
||||
assertEquals(123, execution.getTaskCount().intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#getRollbackCount()}.
|
||||
*/
|
||||
public void testGetRollbackCount() {
|
||||
execution.setRollbackCount(123);
|
||||
assertEquals(123, execution.getRollbackCount().intValue());
|
||||
}
|
||||
|
||||
public void testGetJobExecution() throws Exception {
|
||||
assertNotNull(execution.getJobExecution());
|
||||
}
|
||||
|
||||
public void testApplyContribution() throws Exception {
|
||||
StepContribution contribution = execution.createStepContribution();
|
||||
contribution.incrementCommitCount();
|
||||
execution.apply(contribution);
|
||||
assertEquals(new Integer(1), execution.getCommitCount());
|
||||
}
|
||||
|
||||
public void testTerminateOnly() throws Exception {
|
||||
assertFalse(execution.isTerminateOnly());
|
||||
execution.setTerminateOnly();
|
||||
assertTrue(execution.isTerminateOnly());
|
||||
}
|
||||
|
||||
public void testToStringWithNullName() throws Exception {
|
||||
String value = new StepExecution(new StepSupport(null), new JobExecution()).toString();
|
||||
assertTrue("Should contain name=null: "+value, value.indexOf("name=null")>=0);
|
||||
}
|
||||
|
||||
public void testToString() throws Exception {
|
||||
assertTrue("Should contain task count: " + execution.toString(),
|
||||
execution.toString().indexOf("task") >= 0);
|
||||
assertTrue("Should contain commit count: " + execution.toString(),
|
||||
execution.toString().indexOf("commit") >= 0);
|
||||
assertTrue("Should contain rollback count: " + execution.toString(),
|
||||
execution.toString().indexOf("rollback") >= 0);
|
||||
}
|
||||
|
||||
public void testExecutionContext() throws Exception {
|
||||
assertNotNull(execution.getExecutionContext());
|
||||
ExecutionContext context = new ExecutionContext();
|
||||
context.putString("foo", "bar");
|
||||
execution.setExecutionContext(context );
|
||||
assertEquals("bar", execution.getExecutionContext().getString("foo"));
|
||||
}
|
||||
|
||||
public void testEqualsWithSameIdentifier() throws Exception {
|
||||
Step step = new StepSupport("stepName");
|
||||
Entity stepExecution1 = newStepExecution(step, new Long(11));
|
||||
Entity stepExecution2 = newStepExecution(step, new Long(11));
|
||||
assertEquals(stepExecution1, stepExecution2);
|
||||
}
|
||||
|
||||
public void testEqualsWithNull() throws Exception {
|
||||
Entity stepExecution = newStepExecution(new StepSupport("stepName"), new Long(11));
|
||||
assertFalse(stepExecution.equals(null));
|
||||
}
|
||||
|
||||
public void testEqualsWithNullIdentifiers() throws Exception {
|
||||
Entity stepExecution = newStepExecution(new StepSupport("stepName"), new Long(11));
|
||||
assertFalse(stepExecution.equals(blankExecution));
|
||||
}
|
||||
|
||||
public void testEqualsWithNullJob() throws Exception {
|
||||
Entity stepExecution = newStepExecution(new StepSupport("stepName"), new Long(11));
|
||||
assertFalse(stepExecution.equals(blankExecution));
|
||||
}
|
||||
|
||||
public void testEqualsWithNullStep() throws Exception {
|
||||
Entity stepExecution = newStepExecution(new StepSupport("stepName"), null);
|
||||
assertFalse(stepExecution.equals(blankExecution));
|
||||
}
|
||||
|
||||
public void testEqualsWithSelf() throws Exception {
|
||||
assertTrue(execution.equals(execution));
|
||||
}
|
||||
|
||||
public void testEqualsWithDifferent() throws Exception {
|
||||
Entity stepExecution = newStepExecution(new StepSupport("foo"), new Long(13));
|
||||
assertFalse(execution.equals(stepExecution));
|
||||
}
|
||||
|
||||
public void testEqualsWithNullStepId() throws Exception {
|
||||
Step step = new StepSupport("name");
|
||||
execution = newStepExecution(step, new Long(31));
|
||||
assertEquals("name", execution.getStepName());
|
||||
StepExecution stepExecution = newStepExecution(step, new Long(31));
|
||||
assertEquals(stepExecution.getJobExecutionId(), execution.getJobExecutionId());
|
||||
assertTrue(execution.equals(stepExecution));
|
||||
}
|
||||
|
||||
public void testHashCode() throws Exception {
|
||||
assertTrue("Hash code same as parent", new Entity(execution.getId())
|
||||
.hashCode() != execution.hashCode());
|
||||
}
|
||||
|
||||
public void testHashCodeWithNullIds() throws Exception {
|
||||
assertTrue("Hash code not same as parent",
|
||||
new Entity(execution.getId()).hashCode() != blankExecution
|
||||
.hashCode());
|
||||
}
|
||||
|
||||
public void testHashCodeViaHashSet() throws Exception {
|
||||
Set set = new HashSet();
|
||||
set.add(execution);
|
||||
assertTrue(set.contains(execution));
|
||||
execution.setExecutionContext(new ExecutionContext(PropertiesConverter.stringToProperties("foo=bar")));
|
||||
assertTrue(set.contains(execution));
|
||||
}
|
||||
|
||||
private StepExecution newStepExecution(Step step, Long long2) {
|
||||
JobInstance job = new JobInstance(new Long(3), new JobParameters(), new JobSupport("testJob"));
|
||||
StepExecution execution = new StepExecution(step, new JobExecution(job, long2), new Long(4));
|
||||
return execution;
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.item.ExecutionContext;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
import org.springframework.batch.support.PropertiesConverter;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class StepExecutionTests extends TestCase {
|
||||
|
||||
private StepExecution execution = newStepExecution(new StepSupport("stepName"),
|
||||
new Long(23));
|
||||
|
||||
private StepExecution blankExecution = new StepExecution(new StepSupport("blank"), new JobExecution());
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#JobExecution()}.
|
||||
*/
|
||||
public void testStepExecution() {
|
||||
assertNull(new StepExecution().getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#JobExecution()}.
|
||||
*/
|
||||
public void testStepExecutionWithNullId() {
|
||||
assertNull(new StepExecution(new StepSupport("stepName"), new JobExecution()).getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getEndTime()}.
|
||||
*/
|
||||
public void testGetEndTime() {
|
||||
assertNull(execution.getEndTime());
|
||||
execution.setEndTime(new Date(0L));
|
||||
assertEquals(0L, execution.getEndTime().getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getStartTime()}.
|
||||
*/
|
||||
public void testGetStartTime() {
|
||||
assertNotNull(execution.getStartTime());
|
||||
execution.setStartTime(new Date(10L));
|
||||
assertEquals(10L, execution.getStartTime().getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getStatus()}.
|
||||
*/
|
||||
public void testGetStatus() {
|
||||
assertEquals(BatchStatus.STARTING, execution.getStatus());
|
||||
execution.setStatus(BatchStatus.COMPLETED);
|
||||
assertEquals(BatchStatus.COMPLETED, execution.getStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getJobId()}.
|
||||
*/
|
||||
public void testGetJobId() {
|
||||
assertEquals(23, execution.getJobExecutionId().longValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.JobExecution#getExitStatus()}.
|
||||
*/
|
||||
public void testGetExitCode() {
|
||||
assertEquals(ExitStatus.UNKNOWN, execution.getExitStatus());
|
||||
execution.setExitStatus(ExitStatus.FINISHED);
|
||||
assertEquals(ExitStatus.FINISHED, execution.getExitStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#incrementCommitCount()}.
|
||||
*/
|
||||
public void testIncrementCommitCount() {
|
||||
int before = execution.getCommitCount().intValue();
|
||||
execution.incrementCommitCount();
|
||||
int after = execution.getCommitCount().intValue();
|
||||
assertEquals(before + 1, after);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#incrementTaskCount()}.
|
||||
*/
|
||||
public void testIncrementLuwCount() {
|
||||
int before = execution.getTaskCount().intValue();
|
||||
execution.incrementTaskCount();
|
||||
int after = execution.getTaskCount().intValue();
|
||||
assertEquals(before + 1, after);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#rollback()}.
|
||||
*/
|
||||
public void testIncrementRollbackCount() {
|
||||
int before = execution.getRollbackCount().intValue();
|
||||
execution.rollback();
|
||||
int after = execution.getRollbackCount().intValue();
|
||||
assertEquals(before + 1, after);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#getCommitCount()}.
|
||||
*/
|
||||
public void testGetCommitCount() {
|
||||
execution.setCommitCount(123);
|
||||
assertEquals(123, execution.getCommitCount().intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#getTaskCount()}.
|
||||
*/
|
||||
public void testGetTaskCount() {
|
||||
execution.setTaskCount(123);
|
||||
assertEquals(123, execution.getTaskCount().intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.core.domain.StepExecution#getRollbackCount()}.
|
||||
*/
|
||||
public void testGetRollbackCount() {
|
||||
execution.setRollbackCount(123);
|
||||
assertEquals(123, execution.getRollbackCount().intValue());
|
||||
}
|
||||
|
||||
public void testGetJobExecution() throws Exception {
|
||||
assertNotNull(execution.getJobExecution());
|
||||
}
|
||||
|
||||
public void testApplyContribution() throws Exception {
|
||||
StepContribution contribution = execution.createStepContribution();
|
||||
contribution.incrementCommitCount();
|
||||
execution.apply(contribution);
|
||||
assertEquals(new Integer(1), execution.getCommitCount());
|
||||
}
|
||||
|
||||
public void testTerminateOnly() throws Exception {
|
||||
assertFalse(execution.isTerminateOnly());
|
||||
execution.setTerminateOnly();
|
||||
assertTrue(execution.isTerminateOnly());
|
||||
}
|
||||
|
||||
public void testToStringWithNullName() throws Exception {
|
||||
String value = new StepExecution(new StepSupport(null), new JobExecution()).toString();
|
||||
assertTrue("Should contain name=null: "+value, value.indexOf("name=null")>=0);
|
||||
}
|
||||
|
||||
public void testToString() throws Exception {
|
||||
assertTrue("Should contain task count: " + execution.toString(),
|
||||
execution.toString().indexOf("task") >= 0);
|
||||
assertTrue("Should contain commit count: " + execution.toString(),
|
||||
execution.toString().indexOf("commit") >= 0);
|
||||
assertTrue("Should contain rollback count: " + execution.toString(),
|
||||
execution.toString().indexOf("rollback") >= 0);
|
||||
}
|
||||
|
||||
public void testExecutionContext() throws Exception {
|
||||
assertNotNull(execution.getExecutionContext());
|
||||
ExecutionContext context = new ExecutionContext();
|
||||
context.putString("foo", "bar");
|
||||
execution.setExecutionContext(context );
|
||||
assertEquals("bar", execution.getExecutionContext().getString("foo"));
|
||||
}
|
||||
|
||||
public void testEqualsWithSameIdentifier() throws Exception {
|
||||
Step step = new StepSupport("stepName");
|
||||
Entity stepExecution1 = newStepExecution(step, new Long(11));
|
||||
Entity stepExecution2 = newStepExecution(step, new Long(11));
|
||||
assertEquals(stepExecution1, stepExecution2);
|
||||
}
|
||||
|
||||
public void testEqualsWithNull() throws Exception {
|
||||
Entity stepExecution = newStepExecution(new StepSupport("stepName"), new Long(11));
|
||||
assertFalse(stepExecution.equals(null));
|
||||
}
|
||||
|
||||
public void testEqualsWithNullIdentifiers() throws Exception {
|
||||
Entity stepExecution = newStepExecution(new StepSupport("stepName"), new Long(11));
|
||||
assertFalse(stepExecution.equals(blankExecution));
|
||||
}
|
||||
|
||||
public void testEqualsWithNullJob() throws Exception {
|
||||
Entity stepExecution = newStepExecution(new StepSupport("stepName"), new Long(11));
|
||||
assertFalse(stepExecution.equals(blankExecution));
|
||||
}
|
||||
|
||||
public void testEqualsWithNullStep() throws Exception {
|
||||
Entity stepExecution = newStepExecution(new StepSupport("stepName"), null);
|
||||
assertFalse(stepExecution.equals(blankExecution));
|
||||
}
|
||||
|
||||
public void testEqualsWithSelf() throws Exception {
|
||||
assertTrue(execution.equals(execution));
|
||||
}
|
||||
|
||||
public void testEqualsWithDifferent() throws Exception {
|
||||
Entity stepExecution = newStepExecution(new StepSupport("foo"), new Long(13));
|
||||
assertFalse(execution.equals(stepExecution));
|
||||
}
|
||||
|
||||
public void testEqualsWithNullStepId() throws Exception {
|
||||
Step step = new StepSupport("name");
|
||||
execution = newStepExecution(step, new Long(31));
|
||||
assertEquals("name", execution.getStepName());
|
||||
StepExecution stepExecution = newStepExecution(step, new Long(31));
|
||||
assertEquals(stepExecution.getJobExecutionId(), execution.getJobExecutionId());
|
||||
assertTrue(execution.equals(stepExecution));
|
||||
}
|
||||
|
||||
public void testHashCode() throws Exception {
|
||||
assertTrue("Hash code same as parent", new Entity(execution.getId())
|
||||
.hashCode() != execution.hashCode());
|
||||
}
|
||||
|
||||
public void testHashCodeWithNullIds() throws Exception {
|
||||
assertTrue("Hash code not same as parent",
|
||||
new Entity(execution.getId()).hashCode() != blankExecution
|
||||
.hashCode());
|
||||
}
|
||||
|
||||
public void testHashCodeViaHashSet() throws Exception {
|
||||
Set set = new HashSet();
|
||||
set.add(execution);
|
||||
assertTrue(set.contains(execution));
|
||||
execution.setExecutionContext(new ExecutionContext(PropertiesConverter.stringToProperties("foo=bar")));
|
||||
assertTrue(set.contains(execution));
|
||||
}
|
||||
|
||||
private StepExecution newStepExecution(Step step, Long long2) {
|
||||
JobInstance job = new JobInstance(new Long(3), new JobParameters(), new JobSupport("testJob"));
|
||||
StepExecution execution = new StepExecution(step, new JobExecution(job, long2), new Long(4));
|
||||
return execution;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,117 +1,117 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import org.springframework.batch.core.domain.JobInterruptedException;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.io.exception.InfrastructureException;
|
||||
import org.springframework.beans.factory.BeanNameAware;
|
||||
|
||||
/**
|
||||
* Basic no-op support implementation for use as base class for {@link Step}. Implements {@link BeanNameAware} so that
|
||||
* if no name is provided explicitly it will be inferred from the bean definition in Spring configuration.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class StepSupport implements Step, BeanNameAware {
|
||||
|
||||
private String name;
|
||||
|
||||
private int startLimit = Integer.MAX_VALUE;
|
||||
|
||||
private boolean allowStartIfComplete;
|
||||
|
||||
/**
|
||||
* Default constructor for {@link StepSupport}.
|
||||
*/
|
||||
public StepSupport() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string
|
||||
*/
|
||||
public StepSupport(String string) {
|
||||
super();
|
||||
this.name = string;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name property if it is not already set. Because of the order of the callbacks in a Spring container the
|
||||
* name property will be set first if it is present. Care is needed with bean definition inheritance - if a parent
|
||||
* bean has a name, then its children need an explicit name as well, otherwise they will not be unique.
|
||||
*
|
||||
* @see org.springframework.beans.factory.BeanNameAware#setBeanName(java.lang.String)
|
||||
*/
|
||||
public void setBeanName(String name) {
|
||||
if (this.name == null) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name property. Always overrides the default value if this object is a Spring bean.
|
||||
*
|
||||
* @see #setBeanName(java.lang.String)
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getStartLimit() {
|
||||
return this.startLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the startLimit.
|
||||
*
|
||||
* @param startLimit the startLimit to set
|
||||
*/
|
||||
public void setStartLimit(int startLimit) {
|
||||
this.startLimit = startLimit;
|
||||
}
|
||||
|
||||
public boolean isAllowStartIfComplete() {
|
||||
return this.allowStartIfComplete;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the shouldAllowStartIfComplete.
|
||||
*
|
||||
* @param allowStartIfComplete the shouldAllowStartIfComplete to set
|
||||
*/
|
||||
public void setAllowStartIfComplete(boolean allowStartIfComplete) {
|
||||
this.allowStartIfComplete = allowStartIfComplete;
|
||||
}
|
||||
|
||||
/**
|
||||
* Not supported but provided so that tests can easily create a step.
|
||||
*
|
||||
* @throws UnsupportedOperationException always
|
||||
*
|
||||
* @see org.springframework.batch.core.domain.Step#execute(org.springframework.batch.core.domain.StepExecution)
|
||||
*/
|
||||
public void execute(StepExecution stepExecution) throws JobInterruptedException, InfrastructureException {
|
||||
throw new UnsupportedOperationException(
|
||||
"Cannot process a StepExecution. Use a smarter subclass of StepSupport.");
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.domain;
|
||||
|
||||
import org.springframework.batch.core.domain.JobInterruptedException;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.io.exception.InfrastructureException;
|
||||
import org.springframework.beans.factory.BeanNameAware;
|
||||
|
||||
/**
|
||||
* Basic no-op support implementation for use as base class for {@link Step}. Implements {@link BeanNameAware} so that
|
||||
* if no name is provided explicitly it will be inferred from the bean definition in Spring configuration.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class StepSupport implements Step, BeanNameAware {
|
||||
|
||||
private String name;
|
||||
|
||||
private int startLimit = Integer.MAX_VALUE;
|
||||
|
||||
private boolean allowStartIfComplete;
|
||||
|
||||
/**
|
||||
* Default constructor for {@link StepSupport}.
|
||||
*/
|
||||
public StepSupport() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string
|
||||
*/
|
||||
public StepSupport(String string) {
|
||||
super();
|
||||
this.name = string;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name property if it is not already set. Because of the order of the callbacks in a Spring container the
|
||||
* name property will be set first if it is present. Care is needed with bean definition inheritance - if a parent
|
||||
* bean has a name, then its children need an explicit name as well, otherwise they will not be unique.
|
||||
*
|
||||
* @see org.springframework.beans.factory.BeanNameAware#setBeanName(java.lang.String)
|
||||
*/
|
||||
public void setBeanName(String name) {
|
||||
if (this.name == null) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name property. Always overrides the default value if this object is a Spring bean.
|
||||
*
|
||||
* @see #setBeanName(java.lang.String)
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getStartLimit() {
|
||||
return this.startLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the startLimit.
|
||||
*
|
||||
* @param startLimit the startLimit to set
|
||||
*/
|
||||
public void setStartLimit(int startLimit) {
|
||||
this.startLimit = startLimit;
|
||||
}
|
||||
|
||||
public boolean isAllowStartIfComplete() {
|
||||
return this.allowStartIfComplete;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the shouldAllowStartIfComplete.
|
||||
*
|
||||
* @param allowStartIfComplete the shouldAllowStartIfComplete to set
|
||||
*/
|
||||
public void setAllowStartIfComplete(boolean allowStartIfComplete) {
|
||||
this.allowStartIfComplete = allowStartIfComplete;
|
||||
}
|
||||
|
||||
/**
|
||||
* Not supported but provided so that tests can easily create a step.
|
||||
*
|
||||
* @throws UnsupportedOperationException always
|
||||
*
|
||||
* @see org.springframework.batch.core.domain.Step#execute(org.springframework.batch.core.domain.StepExecution)
|
||||
*/
|
||||
public void execute(StepExecution stepExecution) throws JobInterruptedException, InfrastructureException {
|
||||
throw new UnsupportedOperationException(
|
||||
"Cannot process a StepExecution. Use a smarter subclass of StepSupport.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class DuplicateJobExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new DuplicateJobException(msg);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String,
|
||||
* java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new DuplicateJobException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class DuplicateJobExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new DuplicateJobException(msg);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String,
|
||||
* java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new DuplicateJobException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
import org.springframework.batch.core.repository.JobException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new JobException(msg);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String,
|
||||
* java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new JobException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
import org.springframework.batch.core.repository.JobException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new JobException(msg);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String,
|
||||
* java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new JobException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,40 +1,40 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExecutionAlreadyRunningExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new JobExecutionAlreadyRunningException(msg);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String, java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new JobExecutionAlreadyRunningException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobExecutionAlreadyRunningExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new JobExecutionAlreadyRunningException(msg);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String, java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new JobExecutionAlreadyRunningException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,43 +1,43 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobRestartExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new JobRestartException(msg);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String,
|
||||
* java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new JobRestartException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobRestartExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new JobRestartException(msg);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String,
|
||||
* java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new JobRestartException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
import org.springframework.batch.core.repository.NoSuchJobException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class NoSuchJobExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new NoSuchJobException(msg);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String,
|
||||
* java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new NoSuchJobException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.core.repository;
|
||||
|
||||
import org.springframework.batch.core.AbstractExceptionTests;
|
||||
import org.springframework.batch.core.repository.NoSuchJobException;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class NoSuchJobExceptionTests extends AbstractExceptionTests {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String)
|
||||
*/
|
||||
public Exception getException(String msg) throws Exception {
|
||||
return new NoSuchJobException(msg);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.io.exception.AbstractExceptionTests#getException(java.lang.String,
|
||||
* java.lang.Throwable)
|
||||
*/
|
||||
public Exception getException(String msg, Throwable t) throws Exception {
|
||||
return new NoSuchJobException(msg, t);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>spring-batch-execution</name>
|
||||
<comment>Execution tools and implementations of Spring Batch Core interfaces</comment>
|
||||
<projects>
|
||||
<project>spring-batch-core</project>
|
||||
<project>spring-batch-infrastructure</project>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.springframework.ide.eclipse.core.springbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.springframework.ide.eclipse.core.springnature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>spring-batch-execution</name>
|
||||
<comment>Execution tools and implementations of Spring Batch Core interfaces</comment>
|
||||
<projects>
|
||||
<project>spring-batch-core</project>
|
||||
<project>spring-batch-infrastructure</project>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.springframework.ide.eclipse.core.springbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.springframework.ide.eclipse.core.springnature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#Thu Mar 06 17:27:20 GMT 2008
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
|
||||
org.eclipse.jdt.core.compiler.compliance=1.4
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.4
|
||||
#Thu Mar 06 17:27:20 GMT 2008
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
|
||||
org.eclipse.jdt.core.compiler.compliance=1.4
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.4
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beansProjectDescription>
|
||||
<version>1</version>
|
||||
<pluginVersion><![CDATA[2.0.3.v200802061800]]></pluginVersion>
|
||||
<configSuffixes>
|
||||
<configSuffix><![CDATA[xml]]></configSuffix>
|
||||
</configSuffixes>
|
||||
<enableImports><![CDATA[false]]></enableImports>
|
||||
<configs>
|
||||
<config>src/test/resources/org/springframework/batch/execution/repository/dao/data-source-context.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/repository/dao/sql-dao-test.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/configuration/test-context.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/bootstrap/support/job.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/bootstrap/support/test-environment.xml</config>
|
||||
</configs>
|
||||
<configSets>
|
||||
<configSet>
|
||||
<name><![CDATA[sqltest]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
<config>src/test/resources/org/springframework/batch/execution/repository/dao/data-source-context.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/repository/dao/sql-dao-test.xml</config>
|
||||
</configs>
|
||||
</configSet>
|
||||
<configSet>
|
||||
<name><![CDATA[hibernatetest]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
<config>src/test/resources/org/springframework/batch/execution/repository/dao/data-source-context.xml</config>
|
||||
</configs>
|
||||
</configSet>
|
||||
<configSet>
|
||||
<name><![CDATA[testJob]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
<config>src/test/resources/org/springframework/batch/execution/bootstrap/support/job.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/bootstrap/support/test-environment.xml</config>
|
||||
</configs>
|
||||
</configSet>
|
||||
</configSets>
|
||||
</beansProjectDescription>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beansProjectDescription>
|
||||
<version>1</version>
|
||||
<pluginVersion><![CDATA[2.0.3.v200802061800]]></pluginVersion>
|
||||
<configSuffixes>
|
||||
<configSuffix><![CDATA[xml]]></configSuffix>
|
||||
</configSuffixes>
|
||||
<enableImports><![CDATA[false]]></enableImports>
|
||||
<configs>
|
||||
<config>src/test/resources/org/springframework/batch/execution/repository/dao/data-source-context.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/repository/dao/sql-dao-test.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/configuration/test-context.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/bootstrap/support/job.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/bootstrap/support/test-environment.xml</config>
|
||||
</configs>
|
||||
<configSets>
|
||||
<configSet>
|
||||
<name><![CDATA[sqltest]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
<config>src/test/resources/org/springframework/batch/execution/repository/dao/data-source-context.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/repository/dao/sql-dao-test.xml</config>
|
||||
</configs>
|
||||
</configSet>
|
||||
<configSet>
|
||||
<name><![CDATA[hibernatetest]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
<config>src/test/resources/org/springframework/batch/execution/repository/dao/data-source-context.xml</config>
|
||||
</configs>
|
||||
</configSet>
|
||||
<configSet>
|
||||
<name><![CDATA[testJob]]></name>
|
||||
<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
|
||||
<incomplete>false</incomplete>
|
||||
<configs>
|
||||
<config>src/test/resources/org/springframework/batch/execution/bootstrap/support/job.xml</config>
|
||||
<config>src/test/resources/org/springframework/batch/execution/bootstrap/support/test-environment.xml</config>
|
||||
</configs>
|
||||
</configSet>
|
||||
</configSets>
|
||||
</beansProjectDescription>
|
||||
|
||||
@@ -1,113 +1,113 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.configuration;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.springframework.batch.core.configuration.JobLocator;
|
||||
import org.springframework.batch.core.configuration.JobRegistry;
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.FatalBeanException;
|
||||
import org.springframework.beans.factory.DisposableBean;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* A {@link BeanPostProcessor} that registers {@link Job} beans
|
||||
* with a {@link JobRegistry}. Include a bean of this type along
|
||||
* with your job configuration, and use the same
|
||||
* {@link JobRegistry} as a {@link JobLocator} when
|
||||
* you need to locate a {@link JobLocator} to launch.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobRegistryBeanPostProcessor implements BeanPostProcessor, InitializingBean, DisposableBean {
|
||||
|
||||
// It doesn't make sense for this to have a default value...
|
||||
private JobRegistry jobConfigurationRegistry = null;
|
||||
|
||||
private Collection jobNames = new HashSet();
|
||||
|
||||
/**
|
||||
* Injection setter for {@link JobRegistry}.
|
||||
*
|
||||
* @param jobRegistry the jobConfigurationRegistry to set
|
||||
*/
|
||||
public void setJobRegistry(JobRegistry jobRegistry) {
|
||||
this.jobConfigurationRegistry = jobRegistry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure the registry is set before use.
|
||||
*
|
||||
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
|
||||
*/
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
Assert.notNull(jobConfigurationRegistry, "JobConfigurationRegistry must not be null");
|
||||
}
|
||||
|
||||
/**
|
||||
* De-register all the {@link Job} instances that were
|
||||
* regsistered by this post processor.
|
||||
* @see org.springframework.beans.factory.DisposableBean#destroy()
|
||||
*/
|
||||
public void destroy() throws Exception {
|
||||
for (Iterator iter = jobNames.iterator(); iter.hasNext();) {
|
||||
String name = (String) iter.next();
|
||||
jobConfigurationRegistry.unregister(name);
|
||||
}
|
||||
jobNames.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* If the bean is an instance of {@link Job} then register it.
|
||||
* @throws FatalBeanException if there is a
|
||||
* {@link DuplicateJobException}.
|
||||
*
|
||||
* @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization(java.lang.Object,
|
||||
* java.lang.String)
|
||||
*/
|
||||
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
|
||||
if (bean instanceof Job) {
|
||||
Job job = (Job) bean;
|
||||
try {
|
||||
jobConfigurationRegistry.register(new ReferenceJobFactory(job));
|
||||
jobNames.add(job.getName());
|
||||
}
|
||||
catch (DuplicateJobException e) {
|
||||
throw new FatalBeanException("Cannot register job configuration", e);
|
||||
}
|
||||
}
|
||||
return bean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Do nothing.
|
||||
*
|
||||
* @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization(java.lang.Object,
|
||||
* java.lang.String)
|
||||
*/
|
||||
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
|
||||
return bean;
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.configuration;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.springframework.batch.core.configuration.JobLocator;
|
||||
import org.springframework.batch.core.configuration.JobRegistry;
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.FatalBeanException;
|
||||
import org.springframework.beans.factory.DisposableBean;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* A {@link BeanPostProcessor} that registers {@link Job} beans
|
||||
* with a {@link JobRegistry}. Include a bean of this type along
|
||||
* with your job configuration, and use the same
|
||||
* {@link JobRegistry} as a {@link JobLocator} when
|
||||
* you need to locate a {@link JobLocator} to launch.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobRegistryBeanPostProcessor implements BeanPostProcessor, InitializingBean, DisposableBean {
|
||||
|
||||
// It doesn't make sense for this to have a default value...
|
||||
private JobRegistry jobConfigurationRegistry = null;
|
||||
|
||||
private Collection jobNames = new HashSet();
|
||||
|
||||
/**
|
||||
* Injection setter for {@link JobRegistry}.
|
||||
*
|
||||
* @param jobRegistry the jobConfigurationRegistry to set
|
||||
*/
|
||||
public void setJobRegistry(JobRegistry jobRegistry) {
|
||||
this.jobConfigurationRegistry = jobRegistry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure the registry is set before use.
|
||||
*
|
||||
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
|
||||
*/
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
Assert.notNull(jobConfigurationRegistry, "JobConfigurationRegistry must not be null");
|
||||
}
|
||||
|
||||
/**
|
||||
* De-register all the {@link Job} instances that were
|
||||
* regsistered by this post processor.
|
||||
* @see org.springframework.beans.factory.DisposableBean#destroy()
|
||||
*/
|
||||
public void destroy() throws Exception {
|
||||
for (Iterator iter = jobNames.iterator(); iter.hasNext();) {
|
||||
String name = (String) iter.next();
|
||||
jobConfigurationRegistry.unregister(name);
|
||||
}
|
||||
jobNames.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* If the bean is an instance of {@link Job} then register it.
|
||||
* @throws FatalBeanException if there is a
|
||||
* {@link DuplicateJobException}.
|
||||
*
|
||||
* @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization(java.lang.Object,
|
||||
* java.lang.String)
|
||||
*/
|
||||
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
|
||||
if (bean instanceof Job) {
|
||||
Job job = (Job) bean;
|
||||
try {
|
||||
jobConfigurationRegistry.register(new ReferenceJobFactory(job));
|
||||
jobNames.add(job.getName());
|
||||
}
|
||||
catch (DuplicateJobException e) {
|
||||
throw new FatalBeanException("Cannot register job configuration", e);
|
||||
}
|
||||
}
|
||||
return bean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Do nothing.
|
||||
*
|
||||
* @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization(java.lang.Object,
|
||||
* java.lang.String)
|
||||
*/
|
||||
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
|
||||
return bean;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,95 +1,95 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.configuration;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.batch.core.configuration.JobFactory;
|
||||
import org.springframework.batch.core.configuration.JobRegistry;
|
||||
import org.springframework.batch.core.configuration.ListableJobRegistry;
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
import org.springframework.batch.core.repository.NoSuchJobException;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Simple map-based implementation of {@link JobRegistry}. Access to the map is
|
||||
* synchronized, guarded by an internal lock.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class MapJobRegistry implements ListableJobRegistry {
|
||||
|
||||
private Map map = new HashMap();
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.container.common.configuration.JobConfigurationRegistry#registerJobConfiguration(org.springframework.batch.container.common.configuration.JobConfiguration)
|
||||
*/
|
||||
public void register(JobFactory jobFactory) throws DuplicateJobException {
|
||||
Assert.notNull(jobFactory);
|
||||
String name = jobFactory.getJobName();
|
||||
Assert.notNull(name, "Job configuration must have a name.");
|
||||
synchronized (map) {
|
||||
if (map.containsKey(name)) {
|
||||
throw new DuplicateJobException("A job configuration with this name [" + name
|
||||
+ "] was already registered");
|
||||
}
|
||||
map.put(name, jobFactory);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.container.common.configuration.JobConfigurationRegistry#unregister(org.springframework.batch.container.common.configuration.JobConfiguration)
|
||||
*/
|
||||
public void unregister(String name) {
|
||||
Assert.notNull(name, "Job configuration must have a name.");
|
||||
synchronized (map) {
|
||||
map.remove(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.container.common.configuration.JobConfigurationLocator#getJobConfiguration(java.lang.String)
|
||||
*/
|
||||
public Job getJob(String name) throws NoSuchJobException {
|
||||
synchronized (map) {
|
||||
if (!map.containsKey(name)) {
|
||||
throw new NoSuchJobException("No job configuration with the name [" + name + "] was registered");
|
||||
}
|
||||
return (Job) ((JobFactory) map.get(name)).createJob();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.container.common.configuration.ListableJobConfigurationRegistry#getJobConfigurations()
|
||||
*/
|
||||
public Collection getJobNames() {
|
||||
synchronized (map) {
|
||||
return Collections.unmodifiableCollection(new HashSet(map.keySet()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.configuration;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.batch.core.configuration.JobFactory;
|
||||
import org.springframework.batch.core.configuration.JobRegistry;
|
||||
import org.springframework.batch.core.configuration.ListableJobRegistry;
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
import org.springframework.batch.core.repository.NoSuchJobException;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Simple map-based implementation of {@link JobRegistry}. Access to the map is
|
||||
* synchronized, guarded by an internal lock.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class MapJobRegistry implements ListableJobRegistry {
|
||||
|
||||
private Map map = new HashMap();
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.container.common.configuration.JobConfigurationRegistry#registerJobConfiguration(org.springframework.batch.container.common.configuration.JobConfiguration)
|
||||
*/
|
||||
public void register(JobFactory jobFactory) throws DuplicateJobException {
|
||||
Assert.notNull(jobFactory);
|
||||
String name = jobFactory.getJobName();
|
||||
Assert.notNull(name, "Job configuration must have a name.");
|
||||
synchronized (map) {
|
||||
if (map.containsKey(name)) {
|
||||
throw new DuplicateJobException("A job configuration with this name [" + name
|
||||
+ "] was already registered");
|
||||
}
|
||||
map.put(name, jobFactory);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.container.common.configuration.JobConfigurationRegistry#unregister(org.springframework.batch.container.common.configuration.JobConfiguration)
|
||||
*/
|
||||
public void unregister(String name) {
|
||||
Assert.notNull(name, "Job configuration must have a name.");
|
||||
synchronized (map) {
|
||||
map.remove(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.container.common.configuration.JobConfigurationLocator#getJobConfiguration(java.lang.String)
|
||||
*/
|
||||
public Job getJob(String name) throws NoSuchJobException {
|
||||
synchronized (map) {
|
||||
if (!map.containsKey(name)) {
|
||||
throw new NoSuchJobException("No job configuration with the name [" + name + "] was registered");
|
||||
}
|
||||
return (Job) ((JobFactory) map.get(name)).createJob();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.container.common.configuration.ListableJobConfigurationRegistry#getJobConfigurations()
|
||||
*/
|
||||
public Collection getJobNames() {
|
||||
synchronized (map) {
|
||||
return Collections.unmodifiableCollection(new HashSet(map.keySet()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,54 +1,54 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.launch;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.core.repository.JobRestartException;
|
||||
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
|
||||
|
||||
/**
|
||||
* Simple interface for controlling jobs, including possible ad-hoc executions,
|
||||
* based on different runtime identifiers. It is extremely important to note
|
||||
* that this interface makes absolutely no guarantees about whether or not calls
|
||||
* to it are executed synchronously or asynchronously. The javadocs for specific
|
||||
* implementations should be checked to ensure callers fully understand how the
|
||||
* job will be run.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
*/
|
||||
|
||||
public interface JobLauncher {
|
||||
|
||||
/**
|
||||
* Start a job execution for the given {@link Job} and {@link JobParameters}.
|
||||
*
|
||||
* @return the exit code from the job if it returns synchronously. If the
|
||||
* implementation is asynchronous, the status might well be unknown.
|
||||
*
|
||||
* @throws JobExecutionAlreadyRunningException if the JobInstance identified
|
||||
* by the properties already has an execution running.
|
||||
* @throws IllegalArgumentException if the job or jobInstanceProperties are
|
||||
* null.
|
||||
* @throws JobRestartException if the job has been run before and
|
||||
* circumstances that preclude a re-start.
|
||||
*/
|
||||
public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException,
|
||||
JobRestartException;
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.launch;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.core.repository.JobRestartException;
|
||||
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
|
||||
|
||||
/**
|
||||
* Simple interface for controlling jobs, including possible ad-hoc executions,
|
||||
* based on different runtime identifiers. It is extremely important to note
|
||||
* that this interface makes absolutely no guarantees about whether or not calls
|
||||
* to it are executed synchronously or asynchronously. The javadocs for specific
|
||||
* implementations should be checked to ensure callers fully understand how the
|
||||
* job will be run.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
*/
|
||||
|
||||
public interface JobLauncher {
|
||||
|
||||
/**
|
||||
* Start a job execution for the given {@link Job} and {@link JobParameters}.
|
||||
*
|
||||
* @return the exit code from the job if it returns synchronously. If the
|
||||
* implementation is asynchronous, the status might well be unknown.
|
||||
*
|
||||
* @throws JobExecutionAlreadyRunningException if the JobInstance identified
|
||||
* by the properties already has an execution running.
|
||||
* @throws IllegalArgumentException if the job or jobInstanceProperties are
|
||||
* null.
|
||||
* @throws JobRestartException if the job has been run before and
|
||||
* circumstances that preclude a re-start.
|
||||
*/
|
||||
public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException,
|
||||
JobRestartException;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* This interface should be implemented when an environment calling the batch famework has specific
|
||||
* requirements regarding the process return codes.
|
||||
*
|
||||
* @param The type of returncode expected by the environment
|
||||
* @author Stijn Maller
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
*/
|
||||
public interface ExitCodeMapper {
|
||||
|
||||
static int JVM_EXITCODE_COMPLETED = 0;
|
||||
static int JVM_EXITCODE_GENERIC_ERROR = 1;
|
||||
static int JVM_EXITCODE_JOB_ERROR = 2;
|
||||
public static final String NO_SUCH_JOB = "NO_SUCH_JOB";
|
||||
public static final String JOB_NOT_PROVIDED = "JOB_NOT_PROVIDED";
|
||||
|
||||
/**
|
||||
* Transform the exitcode known by the batchframework into an exitcode in the
|
||||
* format of the calling environment.
|
||||
* @param exitCode The exitcode which is used internally by the batch framework.
|
||||
* @return The corresponding exitcode as known by the calling environment.
|
||||
*/
|
||||
public int getExitCode(String exitCode);
|
||||
|
||||
}
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* This interface should be implemented when an environment calling the batch famework has specific
|
||||
* requirements regarding the process return codes.
|
||||
*
|
||||
* @param The type of returncode expected by the environment
|
||||
* @author Stijn Maller
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
*/
|
||||
public interface ExitCodeMapper {
|
||||
|
||||
static int JVM_EXITCODE_COMPLETED = 0;
|
||||
static int JVM_EXITCODE_GENERIC_ERROR = 1;
|
||||
static int JVM_EXITCODE_JOB_ERROR = 2;
|
||||
public static final String NO_SUCH_JOB = "NO_SUCH_JOB";
|
||||
public static final String JOB_NOT_PROVIDED = "JOB_NOT_PROVIDED";
|
||||
|
||||
/**
|
||||
* Transform the exitcode known by the batchframework into an exitcode in the
|
||||
* format of the calling environment.
|
||||
* @param exitCode The exitcode which is used internally by the batch framework.
|
||||
* @return The corresponding exitcode as known by the calling environment.
|
||||
*/
|
||||
public int getExitCode(String exitCode);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,74 +1,74 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.execution.launch.JobLauncher;
|
||||
|
||||
/**
|
||||
* Interface to expose for remote management of jobs. Similar to
|
||||
* {@link JobLauncher}, but replaces {@link JobExecution} and
|
||||
* {@link JobIdentifier} with Strings in return types and method parameters, so
|
||||
* it can be inspected by remote clients like the jconsole from the JRE without
|
||||
* any links to Spring Batch.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface ExportedJobLauncher {
|
||||
|
||||
/**
|
||||
* Launch a job with the given name.
|
||||
*
|
||||
* @param name the name of the job to launch
|
||||
* @return a representation of the {@link JobExecution} returned by a
|
||||
* {@link JobLauncher}.
|
||||
*/
|
||||
String run(String name);
|
||||
|
||||
/**
|
||||
* Launch a job with the given name and parameters.
|
||||
*
|
||||
* @param name the name of the job to launch
|
||||
* @return a representation of the {@link JobExecution} returned by a
|
||||
* {@link JobLauncher}.
|
||||
*/
|
||||
String run(String name, String params);
|
||||
|
||||
/**
|
||||
* Stop all running jobs.
|
||||
*/
|
||||
void stop();
|
||||
|
||||
/**
|
||||
* Enquire if any jobs launched here are still running.
|
||||
*
|
||||
* @return true if any jobs are running.
|
||||
*/
|
||||
boolean isRunning();
|
||||
|
||||
/**
|
||||
* Query statistics of currently executing jobs.
|
||||
*
|
||||
* @return properties representing last known state of currently executing
|
||||
* jobs
|
||||
*/
|
||||
public Properties getStatistics();
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.execution.launch.JobLauncher;
|
||||
|
||||
/**
|
||||
* Interface to expose for remote management of jobs. Similar to
|
||||
* {@link JobLauncher}, but replaces {@link JobExecution} and
|
||||
* {@link JobIdentifier} with Strings in return types and method parameters, so
|
||||
* it can be inspected by remote clients like the jconsole from the JRE without
|
||||
* any links to Spring Batch.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface ExportedJobLauncher {
|
||||
|
||||
/**
|
||||
* Launch a job with the given name.
|
||||
*
|
||||
* @param name the name of the job to launch
|
||||
* @return a representation of the {@link JobExecution} returned by a
|
||||
* {@link JobLauncher}.
|
||||
*/
|
||||
String run(String name);
|
||||
|
||||
/**
|
||||
* Launch a job with the given name and parameters.
|
||||
*
|
||||
* @param name the name of the job to launch
|
||||
* @return a representation of the {@link JobExecution} returned by a
|
||||
* {@link JobLauncher}.
|
||||
*/
|
||||
String run(String name, String params);
|
||||
|
||||
/**
|
||||
* Stop all running jobs.
|
||||
*/
|
||||
void stop();
|
||||
|
||||
/**
|
||||
* Enquire if any jobs launched here are still running.
|
||||
*
|
||||
* @return true if any jobs are running.
|
||||
*/
|
||||
boolean isRunning();
|
||||
|
||||
/**
|
||||
* Query statistics of currently executing jobs.
|
||||
*
|
||||
* @return properties representing last known state of currently executing
|
||||
* jobs
|
||||
*/
|
||||
public Properties getStatistics();
|
||||
|
||||
}
|
||||
|
||||
@@ -1,40 +1,40 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
/**
|
||||
* Implementation of the {@link SystemExiter} interface that calls the standards
|
||||
* System.exit method. It should be noted that there will be no unit tests for
|
||||
* this class, since there is only one line of actual code, that would only be
|
||||
* testable by mocking System or Runtime.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JvmSystemExiter implements SystemExiter {
|
||||
|
||||
/**
|
||||
* Delegate call to System.exit() with the argument provided. Do not use
|
||||
* this at home children!
|
||||
*
|
||||
* @see org.springframework.batch.execution.launch.support.SystemExiter#exit(int)
|
||||
*/
|
||||
public void exit(int status) {
|
||||
System.exit(status);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
/**
|
||||
* Implementation of the {@link SystemExiter} interface that calls the standards
|
||||
* System.exit method. It should be noted that there will be no unit tests for
|
||||
* this class, since there is only one line of actual code, that would only be
|
||||
* testable by mocking System or Runtime.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JvmSystemExiter implements SystemExiter {
|
||||
|
||||
/**
|
||||
* Delegate call to System.exit() with the argument provided. Do not use
|
||||
* this at home children!
|
||||
*
|
||||
* @see org.springframework.batch.execution.launch.support.SystemExiter#exit(int)
|
||||
*/
|
||||
public void exit(int status) {
|
||||
System.exit(status);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,88 +1,88 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
|
||||
/**
|
||||
* An implementation of {@link ExitCodeMapper} that can be configured
|
||||
* through a map from batch exit codes (String) to integer results.
|
||||
*
|
||||
* @author Stijn Maller
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
*/
|
||||
|
||||
public class SimpleJvmExitCodeMapper implements ExitCodeMapper {
|
||||
|
||||
protected Log logger = LogFactory.getLog(getClass());
|
||||
|
||||
private Map mapping;
|
||||
|
||||
public SimpleJvmExitCodeMapper(){
|
||||
mapping = new HashMap();
|
||||
mapping.put(ExitStatus.FINISHED.getExitCode(),
|
||||
new Integer(JVM_EXITCODE_COMPLETED));
|
||||
mapping.put(ExitStatus.FAILED.getExitCode(),
|
||||
new Integer(JVM_EXITCODE_GENERIC_ERROR));
|
||||
mapping.put(ExitCodeMapper.JOB_NOT_PROVIDED,
|
||||
new Integer(JVM_EXITCODE_JOB_ERROR));
|
||||
mapping.put(ExitCodeMapper.NO_SUCH_JOB,
|
||||
new Integer(JVM_EXITCODE_JOB_ERROR));
|
||||
}
|
||||
|
||||
public Map getMapping() {
|
||||
return mapping;
|
||||
}
|
||||
|
||||
/**
|
||||
* Supply the ExitCodeMappings
|
||||
* @param exitCodeMap A set of mappings between environment specific exit codes
|
||||
* and batch framework internal exit codes
|
||||
*/
|
||||
public void setMapping(Map exitCodeMap) {
|
||||
mapping.putAll(exitCodeMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the JVM exitcode that matches a certain Batch Framework Exitcode
|
||||
* @param exitCode The exitcode of the Batch Job as known by the Batch Framework
|
||||
* @return The exitCode of the Batch Job as known by the JVM
|
||||
*/
|
||||
public int getExitCode(String exitCode) {
|
||||
|
||||
Integer statusCode = null;
|
||||
|
||||
try{
|
||||
statusCode = (Integer)mapping.get(exitCode);
|
||||
}
|
||||
catch(RuntimeException ex){
|
||||
//We still need to return an exit code, even if there is an issue with
|
||||
//the mapper.
|
||||
logger.fatal("Error mapping exit code, generic exit code returned.", ex);
|
||||
}
|
||||
|
||||
return (statusCode != null) ? statusCode.intValue() : JVM_EXITCODE_GENERIC_ERROR;
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
|
||||
/**
|
||||
* An implementation of {@link ExitCodeMapper} that can be configured
|
||||
* through a map from batch exit codes (String) to integer results.
|
||||
*
|
||||
* @author Stijn Maller
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
*/
|
||||
|
||||
public class SimpleJvmExitCodeMapper implements ExitCodeMapper {
|
||||
|
||||
protected Log logger = LogFactory.getLog(getClass());
|
||||
|
||||
private Map mapping;
|
||||
|
||||
public SimpleJvmExitCodeMapper(){
|
||||
mapping = new HashMap();
|
||||
mapping.put(ExitStatus.FINISHED.getExitCode(),
|
||||
new Integer(JVM_EXITCODE_COMPLETED));
|
||||
mapping.put(ExitStatus.FAILED.getExitCode(),
|
||||
new Integer(JVM_EXITCODE_GENERIC_ERROR));
|
||||
mapping.put(ExitCodeMapper.JOB_NOT_PROVIDED,
|
||||
new Integer(JVM_EXITCODE_JOB_ERROR));
|
||||
mapping.put(ExitCodeMapper.NO_SUCH_JOB,
|
||||
new Integer(JVM_EXITCODE_JOB_ERROR));
|
||||
}
|
||||
|
||||
public Map getMapping() {
|
||||
return mapping;
|
||||
}
|
||||
|
||||
/**
|
||||
* Supply the ExitCodeMappings
|
||||
* @param exitCodeMap A set of mappings between environment specific exit codes
|
||||
* and batch framework internal exit codes
|
||||
*/
|
||||
public void setMapping(Map exitCodeMap) {
|
||||
mapping.putAll(exitCodeMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the JVM exitcode that matches a certain Batch Framework Exitcode
|
||||
* @param exitCode The exitcode of the Batch Job as known by the Batch Framework
|
||||
* @return The exitCode of the Batch Job as known by the JVM
|
||||
*/
|
||||
public int getExitCode(String exitCode) {
|
||||
|
||||
Integer statusCode = null;
|
||||
|
||||
try{
|
||||
statusCode = (Integer)mapping.get(exitCode);
|
||||
}
|
||||
catch(RuntimeException ex){
|
||||
//We still need to return an exit code, even if there is an issue with
|
||||
//the mapper.
|
||||
logger.fatal("Error mapping exit code, generic exit code returned.", ex);
|
||||
}
|
||||
|
||||
return (statusCode != null) ? statusCode.intValue() : JVM_EXITCODE_GENERIC_ERROR;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,39 +1,39 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
/**
|
||||
* Interface for exiting the JVM. This abstraction is only
|
||||
* useful in order to allow classes that make System.exit calls
|
||||
* to be testable, since calling System.exit during a unit
|
||||
* test would cause the entire jvm to finish.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
*
|
||||
*/
|
||||
public interface SystemExiter {
|
||||
|
||||
/**
|
||||
* Terminate the currently running Java Virtual Machine.
|
||||
*
|
||||
* @param status exit status.
|
||||
* @throws SecurityException
|
||||
* if a security manager exists and its <code>checkExit</code>
|
||||
* method doesn't allow exit with the specified status.
|
||||
* @see System.exit
|
||||
*/
|
||||
void exit(int status);
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
/**
|
||||
* Interface for exiting the JVM. This abstraction is only
|
||||
* useful in order to allow classes that make System.exit calls
|
||||
* to be testable, since calling System.exit during a unit
|
||||
* test would cause the entire jvm to finish.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
*
|
||||
*/
|
||||
public interface SystemExiter {
|
||||
|
||||
/**
|
||||
* Terminate the currently running Java Virtual Machine.
|
||||
*
|
||||
* @param status exit status.
|
||||
* @throws SecurityException
|
||||
* if a security manager exists and its <code>checkExit</code>
|
||||
* method doesn't allow exit with the specified status.
|
||||
* @see System.exit
|
||||
*/
|
||||
void exit(int status);
|
||||
}
|
||||
|
||||
@@ -1,52 +1,52 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.jdbc.core.JdbcOperations;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Encapsulates common functionality needed by JDBC batch metadata DAOs -
|
||||
* provides jdbcTemplate for subclasses and handles table prefixes.
|
||||
*
|
||||
* @author Robert Kasanicky
|
||||
*/
|
||||
public abstract class AbstractJdbcBatchMetadataDao implements InitializingBean {
|
||||
|
||||
/**
|
||||
* Default value for the table prefix property.
|
||||
*/
|
||||
public static final String DEFAULT_TABLE_PREFIX = "BATCH_";
|
||||
|
||||
private String tablePrefix = DEFAULT_TABLE_PREFIX;
|
||||
|
||||
private JdbcOperations jdbcTemplate;
|
||||
|
||||
protected String getQuery(String base) {
|
||||
return StringUtils.replace(base, "%PREFIX%", tablePrefix);
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the table prefix property. This will be prefixed to all
|
||||
* the table names before queries are executed. Defaults to
|
||||
* {@value #DEFAULT_TABLE_PREFIX}.
|
||||
*
|
||||
* @param tablePrefix the tablePrefix to set
|
||||
*/
|
||||
public void setTablePrefix(String tablePrefix) {
|
||||
this.tablePrefix = tablePrefix;
|
||||
}
|
||||
|
||||
public void setJdbcTemplate(JdbcOperations jdbcTemplate) {
|
||||
this.jdbcTemplate = jdbcTemplate;
|
||||
}
|
||||
|
||||
protected JdbcOperations getJdbcTemplate() {
|
||||
return jdbcTemplate;
|
||||
}
|
||||
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
Assert.notNull(jdbcTemplate);
|
||||
}
|
||||
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.jdbc.core.JdbcOperations;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Encapsulates common functionality needed by JDBC batch metadata DAOs -
|
||||
* provides jdbcTemplate for subclasses and handles table prefixes.
|
||||
*
|
||||
* @author Robert Kasanicky
|
||||
*/
|
||||
public abstract class AbstractJdbcBatchMetadataDao implements InitializingBean {
|
||||
|
||||
/**
|
||||
* Default value for the table prefix property.
|
||||
*/
|
||||
public static final String DEFAULT_TABLE_PREFIX = "BATCH_";
|
||||
|
||||
private String tablePrefix = DEFAULT_TABLE_PREFIX;
|
||||
|
||||
private JdbcOperations jdbcTemplate;
|
||||
|
||||
protected String getQuery(String base) {
|
||||
return StringUtils.replace(base, "%PREFIX%", tablePrefix);
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the table prefix property. This will be prefixed to all
|
||||
* the table names before queries are executed. Defaults to
|
||||
* {@value #DEFAULT_TABLE_PREFIX}.
|
||||
*
|
||||
* @param tablePrefix the tablePrefix to set
|
||||
*/
|
||||
public void setTablePrefix(String tablePrefix) {
|
||||
this.tablePrefix = tablePrefix;
|
||||
}
|
||||
|
||||
public void setJdbcTemplate(JdbcOperations jdbcTemplate) {
|
||||
this.jdbcTemplate = jdbcTemplate;
|
||||
}
|
||||
|
||||
protected JdbcOperations getJdbcTemplate() {
|
||||
return jdbcTemplate;
|
||||
}
|
||||
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
Assert.notNull(jdbcTemplate);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,219 +1,219 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.batch.core.domain.BatchStatus;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Jdbc implementation of {@link JobExecutionDao}. Uses sequences (via Spring's
|
||||
* {@link DataFieldMaxValueIncrementer} abstraction) to create all primary keys
|
||||
* before inserting a new row. Objects are checked to ensure all mandatory
|
||||
* fields to be stored are not null. If any are found to be null, an
|
||||
* IllegalArgumentException will be thrown. This could be left to JdbcTemplate,
|
||||
* however, the exception will be fairly vague, and fails to highlight which
|
||||
* field caused the exception.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
* @author Robert Kasanicky
|
||||
*/
|
||||
public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements JobExecutionDao, InitializingBean {
|
||||
|
||||
private static final Log logger = LogFactory.getLog(JdbcJobExecutionDao.class);
|
||||
|
||||
private static final int EXIT_MESSAGE_LENGTH = 250;
|
||||
|
||||
private static final String GET_JOB_EXECUTION_COUNT = "SELECT count(JOB_EXECUTION_ID) from %PREFIX%JOB_EXECUTION "
|
||||
+ "where JOB_INSTANCE_ID = ?";
|
||||
|
||||
private static final String SAVE_JOB_EXECUTION = "INSERT into %PREFIX%JOB_EXECUTION(JOB_EXECUTION_ID, JOB_INSTANCE_ID, START_TIME, "
|
||||
+ "END_TIME, STATUS, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE) values (?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
|
||||
private static final String CHECK_JOB_EXECUTION_EXISTS = "SELECT COUNT(*) FROM %PREFIX%JOB_EXECUTION WHERE JOB_EXECUTION_ID = ?";
|
||||
|
||||
private static final String UPDATE_JOB_EXECUTION = "UPDATE %PREFIX%JOB_EXECUTION set START_TIME = ?, END_TIME = ?, "
|
||||
+ " STATUS = ?, CONTINUABLE = ?, EXIT_CODE = ?, EXIT_MESSAGE = ? where JOB_EXECUTION_ID = ?";
|
||||
|
||||
private static final String FIND_JOB_EXECUTIONS = "SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%JOB_EXECUTION"
|
||||
+ " where JOB_INSTANCE_ID = ?";
|
||||
|
||||
private static final String GET_LAST_EXECUTION = "SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%JOB_EXECUTION"
|
||||
+ " where JOB_INSTANCE_ID = ? and START_TIME = (SELECT max(START_TIME) from %PREFIX%JOB_EXECUTION where JOB_INSTANCE_ID = ?)";
|
||||
|
||||
private DataFieldMaxValueIncrementer jobExecutionIncrementer;
|
||||
|
||||
public List findJobExecutions(final JobInstance job) {
|
||||
|
||||
Assert.notNull(job, "Job cannot be null.");
|
||||
Assert.notNull(job.getId(), "Job Id cannot be null.");
|
||||
|
||||
return getJdbcTemplate().query(getQuery(FIND_JOB_EXECUTIONS), new Object[] { job.getId() },
|
||||
new JobExecutionRowMapper(job));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see JobDao#getJobExecutionCount(JobInstance)
|
||||
* @throws IllegalArgumentException if jobId is null.
|
||||
*/
|
||||
public int getJobExecutionCount(JobInstance jobInstance) {
|
||||
Long jobId = jobInstance.getId();
|
||||
Assert.notNull(jobId, "JobId cannot be null");
|
||||
|
||||
Object[] parameters = new Object[] { jobId };
|
||||
|
||||
return getJdbcTemplate().queryForInt(getQuery(GET_JOB_EXECUTION_COUNT), parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* SQL implementation using Sequences via the Spring incrementer
|
||||
* abstraction. Once a new id has been obtained, the JobExecution is saved
|
||||
* via a SQL INSERT statement.
|
||||
*
|
||||
* @see JobDao#saveJobExecution(JobExecution)
|
||||
* @throws IllegalArgumentException if jobExecution is null, as well as any
|
||||
* of it's fields to be persisted.
|
||||
*/
|
||||
public void saveJobExecution(JobExecution jobExecution) {
|
||||
|
||||
validateJobExecution(jobExecution);
|
||||
|
||||
jobExecution.setId(new Long(jobExecutionIncrementer.nextLongValue()));
|
||||
Object[] parameters = new Object[] { jobExecution.getId(), jobExecution.getJobId(),
|
||||
jobExecution.getStartTime(), jobExecution.getEndTime(), jobExecution.getStatus().toString(),
|
||||
jobExecution.getExitStatus().isContinuable() ? "Y" : "N", jobExecution.getExitStatus().getExitCode(),
|
||||
jobExecution.getExitStatus().getExitDescription() };
|
||||
getJdbcTemplate().update(
|
||||
getQuery(SAVE_JOB_EXECUTION),
|
||||
parameters,
|
||||
new int[] { Types.INTEGER, Types.INTEGER, Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.CHAR,
|
||||
Types.VARCHAR, Types.VARCHAR });
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate JobExecution. At a minimum, JobId, StartTime, EndTime, and
|
||||
* Status cannot be null.
|
||||
*
|
||||
* @param jobExecution
|
||||
* @throws IllegalArgumentException
|
||||
*/
|
||||
private void validateJobExecution(JobExecution jobExecution) {
|
||||
|
||||
Assert.notNull(jobExecution);
|
||||
Assert.notNull(jobExecution.getJobId(), "JobExecution Job-Id cannot be null.");
|
||||
Assert.notNull(jobExecution.getStatus(), "JobExecution status cannot be null.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Update given JobExecution using a SQL UPDATE statement. The JobExecution
|
||||
* is first checked to ensure all fields are not null, and that it has an
|
||||
* ID. The database is then queried to ensure that the ID exists, which
|
||||
* ensures that it is valid.
|
||||
*
|
||||
* @see JobDao#updateJobExecution(JobExecution)
|
||||
*/
|
||||
public void updateJobExecution(JobExecution jobExecution) {
|
||||
|
||||
validateJobExecution(jobExecution);
|
||||
|
||||
String exitDescription = jobExecution.getExitStatus().getExitDescription();
|
||||
if (exitDescription != null && exitDescription.length() > EXIT_MESSAGE_LENGTH) {
|
||||
exitDescription = exitDescription.substring(0, EXIT_MESSAGE_LENGTH);
|
||||
logger.debug("Truncating long message before update of JobExecution: " + jobExecution);
|
||||
}
|
||||
Object[] parameters = new Object[] { jobExecution.getStartTime(), jobExecution.getEndTime(),
|
||||
jobExecution.getStatus().toString(), jobExecution.getExitStatus().isContinuable() ? "Y" : "N",
|
||||
jobExecution.getExitStatus().getExitCode(), exitDescription, jobExecution.getId() };
|
||||
|
||||
if (jobExecution.getId() == null) {
|
||||
throw new IllegalArgumentException("JobExecution ID cannot be null. JobExecution must be saved "
|
||||
+ "before it can be updated.");
|
||||
}
|
||||
|
||||
// Check if given JobExecution's Id already exists, if none is found it
|
||||
// is invalid and
|
||||
// an exception should be thrown.
|
||||
if (getJdbcTemplate().queryForInt(getQuery(CHECK_JOB_EXECUTION_EXISTS), new Object[] { jobExecution.getId() }) != 1) {
|
||||
throw new NoSuchObjectException("Invalid JobExecution, ID " + jobExecution.getId()
|
||||
+ " not found.");
|
||||
}
|
||||
|
||||
getJdbcTemplate().update(
|
||||
getQuery(UPDATE_JOB_EXECUTION),
|
||||
parameters,
|
||||
new int[] { Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.CHAR, Types.VARCHAR, Types.VARCHAR,
|
||||
Types.INTEGER });
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for {@link DataFieldMaxValueIncrementer} to be used when
|
||||
* generating primary keys for {@link JobExecution} instances.
|
||||
*
|
||||
* @param jobExecutionIncrementer the {@link DataFieldMaxValueIncrementer}
|
||||
*/
|
||||
public void setJobExecutionIncrementer(DataFieldMaxValueIncrementer jobExecutionIncrementer) {
|
||||
this.jobExecutionIncrementer = jobExecutionIncrementer;
|
||||
}
|
||||
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
super.afterPropertiesSet();
|
||||
Assert.notNull(jobExecutionIncrementer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-usable mapper for {@link JobExecution} instances.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
private static class JobExecutionRowMapper implements RowMapper {
|
||||
|
||||
private JobInstance job;
|
||||
|
||||
public JobExecutionRowMapper(JobInstance job) {
|
||||
super();
|
||||
this.job = job;
|
||||
}
|
||||
|
||||
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
JobExecution jobExecution = new JobExecution(job);
|
||||
jobExecution.setId(new Long(rs.getLong(1)));
|
||||
jobExecution.setStartTime(rs.getTimestamp(2));
|
||||
jobExecution.setEndTime(rs.getTimestamp(3));
|
||||
jobExecution.setStatus(BatchStatus.getStatus(rs.getString(4)));
|
||||
jobExecution.setExitStatus(new ExitStatus("Y".equals(rs.getString(5)), rs.getString(6), rs.getString(7)));
|
||||
return jobExecution;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public JobExecution getLastJobExecution(JobInstance jobInstance) {
|
||||
|
||||
Long id = jobInstance.getId();
|
||||
|
||||
List executions = getJdbcTemplate().query(getQuery(GET_LAST_EXECUTION), new Object[] { id, id },
|
||||
new JobExecutionRowMapper(jobInstance));
|
||||
|
||||
Assert.state(executions.size() <= 1, "There must be at most one latest job execution");
|
||||
|
||||
if (executions.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
return (JobExecution) executions.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.batch.core.domain.BatchStatus;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Jdbc implementation of {@link JobExecutionDao}. Uses sequences (via Spring's
|
||||
* {@link DataFieldMaxValueIncrementer} abstraction) to create all primary keys
|
||||
* before inserting a new row. Objects are checked to ensure all mandatory
|
||||
* fields to be stored are not null. If any are found to be null, an
|
||||
* IllegalArgumentException will be thrown. This could be left to JdbcTemplate,
|
||||
* however, the exception will be fairly vague, and fails to highlight which
|
||||
* field caused the exception.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
* @author Robert Kasanicky
|
||||
*/
|
||||
public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements JobExecutionDao, InitializingBean {
|
||||
|
||||
private static final Log logger = LogFactory.getLog(JdbcJobExecutionDao.class);
|
||||
|
||||
private static final int EXIT_MESSAGE_LENGTH = 250;
|
||||
|
||||
private static final String GET_JOB_EXECUTION_COUNT = "SELECT count(JOB_EXECUTION_ID) from %PREFIX%JOB_EXECUTION "
|
||||
+ "where JOB_INSTANCE_ID = ?";
|
||||
|
||||
private static final String SAVE_JOB_EXECUTION = "INSERT into %PREFIX%JOB_EXECUTION(JOB_EXECUTION_ID, JOB_INSTANCE_ID, START_TIME, "
|
||||
+ "END_TIME, STATUS, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE) values (?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
|
||||
private static final String CHECK_JOB_EXECUTION_EXISTS = "SELECT COUNT(*) FROM %PREFIX%JOB_EXECUTION WHERE JOB_EXECUTION_ID = ?";
|
||||
|
||||
private static final String UPDATE_JOB_EXECUTION = "UPDATE %PREFIX%JOB_EXECUTION set START_TIME = ?, END_TIME = ?, "
|
||||
+ " STATUS = ?, CONTINUABLE = ?, EXIT_CODE = ?, EXIT_MESSAGE = ? where JOB_EXECUTION_ID = ?";
|
||||
|
||||
private static final String FIND_JOB_EXECUTIONS = "SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%JOB_EXECUTION"
|
||||
+ " where JOB_INSTANCE_ID = ?";
|
||||
|
||||
private static final String GET_LAST_EXECUTION = "SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%JOB_EXECUTION"
|
||||
+ " where JOB_INSTANCE_ID = ? and START_TIME = (SELECT max(START_TIME) from %PREFIX%JOB_EXECUTION where JOB_INSTANCE_ID = ?)";
|
||||
|
||||
private DataFieldMaxValueIncrementer jobExecutionIncrementer;
|
||||
|
||||
public List findJobExecutions(final JobInstance job) {
|
||||
|
||||
Assert.notNull(job, "Job cannot be null.");
|
||||
Assert.notNull(job.getId(), "Job Id cannot be null.");
|
||||
|
||||
return getJdbcTemplate().query(getQuery(FIND_JOB_EXECUTIONS), new Object[] { job.getId() },
|
||||
new JobExecutionRowMapper(job));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see JobDao#getJobExecutionCount(JobInstance)
|
||||
* @throws IllegalArgumentException if jobId is null.
|
||||
*/
|
||||
public int getJobExecutionCount(JobInstance jobInstance) {
|
||||
Long jobId = jobInstance.getId();
|
||||
Assert.notNull(jobId, "JobId cannot be null");
|
||||
|
||||
Object[] parameters = new Object[] { jobId };
|
||||
|
||||
return getJdbcTemplate().queryForInt(getQuery(GET_JOB_EXECUTION_COUNT), parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* SQL implementation using Sequences via the Spring incrementer
|
||||
* abstraction. Once a new id has been obtained, the JobExecution is saved
|
||||
* via a SQL INSERT statement.
|
||||
*
|
||||
* @see JobDao#saveJobExecution(JobExecution)
|
||||
* @throws IllegalArgumentException if jobExecution is null, as well as any
|
||||
* of it's fields to be persisted.
|
||||
*/
|
||||
public void saveJobExecution(JobExecution jobExecution) {
|
||||
|
||||
validateJobExecution(jobExecution);
|
||||
|
||||
jobExecution.setId(new Long(jobExecutionIncrementer.nextLongValue()));
|
||||
Object[] parameters = new Object[] { jobExecution.getId(), jobExecution.getJobId(),
|
||||
jobExecution.getStartTime(), jobExecution.getEndTime(), jobExecution.getStatus().toString(),
|
||||
jobExecution.getExitStatus().isContinuable() ? "Y" : "N", jobExecution.getExitStatus().getExitCode(),
|
||||
jobExecution.getExitStatus().getExitDescription() };
|
||||
getJdbcTemplate().update(
|
||||
getQuery(SAVE_JOB_EXECUTION),
|
||||
parameters,
|
||||
new int[] { Types.INTEGER, Types.INTEGER, Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.CHAR,
|
||||
Types.VARCHAR, Types.VARCHAR });
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate JobExecution. At a minimum, JobId, StartTime, EndTime, and
|
||||
* Status cannot be null.
|
||||
*
|
||||
* @param jobExecution
|
||||
* @throws IllegalArgumentException
|
||||
*/
|
||||
private void validateJobExecution(JobExecution jobExecution) {
|
||||
|
||||
Assert.notNull(jobExecution);
|
||||
Assert.notNull(jobExecution.getJobId(), "JobExecution Job-Id cannot be null.");
|
||||
Assert.notNull(jobExecution.getStatus(), "JobExecution status cannot be null.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Update given JobExecution using a SQL UPDATE statement. The JobExecution
|
||||
* is first checked to ensure all fields are not null, and that it has an
|
||||
* ID. The database is then queried to ensure that the ID exists, which
|
||||
* ensures that it is valid.
|
||||
*
|
||||
* @see JobDao#updateJobExecution(JobExecution)
|
||||
*/
|
||||
public void updateJobExecution(JobExecution jobExecution) {
|
||||
|
||||
validateJobExecution(jobExecution);
|
||||
|
||||
String exitDescription = jobExecution.getExitStatus().getExitDescription();
|
||||
if (exitDescription != null && exitDescription.length() > EXIT_MESSAGE_LENGTH) {
|
||||
exitDescription = exitDescription.substring(0, EXIT_MESSAGE_LENGTH);
|
||||
logger.debug("Truncating long message before update of JobExecution: " + jobExecution);
|
||||
}
|
||||
Object[] parameters = new Object[] { jobExecution.getStartTime(), jobExecution.getEndTime(),
|
||||
jobExecution.getStatus().toString(), jobExecution.getExitStatus().isContinuable() ? "Y" : "N",
|
||||
jobExecution.getExitStatus().getExitCode(), exitDescription, jobExecution.getId() };
|
||||
|
||||
if (jobExecution.getId() == null) {
|
||||
throw new IllegalArgumentException("JobExecution ID cannot be null. JobExecution must be saved "
|
||||
+ "before it can be updated.");
|
||||
}
|
||||
|
||||
// Check if given JobExecution's Id already exists, if none is found it
|
||||
// is invalid and
|
||||
// an exception should be thrown.
|
||||
if (getJdbcTemplate().queryForInt(getQuery(CHECK_JOB_EXECUTION_EXISTS), new Object[] { jobExecution.getId() }) != 1) {
|
||||
throw new NoSuchObjectException("Invalid JobExecution, ID " + jobExecution.getId()
|
||||
+ " not found.");
|
||||
}
|
||||
|
||||
getJdbcTemplate().update(
|
||||
getQuery(UPDATE_JOB_EXECUTION),
|
||||
parameters,
|
||||
new int[] { Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.CHAR, Types.VARCHAR, Types.VARCHAR,
|
||||
Types.INTEGER });
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for {@link DataFieldMaxValueIncrementer} to be used when
|
||||
* generating primary keys for {@link JobExecution} instances.
|
||||
*
|
||||
* @param jobExecutionIncrementer the {@link DataFieldMaxValueIncrementer}
|
||||
*/
|
||||
public void setJobExecutionIncrementer(DataFieldMaxValueIncrementer jobExecutionIncrementer) {
|
||||
this.jobExecutionIncrementer = jobExecutionIncrementer;
|
||||
}
|
||||
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
super.afterPropertiesSet();
|
||||
Assert.notNull(jobExecutionIncrementer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-usable mapper for {@link JobExecution} instances.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
private static class JobExecutionRowMapper implements RowMapper {
|
||||
|
||||
private JobInstance job;
|
||||
|
||||
public JobExecutionRowMapper(JobInstance job) {
|
||||
super();
|
||||
this.job = job;
|
||||
}
|
||||
|
||||
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
JobExecution jobExecution = new JobExecution(job);
|
||||
jobExecution.setId(new Long(rs.getLong(1)));
|
||||
jobExecution.setStartTime(rs.getTimestamp(2));
|
||||
jobExecution.setEndTime(rs.getTimestamp(3));
|
||||
jobExecution.setStatus(BatchStatus.getStatus(rs.getString(4)));
|
||||
jobExecution.setExitStatus(new ExitStatus("Y".equals(rs.getString(5)), rs.getString(6), rs.getString(7)));
|
||||
return jobExecution;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public JobExecution getLastJobExecution(JobInstance jobInstance) {
|
||||
|
||||
Long id = jobInstance.getId();
|
||||
|
||||
List executions = getJdbcTemplate().query(getQuery(GET_LAST_EXECUTION), new Object[] { id, id },
|
||||
new JobExecutionRowMapper(jobInstance));
|
||||
|
||||
Assert.state(executions.size() <= 1, "There must be at most one latest job execution");
|
||||
|
||||
if (executions.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
return (JobExecution) executions.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,236 +1,236 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Timestamp;
|
||||
import java.sql.Types;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Jdbc implementation of {@link JobInstanceDao}. Uses sequences (via Spring's
|
||||
* {@link DataFieldMaxValueIncrementer} abstraction) to create all primary keys
|
||||
* before inserting a new row. Objects are checked to ensure all mandatory
|
||||
* fields to be stored are not null. If any are found to be null, an
|
||||
* IllegalArgumentException will be thrown. This could be left to JdbcTemplate,
|
||||
* however, the exception will be fairly vague, and fails to highlight which
|
||||
* field caused the exception.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
* @author Robert Kasanicky
|
||||
*/
|
||||
public class JdbcJobInstanceDao extends AbstractJdbcBatchMetadataDao implements JobInstanceDao, InitializingBean {
|
||||
|
||||
private static final String CREATE_JOB_INSTANCE = "INSERT into %PREFIX%JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY)"
|
||||
+ " values (?, ?, ?)";
|
||||
|
||||
private static final String CREATE_JOB_PARAMETERS = "INSERT into %PREFIX%JOB_PARAMS(JOB_INSTANCE_ID, KEY_NAME, TYPE_CD, "
|
||||
+ "STRING_VAL, DATE_VAL, LONG_VAL, DOUBLE_VAL) values (?, ?, ?, ?, ?, ?, ?)";
|
||||
|
||||
private static final String FIND_JOBS = "SELECT JOB_INSTANCE_ID from %PREFIX%JOB_INSTANCE where JOB_NAME = ? and JOB_KEY = ?";
|
||||
|
||||
private DataFieldMaxValueIncrementer jobIncrementer;
|
||||
|
||||
/**
|
||||
* In this jdbc implementation a job id is obtained by asking the
|
||||
* jobIncrementer (which is likely a sequence) for the nextLong, and then
|
||||
* passing the Id and parameter values into an INSERT statement.
|
||||
*
|
||||
* @see JobDao#createJob(JobIdentifier)
|
||||
* @throws IllegalArgumentException if any {@link JobIdentifier} fields are
|
||||
* null.
|
||||
*/
|
||||
public JobInstance createJobInstance(Job job, JobParameters jobParameters) {
|
||||
|
||||
Assert.notNull(job, "Job must not be null.");
|
||||
Assert.hasLength(job.getName(), "Job must have a name");
|
||||
Assert.notNull(jobParameters, "JobParameters must not be null.");
|
||||
|
||||
Assert.state(getJobInstance(job, jobParameters) == null, "JobInstance must not already exist");
|
||||
|
||||
Long jobId = new Long(jobIncrementer.nextLongValue());
|
||||
Object[] parameters = new Object[] { jobId, job.getName(), createJobKey(jobParameters) };
|
||||
getJdbcTemplate().update(getQuery(CREATE_JOB_INSTANCE), parameters,
|
||||
new int[] { Types.INTEGER, Types.VARCHAR, Types.VARCHAR });
|
||||
|
||||
insertJobParameters(jobId, jobParameters);
|
||||
|
||||
JobInstance jobInstance = new JobInstance(jobId, jobParameters, job);
|
||||
return jobInstance;
|
||||
}
|
||||
|
||||
private String createJobKey(JobParameters jobParameters) {
|
||||
|
||||
Map props = jobParameters.getParameters();
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
for (Iterator it = props.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
stringBuffer.append(entry.toString() + ";");
|
||||
}
|
||||
|
||||
return stringBuffer.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method that inserts all parameters from the provided
|
||||
* JobParameters.
|
||||
*
|
||||
*/
|
||||
private void insertJobParameters(Long jobId, JobParameters jobParameters) {
|
||||
|
||||
Map parameters = jobParameters.getStringParameters();
|
||||
|
||||
if (!parameters.isEmpty()) {
|
||||
for (Iterator it = parameters.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
insertParameter(jobId, ParameterType.STRING, entry.getKey().toString(), entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
parameters = jobParameters.getLongParameters();
|
||||
|
||||
if (!parameters.isEmpty()) {
|
||||
for (Iterator it = parameters.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
insertParameter(jobId, ParameterType.LONG, entry.getKey().toString(), entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
parameters = jobParameters.getDoubleParameters();
|
||||
|
||||
if (!parameters.isEmpty()) {
|
||||
for (Iterator it = parameters.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
insertParameter(jobId, ParameterType.DOUBLE, entry.getKey().toString(), entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
parameters = jobParameters.getDateParameters();
|
||||
|
||||
if (!parameters.isEmpty()) {
|
||||
for (Iterator it = parameters.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
insertParameter(jobId, ParameterType.DATE, entry.getKey().toString(), entry.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method that inserts an individual records into the
|
||||
* JobParameters table.
|
||||
*/
|
||||
private void insertParameter(Long jobId, ParameterType type, String key, Object value) {
|
||||
|
||||
Object[] args = new Object[0];
|
||||
int[] argTypes = new int[] { Types.INTEGER, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.TIMESTAMP,
|
||||
Types.INTEGER, Types.DOUBLE };
|
||||
|
||||
if (type == ParameterType.STRING) {
|
||||
args = new Object[] { jobId, key, type, value, new Timestamp(0L), new Long(0), new Double(0) };
|
||||
}
|
||||
else if (type == ParameterType.LONG) {
|
||||
args = new Object[] { jobId, key, type, "", new Timestamp(0L), value, new Double(0) };
|
||||
}
|
||||
else if (type == ParameterType.DOUBLE) {
|
||||
args = new Object[] { jobId, key, type, "", new Timestamp(0L), new Long(0), value };
|
||||
}
|
||||
else if (type == ParameterType.DATE) {
|
||||
args = new Object[] { jobId, key, type, "", value, new Long(0), new Double(0) };
|
||||
}
|
||||
|
||||
getJdbcTemplate().update(getQuery(CREATE_JOB_PARAMETERS), args, argTypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* The job table is queried for <strong>any</strong> jobs that match the
|
||||
* given identifier, adding them to a list via the RowMapper callback.
|
||||
*
|
||||
* @see JobDao#findJobInstances(JobIdentifier)
|
||||
* @throws IllegalArgumentException if any {@link JobIdentifier} fields are
|
||||
* null.
|
||||
*/
|
||||
public JobInstance getJobInstance(final Job job, final JobParameters jobParameters) {
|
||||
|
||||
Assert.notNull(job, "Job must not be null.");
|
||||
Assert.hasLength(job.getName(), "Job must have a name");
|
||||
Assert.notNull(jobParameters, "JobParameters must not be null.");
|
||||
|
||||
Object[] parameters = new Object[] { job.getName(), createJobKey(jobParameters) };
|
||||
|
||||
RowMapper rowMapper = new RowMapper() {
|
||||
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
JobInstance jobInstance = new JobInstance(new Long(rs.getLong(1)), jobParameters, job);
|
||||
return jobInstance;
|
||||
}
|
||||
};
|
||||
|
||||
List instances = getJdbcTemplate().query(getQuery(FIND_JOBS), parameters, rowMapper);
|
||||
|
||||
if (instances.isEmpty()) {
|
||||
return null;
|
||||
} else {
|
||||
Assert.state(instances.size() == 1);
|
||||
return (JobInstance) instances.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for {@link DataFieldMaxValueIncrementer} to be used when
|
||||
* generating primary keys for {@link JobInstance} instances.
|
||||
*
|
||||
* @param jobIncrementer the {@link DataFieldMaxValueIncrementer}
|
||||
*/
|
||||
public void setJobIncrementer(DataFieldMaxValueIncrementer jobIncrementer) {
|
||||
this.jobIncrementer = jobIncrementer;
|
||||
}
|
||||
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
super.afterPropertiesSet();
|
||||
Assert.notNull(jobIncrementer);
|
||||
}
|
||||
|
||||
private static class ParameterType {
|
||||
|
||||
private final String type;
|
||||
|
||||
private ParameterType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public static final ParameterType STRING = new ParameterType("STRING");
|
||||
|
||||
public static final ParameterType DATE = new ParameterType("DATE");
|
||||
|
||||
public static final ParameterType LONG = new ParameterType("LONG");
|
||||
|
||||
public static final ParameterType DOUBLE = new ParameterType("DOUBLE");
|
||||
|
||||
private static final ParameterType[] VALUES = { STRING, DATE, LONG, DOUBLE };
|
||||
|
||||
public static ParameterType getType(String typeAsString) {
|
||||
|
||||
for (int i = 0; i < VALUES.length; i++) {
|
||||
if (VALUES[i].toString().equals(typeAsString)) {
|
||||
return (ParameterType) VALUES[i];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Timestamp;
|
||||
import java.sql.Types;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Jdbc implementation of {@link JobInstanceDao}. Uses sequences (via Spring's
|
||||
* {@link DataFieldMaxValueIncrementer} abstraction) to create all primary keys
|
||||
* before inserting a new row. Objects are checked to ensure all mandatory
|
||||
* fields to be stored are not null. If any are found to be null, an
|
||||
* IllegalArgumentException will be thrown. This could be left to JdbcTemplate,
|
||||
* however, the exception will be fairly vague, and fails to highlight which
|
||||
* field caused the exception.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
* @author Robert Kasanicky
|
||||
*/
|
||||
public class JdbcJobInstanceDao extends AbstractJdbcBatchMetadataDao implements JobInstanceDao, InitializingBean {
|
||||
|
||||
private static final String CREATE_JOB_INSTANCE = "INSERT into %PREFIX%JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY)"
|
||||
+ " values (?, ?, ?)";
|
||||
|
||||
private static final String CREATE_JOB_PARAMETERS = "INSERT into %PREFIX%JOB_PARAMS(JOB_INSTANCE_ID, KEY_NAME, TYPE_CD, "
|
||||
+ "STRING_VAL, DATE_VAL, LONG_VAL, DOUBLE_VAL) values (?, ?, ?, ?, ?, ?, ?)";
|
||||
|
||||
private static final String FIND_JOBS = "SELECT JOB_INSTANCE_ID from %PREFIX%JOB_INSTANCE where JOB_NAME = ? and JOB_KEY = ?";
|
||||
|
||||
private DataFieldMaxValueIncrementer jobIncrementer;
|
||||
|
||||
/**
|
||||
* In this jdbc implementation a job id is obtained by asking the
|
||||
* jobIncrementer (which is likely a sequence) for the nextLong, and then
|
||||
* passing the Id and parameter values into an INSERT statement.
|
||||
*
|
||||
* @see JobDao#createJob(JobIdentifier)
|
||||
* @throws IllegalArgumentException if any {@link JobIdentifier} fields are
|
||||
* null.
|
||||
*/
|
||||
public JobInstance createJobInstance(Job job, JobParameters jobParameters) {
|
||||
|
||||
Assert.notNull(job, "Job must not be null.");
|
||||
Assert.hasLength(job.getName(), "Job must have a name");
|
||||
Assert.notNull(jobParameters, "JobParameters must not be null.");
|
||||
|
||||
Assert.state(getJobInstance(job, jobParameters) == null, "JobInstance must not already exist");
|
||||
|
||||
Long jobId = new Long(jobIncrementer.nextLongValue());
|
||||
Object[] parameters = new Object[] { jobId, job.getName(), createJobKey(jobParameters) };
|
||||
getJdbcTemplate().update(getQuery(CREATE_JOB_INSTANCE), parameters,
|
||||
new int[] { Types.INTEGER, Types.VARCHAR, Types.VARCHAR });
|
||||
|
||||
insertJobParameters(jobId, jobParameters);
|
||||
|
||||
JobInstance jobInstance = new JobInstance(jobId, jobParameters, job);
|
||||
return jobInstance;
|
||||
}
|
||||
|
||||
private String createJobKey(JobParameters jobParameters) {
|
||||
|
||||
Map props = jobParameters.getParameters();
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
for (Iterator it = props.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
stringBuffer.append(entry.toString() + ";");
|
||||
}
|
||||
|
||||
return stringBuffer.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method that inserts all parameters from the provided
|
||||
* JobParameters.
|
||||
*
|
||||
*/
|
||||
private void insertJobParameters(Long jobId, JobParameters jobParameters) {
|
||||
|
||||
Map parameters = jobParameters.getStringParameters();
|
||||
|
||||
if (!parameters.isEmpty()) {
|
||||
for (Iterator it = parameters.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
insertParameter(jobId, ParameterType.STRING, entry.getKey().toString(), entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
parameters = jobParameters.getLongParameters();
|
||||
|
||||
if (!parameters.isEmpty()) {
|
||||
for (Iterator it = parameters.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
insertParameter(jobId, ParameterType.LONG, entry.getKey().toString(), entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
parameters = jobParameters.getDoubleParameters();
|
||||
|
||||
if (!parameters.isEmpty()) {
|
||||
for (Iterator it = parameters.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
insertParameter(jobId, ParameterType.DOUBLE, entry.getKey().toString(), entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
parameters = jobParameters.getDateParameters();
|
||||
|
||||
if (!parameters.isEmpty()) {
|
||||
for (Iterator it = parameters.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
insertParameter(jobId, ParameterType.DATE, entry.getKey().toString(), entry.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method that inserts an individual records into the
|
||||
* JobParameters table.
|
||||
*/
|
||||
private void insertParameter(Long jobId, ParameterType type, String key, Object value) {
|
||||
|
||||
Object[] args = new Object[0];
|
||||
int[] argTypes = new int[] { Types.INTEGER, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.TIMESTAMP,
|
||||
Types.INTEGER, Types.DOUBLE };
|
||||
|
||||
if (type == ParameterType.STRING) {
|
||||
args = new Object[] { jobId, key, type, value, new Timestamp(0L), new Long(0), new Double(0) };
|
||||
}
|
||||
else if (type == ParameterType.LONG) {
|
||||
args = new Object[] { jobId, key, type, "", new Timestamp(0L), value, new Double(0) };
|
||||
}
|
||||
else if (type == ParameterType.DOUBLE) {
|
||||
args = new Object[] { jobId, key, type, "", new Timestamp(0L), new Long(0), value };
|
||||
}
|
||||
else if (type == ParameterType.DATE) {
|
||||
args = new Object[] { jobId, key, type, "", value, new Long(0), new Double(0) };
|
||||
}
|
||||
|
||||
getJdbcTemplate().update(getQuery(CREATE_JOB_PARAMETERS), args, argTypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* The job table is queried for <strong>any</strong> jobs that match the
|
||||
* given identifier, adding them to a list via the RowMapper callback.
|
||||
*
|
||||
* @see JobDao#findJobInstances(JobIdentifier)
|
||||
* @throws IllegalArgumentException if any {@link JobIdentifier} fields are
|
||||
* null.
|
||||
*/
|
||||
public JobInstance getJobInstance(final Job job, final JobParameters jobParameters) {
|
||||
|
||||
Assert.notNull(job, "Job must not be null.");
|
||||
Assert.hasLength(job.getName(), "Job must have a name");
|
||||
Assert.notNull(jobParameters, "JobParameters must not be null.");
|
||||
|
||||
Object[] parameters = new Object[] { job.getName(), createJobKey(jobParameters) };
|
||||
|
||||
RowMapper rowMapper = new RowMapper() {
|
||||
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
JobInstance jobInstance = new JobInstance(new Long(rs.getLong(1)), jobParameters, job);
|
||||
return jobInstance;
|
||||
}
|
||||
};
|
||||
|
||||
List instances = getJdbcTemplate().query(getQuery(FIND_JOBS), parameters, rowMapper);
|
||||
|
||||
if (instances.isEmpty()) {
|
||||
return null;
|
||||
} else {
|
||||
Assert.state(instances.size() == 1);
|
||||
return (JobInstance) instances.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for {@link DataFieldMaxValueIncrementer} to be used when
|
||||
* generating primary keys for {@link JobInstance} instances.
|
||||
*
|
||||
* @param jobIncrementer the {@link DataFieldMaxValueIncrementer}
|
||||
*/
|
||||
public void setJobIncrementer(DataFieldMaxValueIncrementer jobIncrementer) {
|
||||
this.jobIncrementer = jobIncrementer;
|
||||
}
|
||||
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
super.afterPropertiesSet();
|
||||
Assert.notNull(jobIncrementer);
|
||||
}
|
||||
|
||||
private static class ParameterType {
|
||||
|
||||
private final String type;
|
||||
|
||||
private ParameterType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public static final ParameterType STRING = new ParameterType("STRING");
|
||||
|
||||
public static final ParameterType DATE = new ParameterType("DATE");
|
||||
|
||||
public static final ParameterType LONG = new ParameterType("LONG");
|
||||
|
||||
public static final ParameterType DOUBLE = new ParameterType("DOUBLE");
|
||||
|
||||
private static final ParameterType[] VALUES = { STRING, DATE, LONG, DOUBLE };
|
||||
|
||||
public static ParameterType getType(String typeAsString) {
|
||||
|
||||
for (int i = 0; i < VALUES.length; i++) {
|
||||
if (VALUES[i].toString().equals(typeAsString)) {
|
||||
return (ParameterType) VALUES[i];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,425 +1,425 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.apache.commons.lang.SerializationUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.batch.core.domain.BatchStatus;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.io.exception.InfrastructureException;
|
||||
import org.springframework.batch.item.ExecutionContext;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.dao.OptimisticLockingFailureException;
|
||||
import org.springframework.jdbc.core.PreparedStatementCallback;
|
||||
import org.springframework.jdbc.core.RowCallbackHandler;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback;
|
||||
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
|
||||
import org.springframework.jdbc.support.lob.DefaultLobHandler;
|
||||
import org.springframework.jdbc.support.lob.LobCreator;
|
||||
import org.springframework.jdbc.support.lob.LobHandler;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Jdbc implementation of {@link StepExecutionDao}.<br/>
|
||||
*
|
||||
* Allows customization of the tables names used by Spring Batch for step meta
|
||||
* data via a prefix property.<br/>
|
||||
*
|
||||
* Uses sequences or tables (via Spring's {@link DataFieldMaxValueIncrementer}
|
||||
* abstraction) to create all primary keys before inserting a new row. All
|
||||
* objects are checked to ensure all fields to be stored are not null. If any
|
||||
* are found to be null, an IllegalArgumentException will be thrown. This could
|
||||
* be left to JdbcTemplate, however, the exception will be fairly vague, and
|
||||
* fails to highlight which field caused the exception.<br/>
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
* @author Robert Kasanicky
|
||||
*
|
||||
* @see StepExecutionDao
|
||||
*/
|
||||
public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implements StepExecutionDao, InitializingBean {
|
||||
|
||||
private static final Log logger = LogFactory.getLog(JdbcStepExecutionDao.class);
|
||||
|
||||
private static final String FIND_STEP_EXECUTION_CONTEXT = "SELECT TYPE_CD, KEY_NAME, STRING_VAL, DOUBLE_VAL, LONG_VAL, OBJECT_VAL "
|
||||
+ "from %PREFIX%STEP_EXECUTION_CONTEXT where STEP_EXECUTION_ID = ?";
|
||||
|
||||
private static final String INSERT_STEP_EXECUTION_CONTEXT = "INSERT into %PREFIX%STEP_EXECUTION_CONTEXT(STEP_EXECUTION_ID, TYPE_CD,"
|
||||
+ " KEY_NAME, STRING_VAL, DOUBLE_VAL, LONG_VAL, OBJECT_VAL) values(?,?,?,?,?,?,?)";
|
||||
|
||||
private static final String SAVE_STEP_EXECUTION = "INSERT into %PREFIX%STEP_EXECUTION(STEP_EXECUTION_ID, VERSION, STEP_NAME, JOB_EXECUTION_ID, START_TIME, "
|
||||
+ "END_TIME, STATUS, COMMIT_COUNT, TASK_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE) "
|
||||
+ "values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
|
||||
private static final String UPDATE_STEP_EXECUTION_CONTEXT = "UPDATE %PREFIX%STEP_EXECUTION_CONTEXT set "
|
||||
+ "TYPE_CD = ?, STRING_VAL = ?, DOUBLE_VAL = ?, LONG_VAL = ?, OBJECT_VAL = ? where STEP_EXECUTION_ID = ? and KEY_NAME = ?";
|
||||
|
||||
private static final String UPDATE_STEP_EXECUTION = "UPDATE %PREFIX%STEP_EXECUTION set START_TIME = ?, END_TIME = ?, "
|
||||
+ "STATUS = ?, COMMIT_COUNT = ?, TASK_COUNT = ?, CONTINUABLE = ? , EXIT_CODE = ?, "
|
||||
+ "EXIT_MESSAGE = ?, VERSION = ? where STEP_EXECUTION_ID = ? and VERSION = ?";
|
||||
|
||||
private static final String GET_STEP_EXECUTION = "SELECT STEP_EXECUTION_ID, STEP_NAME, START_TIME, END_TIME, STATUS, COMMIT_COUNT,"
|
||||
+ " TASK_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%STEP_EXECUTION where STEP_NAME = ? and JOB_EXECUTION_ID = ?";
|
||||
|
||||
private static final String CURRENT_VERSION_STEP_EXECUTION = "SELECT VERSION FROM %PREFIX%STEP_EXECUTION WHERE STEP_EXECUTION_ID=?";
|
||||
|
||||
private static final int EXIT_MESSAGE_LENGTH = 250;
|
||||
|
||||
private LobHandler lobHandler = new DefaultLobHandler();
|
||||
|
||||
private DataFieldMaxValueIncrementer stepExecutionIncrementer;
|
||||
|
||||
public ExecutionContext findExecutionContext(final StepExecution stepExecution) {
|
||||
|
||||
final Long executionId = stepExecution.getId();
|
||||
Assert.notNull(executionId, "ExecutionId must not be null.");
|
||||
|
||||
final ExecutionContext executionContext = new ExecutionContext();
|
||||
|
||||
RowCallbackHandler callback = new RowCallbackHandler() {
|
||||
|
||||
public void processRow(ResultSet rs) throws SQLException {
|
||||
|
||||
String typeCd = rs.getString("TYPE_CD");
|
||||
AttributeType type = AttributeType.getType(typeCd);
|
||||
String key = rs.getString("KEY_NAME");
|
||||
if (type == AttributeType.STRING) {
|
||||
executionContext.putString(key, rs.getString("STRING_VAL"));
|
||||
}
|
||||
else if (type == AttributeType.LONG) {
|
||||
executionContext.putLong(key, rs.getLong("LONG_VAL"));
|
||||
}
|
||||
else if (type == AttributeType.DOUBLE) {
|
||||
executionContext.putDouble(key, rs.getDouble("DOUBLE_VAL"));
|
||||
}
|
||||
else if (type == AttributeType.OBJECT) {
|
||||
executionContext.put(key, rs.getObject("OBJECT_VAL"));
|
||||
}
|
||||
else {
|
||||
throw new InfrastructureException("Invalid type found: [" + typeCd + "] for execution id: ["
|
||||
+ executionId + "]");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
getJdbcTemplate().query(getQuery(FIND_STEP_EXECUTION_CONTEXT), new Object[] { executionId }, callback);
|
||||
|
||||
return executionContext;
|
||||
}
|
||||
|
||||
private void insertExecutionAttribute(final Long executionId, final String key, final Object value,
|
||||
final AttributeType type) {
|
||||
PreparedStatementCallback callback = new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
|
||||
|
||||
protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException,
|
||||
DataAccessException {
|
||||
|
||||
ps.setLong(1, executionId.longValue());
|
||||
ps.setString(3, key);
|
||||
if (type == AttributeType.STRING) {
|
||||
ps.setString(2, AttributeType.STRING.toString());
|
||||
ps.setString(4, value.toString());
|
||||
ps.setDouble(5, 0.0);
|
||||
ps.setLong(6, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 7, null);
|
||||
}
|
||||
else if (type == AttributeType.DOUBLE) {
|
||||
ps.setString(2, AttributeType.DOUBLE.toString());
|
||||
ps.setString(4, null);
|
||||
ps.setDouble(5, ((Double) value).doubleValue());
|
||||
ps.setLong(6, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 7, null);
|
||||
}
|
||||
else if (type == AttributeType.LONG) {
|
||||
ps.setString(2, AttributeType.LONG.toString());
|
||||
ps.setString(4, null);
|
||||
ps.setDouble(5, 0.0);
|
||||
ps.setLong(6, ((Long) value).longValue());
|
||||
lobCreator.setBlobAsBytes(ps, 7, null);
|
||||
}
|
||||
else {
|
||||
ps.setString(2, AttributeType.OBJECT.toString());
|
||||
ps.setString(4, null);
|
||||
ps.setDouble(5, 0.0);
|
||||
ps.setLong(6, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 7, SerializationUtils.serialize((Serializable) value));
|
||||
}
|
||||
}
|
||||
};
|
||||
getJdbcTemplate().execute(getQuery(INSERT_STEP_EXECUTION_CONTEXT), callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a StepExecution. A unique id will be generated by the
|
||||
* stepExecutionIncrementor, and then set in the StepExecution. All values
|
||||
* will then be stored via an INSERT statement.
|
||||
*
|
||||
* @see StepDao#saveStepExecution(StepExecution)
|
||||
*/
|
||||
public void saveStepExecution(StepExecution stepExecution) {
|
||||
|
||||
validateStepExecution(stepExecution);
|
||||
|
||||
stepExecution.setId(new Long(stepExecutionIncrementer.nextLongValue()));
|
||||
stepExecution.incrementVersion(); // should be 0 now
|
||||
Object[] parameters = new Object[] { stepExecution.getId(), stepExecution.getVersion(),
|
||||
stepExecution.getStepName(), stepExecution.getJobExecutionId(), stepExecution.getStartTime(),
|
||||
stepExecution.getEndTime(), stepExecution.getStatus().toString(), stepExecution.getCommitCount(),
|
||||
stepExecution.getTaskCount(), stepExecution.getExitStatus().isContinuable() ? "Y" : "N",
|
||||
stepExecution.getExitStatus().getExitCode(), stepExecution.getExitStatus().getExitDescription() };
|
||||
getJdbcTemplate().update(
|
||||
getQuery(SAVE_STEP_EXECUTION),
|
||||
parameters,
|
||||
new int[] { Types.INTEGER, Types.INTEGER, Types.VARCHAR, Types.INTEGER, Types.TIMESTAMP,
|
||||
Types.TIMESTAMP, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.CHAR, Types.VARCHAR,
|
||||
Types.VARCHAR });
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate StepExecution. At a minimum, JobId, StartTime, and Status cannot
|
||||
* be null. EndTime can be null for an unfinished job.
|
||||
*
|
||||
* @param jobExecution
|
||||
* @throws IllegalArgumentException
|
||||
*/
|
||||
private void validateStepExecution(StepExecution stepExecution) {
|
||||
Assert.notNull(stepExecution);
|
||||
Assert.notNull(stepExecution.getStepName(), "StepExecution step name cannot be null.");
|
||||
Assert.notNull(stepExecution.getStartTime(), "StepExecution start time cannot be null.");
|
||||
Assert.notNull(stepExecution.getStatus(), "StepExecution status cannot be null.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Save or update execution attributes. A lob creator must be used, since
|
||||
* any attributes that don't match a provided type must be serialized into a
|
||||
* blob.
|
||||
*
|
||||
* @see {@link LobCreator}
|
||||
*/
|
||||
public void saveOrUpdateExecutionContext(final StepExecution stepExecution) {
|
||||
|
||||
Long executionId = stepExecution.getId();
|
||||
ExecutionContext executionContext = stepExecution.getExecutionContext();
|
||||
Assert.notNull(executionId, "ExecutionId must not be null.");
|
||||
Assert.notNull(executionContext, "The ExecutionContext must not be null.");
|
||||
|
||||
for (Iterator it = executionContext.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
final String key = entry.getKey().toString();
|
||||
final Object value = entry.getValue();
|
||||
|
||||
if (value instanceof String) {
|
||||
updateExecutionAttribute(executionId, key, value, AttributeType.STRING);
|
||||
}
|
||||
else if (value instanceof Double) {
|
||||
updateExecutionAttribute(executionId, key, value, AttributeType.DOUBLE);
|
||||
}
|
||||
else if (value instanceof Long) {
|
||||
updateExecutionAttribute(executionId, key, value, AttributeType.LONG);
|
||||
}
|
||||
else {
|
||||
updateExecutionAttribute(executionId, key, value, AttributeType.OBJECT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateExecutionAttribute(final Long executionId, final String key, final Object value,
|
||||
final AttributeType type) {
|
||||
|
||||
PreparedStatementCallback callback = new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
|
||||
|
||||
protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException,
|
||||
DataAccessException {
|
||||
|
||||
ps.setLong(6, executionId.longValue());
|
||||
ps.setString(7, key);
|
||||
if (type == AttributeType.STRING) {
|
||||
ps.setString(1, AttributeType.STRING.toString());
|
||||
ps.setString(2, value.toString());
|
||||
ps.setDouble(3, 0.0);
|
||||
ps.setLong(4, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 5, null);
|
||||
}
|
||||
else if (type == AttributeType.DOUBLE) {
|
||||
ps.setString(1, AttributeType.DOUBLE.toString());
|
||||
ps.setString(2, null);
|
||||
ps.setDouble(3, ((Double) value).doubleValue());
|
||||
ps.setLong(4, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 5, null);
|
||||
}
|
||||
else if (type == AttributeType.LONG) {
|
||||
ps.setString(1, AttributeType.LONG.toString());
|
||||
ps.setString(2, null);
|
||||
ps.setDouble(3, 0.0);
|
||||
ps.setLong(4, ((Long) value).longValue());
|
||||
lobCreator.setBlobAsBytes(ps, 5, null);
|
||||
}
|
||||
else {
|
||||
ps.setString(1, AttributeType.OBJECT.toString());
|
||||
ps.setString(2, null);
|
||||
ps.setDouble(3, 0.0);
|
||||
ps.setLong(4, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 5, SerializationUtils.serialize((Serializable) value));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// LobCreating callbacks always return the affect row count for SQL DML
|
||||
// statements, if less than 1 row
|
||||
// is affected, then this row is new and should be inserted.
|
||||
Integer affectedRows = (Integer) getJdbcTemplate().execute(getQuery(UPDATE_STEP_EXECUTION_CONTEXT), callback);
|
||||
if (affectedRows.intValue() < 1) {
|
||||
insertExecutionAttribute(executionId, key, value, type);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.execution.repository.dao.StepExecutionDao#updateStepExecution(org.springframework.batch.core.domain.StepExecution)
|
||||
*/
|
||||
public void updateStepExecution(StepExecution stepExecution) {
|
||||
|
||||
validateStepExecution(stepExecution);
|
||||
Assert.notNull(stepExecution.getId(), "StepExecution Id cannot be null. StepExecution must saved"
|
||||
+ " before it can be updated.");
|
||||
|
||||
// Do not check for existence of step execution considering
|
||||
// it is saved at every commit point.
|
||||
|
||||
String exitDescription = stepExecution.getExitStatus().getExitDescription();
|
||||
if (exitDescription != null && exitDescription.length() > EXIT_MESSAGE_LENGTH) {
|
||||
exitDescription = exitDescription.substring(0, EXIT_MESSAGE_LENGTH);
|
||||
logger.debug("Truncating long message before update of StepExecution: " + stepExecution);
|
||||
}
|
||||
|
||||
// Attempt to prevent concurrent modification errors by blocking here if
|
||||
// someone is already trying to do it.
|
||||
synchronized (stepExecution) {
|
||||
|
||||
Integer version = new Integer(stepExecution.getVersion().intValue() + 1);
|
||||
Object[] parameters = new Object[] { stepExecution.getStartTime(), stepExecution.getEndTime(),
|
||||
stepExecution.getStatus().toString(), stepExecution.getCommitCount(), stepExecution.getTaskCount(),
|
||||
stepExecution.getExitStatus().isContinuable() ? "Y" : "N",
|
||||
stepExecution.getExitStatus().getExitCode(), exitDescription, version, stepExecution.getId(),
|
||||
stepExecution.getVersion() };
|
||||
int count = getJdbcTemplate().update(
|
||||
getQuery(UPDATE_STEP_EXECUTION),
|
||||
parameters,
|
||||
new int[] { Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.INTEGER, Types.INTEGER,
|
||||
Types.CHAR, Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.INTEGER });
|
||||
|
||||
// Avoid concurrent modifications...
|
||||
if (count == 0) {
|
||||
int curentVersion = getJdbcTemplate().queryForInt(
|
||||
getQuery(CURRENT_VERSION_STEP_EXECUTION),
|
||||
new Object[] { stepExecution.getId() });
|
||||
throw new OptimisticLockingFailureException("Attempt to update step execution id="
|
||||
+ stepExecution.getId() + " with wrong version (" + stepExecution.getVersion() + "), where current version is "+curentVersion);
|
||||
}
|
||||
|
||||
stepExecution.incrementVersion();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private class StepExecutionRowMapper implements RowMapper {
|
||||
|
||||
private final JobExecution jobExecution;
|
||||
|
||||
private final Step step;
|
||||
|
||||
public StepExecutionRowMapper(JobExecution jobExecution, Step step) {
|
||||
this.jobExecution = jobExecution;
|
||||
this.step = step;
|
||||
}
|
||||
|
||||
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
|
||||
StepExecution stepExecution = new StepExecution(step, jobExecution, new Long(rs.getLong(1)));
|
||||
stepExecution.setStartTime(rs.getTimestamp(3));
|
||||
stepExecution.setEndTime(rs.getTimestamp(4));
|
||||
stepExecution.setStatus(BatchStatus.getStatus(rs.getString(5)));
|
||||
stepExecution.setCommitCount(rs.getInt(6));
|
||||
stepExecution.setTaskCount(rs.getInt(7));
|
||||
stepExecution.setExitStatus(new ExitStatus("Y".equals(rs.getString(8)), rs.getString(9), rs.getString(10)));
|
||||
stepExecution.setExecutionContext(findExecutionContext(stepExecution));
|
||||
return stepExecution;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setLobHandler(LobHandler lobHandler) {
|
||||
this.lobHandler = lobHandler;
|
||||
}
|
||||
|
||||
public void setStepExecutionIncrementer(DataFieldMaxValueIncrementer stepExecutionIncrementer) {
|
||||
this.stepExecutionIncrementer = stepExecutionIncrementer;
|
||||
}
|
||||
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
Assert.notNull(stepExecutionIncrementer, "StepExecutionIncrementer cannot be null.");
|
||||
}
|
||||
|
||||
public static class AttributeType {
|
||||
|
||||
private final String type;
|
||||
|
||||
private AttributeType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public static final AttributeType STRING = new AttributeType("STRING");
|
||||
|
||||
public static final AttributeType LONG = new AttributeType("LONG");
|
||||
|
||||
public static final AttributeType OBJECT = new AttributeType("OBJECT");
|
||||
|
||||
public static final AttributeType DOUBLE = new AttributeType("DOUBLE");
|
||||
|
||||
private static final AttributeType[] VALUES = { STRING, OBJECT, LONG, DOUBLE };
|
||||
|
||||
public static AttributeType getType(String typeAsString) {
|
||||
|
||||
for (int i = 0; i < VALUES.length; i++) {
|
||||
if (VALUES[i].toString().equals(typeAsString)) {
|
||||
return (AttributeType) VALUES[i];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public StepExecution getStepExecution(JobExecution jobExecution, Step step) {
|
||||
List executions = getJdbcTemplate().query(getQuery(GET_STEP_EXECUTION),
|
||||
new Object[] { step.getName(), jobExecution.getId() }, new StepExecutionRowMapper(jobExecution, step));
|
||||
|
||||
Assert.state(executions.size() <= 1,
|
||||
"There can be at most one step execution with given name for single job execution");
|
||||
if (executions.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
return (StepExecution) executions.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.apache.commons.lang.SerializationUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.batch.core.domain.BatchStatus;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.io.exception.InfrastructureException;
|
||||
import org.springframework.batch.item.ExecutionContext;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.dao.OptimisticLockingFailureException;
|
||||
import org.springframework.jdbc.core.PreparedStatementCallback;
|
||||
import org.springframework.jdbc.core.RowCallbackHandler;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback;
|
||||
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
|
||||
import org.springframework.jdbc.support.lob.DefaultLobHandler;
|
||||
import org.springframework.jdbc.support.lob.LobCreator;
|
||||
import org.springframework.jdbc.support.lob.LobHandler;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Jdbc implementation of {@link StepExecutionDao}.<br/>
|
||||
*
|
||||
* Allows customization of the tables names used by Spring Batch for step meta
|
||||
* data via a prefix property.<br/>
|
||||
*
|
||||
* Uses sequences or tables (via Spring's {@link DataFieldMaxValueIncrementer}
|
||||
* abstraction) to create all primary keys before inserting a new row. All
|
||||
* objects are checked to ensure all fields to be stored are not null. If any
|
||||
* are found to be null, an IllegalArgumentException will be thrown. This could
|
||||
* be left to JdbcTemplate, however, the exception will be fairly vague, and
|
||||
* fails to highlight which field caused the exception.<br/>
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
* @author Robert Kasanicky
|
||||
*
|
||||
* @see StepExecutionDao
|
||||
*/
|
||||
public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implements StepExecutionDao, InitializingBean {
|
||||
|
||||
private static final Log logger = LogFactory.getLog(JdbcStepExecutionDao.class);
|
||||
|
||||
private static final String FIND_STEP_EXECUTION_CONTEXT = "SELECT TYPE_CD, KEY_NAME, STRING_VAL, DOUBLE_VAL, LONG_VAL, OBJECT_VAL "
|
||||
+ "from %PREFIX%STEP_EXECUTION_CONTEXT where STEP_EXECUTION_ID = ?";
|
||||
|
||||
private static final String INSERT_STEP_EXECUTION_CONTEXT = "INSERT into %PREFIX%STEP_EXECUTION_CONTEXT(STEP_EXECUTION_ID, TYPE_CD,"
|
||||
+ " KEY_NAME, STRING_VAL, DOUBLE_VAL, LONG_VAL, OBJECT_VAL) values(?,?,?,?,?,?,?)";
|
||||
|
||||
private static final String SAVE_STEP_EXECUTION = "INSERT into %PREFIX%STEP_EXECUTION(STEP_EXECUTION_ID, VERSION, STEP_NAME, JOB_EXECUTION_ID, START_TIME, "
|
||||
+ "END_TIME, STATUS, COMMIT_COUNT, TASK_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE) "
|
||||
+ "values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
|
||||
private static final String UPDATE_STEP_EXECUTION_CONTEXT = "UPDATE %PREFIX%STEP_EXECUTION_CONTEXT set "
|
||||
+ "TYPE_CD = ?, STRING_VAL = ?, DOUBLE_VAL = ?, LONG_VAL = ?, OBJECT_VAL = ? where STEP_EXECUTION_ID = ? and KEY_NAME = ?";
|
||||
|
||||
private static final String UPDATE_STEP_EXECUTION = "UPDATE %PREFIX%STEP_EXECUTION set START_TIME = ?, END_TIME = ?, "
|
||||
+ "STATUS = ?, COMMIT_COUNT = ?, TASK_COUNT = ?, CONTINUABLE = ? , EXIT_CODE = ?, "
|
||||
+ "EXIT_MESSAGE = ?, VERSION = ? where STEP_EXECUTION_ID = ? and VERSION = ?";
|
||||
|
||||
private static final String GET_STEP_EXECUTION = "SELECT STEP_EXECUTION_ID, STEP_NAME, START_TIME, END_TIME, STATUS, COMMIT_COUNT,"
|
||||
+ " TASK_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%STEP_EXECUTION where STEP_NAME = ? and JOB_EXECUTION_ID = ?";
|
||||
|
||||
private static final String CURRENT_VERSION_STEP_EXECUTION = "SELECT VERSION FROM %PREFIX%STEP_EXECUTION WHERE STEP_EXECUTION_ID=?";
|
||||
|
||||
private static final int EXIT_MESSAGE_LENGTH = 250;
|
||||
|
||||
private LobHandler lobHandler = new DefaultLobHandler();
|
||||
|
||||
private DataFieldMaxValueIncrementer stepExecutionIncrementer;
|
||||
|
||||
public ExecutionContext findExecutionContext(final StepExecution stepExecution) {
|
||||
|
||||
final Long executionId = stepExecution.getId();
|
||||
Assert.notNull(executionId, "ExecutionId must not be null.");
|
||||
|
||||
final ExecutionContext executionContext = new ExecutionContext();
|
||||
|
||||
RowCallbackHandler callback = new RowCallbackHandler() {
|
||||
|
||||
public void processRow(ResultSet rs) throws SQLException {
|
||||
|
||||
String typeCd = rs.getString("TYPE_CD");
|
||||
AttributeType type = AttributeType.getType(typeCd);
|
||||
String key = rs.getString("KEY_NAME");
|
||||
if (type == AttributeType.STRING) {
|
||||
executionContext.putString(key, rs.getString("STRING_VAL"));
|
||||
}
|
||||
else if (type == AttributeType.LONG) {
|
||||
executionContext.putLong(key, rs.getLong("LONG_VAL"));
|
||||
}
|
||||
else if (type == AttributeType.DOUBLE) {
|
||||
executionContext.putDouble(key, rs.getDouble("DOUBLE_VAL"));
|
||||
}
|
||||
else if (type == AttributeType.OBJECT) {
|
||||
executionContext.put(key, rs.getObject("OBJECT_VAL"));
|
||||
}
|
||||
else {
|
||||
throw new InfrastructureException("Invalid type found: [" + typeCd + "] for execution id: ["
|
||||
+ executionId + "]");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
getJdbcTemplate().query(getQuery(FIND_STEP_EXECUTION_CONTEXT), new Object[] { executionId }, callback);
|
||||
|
||||
return executionContext;
|
||||
}
|
||||
|
||||
private void insertExecutionAttribute(final Long executionId, final String key, final Object value,
|
||||
final AttributeType type) {
|
||||
PreparedStatementCallback callback = new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
|
||||
|
||||
protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException,
|
||||
DataAccessException {
|
||||
|
||||
ps.setLong(1, executionId.longValue());
|
||||
ps.setString(3, key);
|
||||
if (type == AttributeType.STRING) {
|
||||
ps.setString(2, AttributeType.STRING.toString());
|
||||
ps.setString(4, value.toString());
|
||||
ps.setDouble(5, 0.0);
|
||||
ps.setLong(6, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 7, null);
|
||||
}
|
||||
else if (type == AttributeType.DOUBLE) {
|
||||
ps.setString(2, AttributeType.DOUBLE.toString());
|
||||
ps.setString(4, null);
|
||||
ps.setDouble(5, ((Double) value).doubleValue());
|
||||
ps.setLong(6, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 7, null);
|
||||
}
|
||||
else if (type == AttributeType.LONG) {
|
||||
ps.setString(2, AttributeType.LONG.toString());
|
||||
ps.setString(4, null);
|
||||
ps.setDouble(5, 0.0);
|
||||
ps.setLong(6, ((Long) value).longValue());
|
||||
lobCreator.setBlobAsBytes(ps, 7, null);
|
||||
}
|
||||
else {
|
||||
ps.setString(2, AttributeType.OBJECT.toString());
|
||||
ps.setString(4, null);
|
||||
ps.setDouble(5, 0.0);
|
||||
ps.setLong(6, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 7, SerializationUtils.serialize((Serializable) value));
|
||||
}
|
||||
}
|
||||
};
|
||||
getJdbcTemplate().execute(getQuery(INSERT_STEP_EXECUTION_CONTEXT), callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a StepExecution. A unique id will be generated by the
|
||||
* stepExecutionIncrementor, and then set in the StepExecution. All values
|
||||
* will then be stored via an INSERT statement.
|
||||
*
|
||||
* @see StepDao#saveStepExecution(StepExecution)
|
||||
*/
|
||||
public void saveStepExecution(StepExecution stepExecution) {
|
||||
|
||||
validateStepExecution(stepExecution);
|
||||
|
||||
stepExecution.setId(new Long(stepExecutionIncrementer.nextLongValue()));
|
||||
stepExecution.incrementVersion(); // should be 0 now
|
||||
Object[] parameters = new Object[] { stepExecution.getId(), stepExecution.getVersion(),
|
||||
stepExecution.getStepName(), stepExecution.getJobExecutionId(), stepExecution.getStartTime(),
|
||||
stepExecution.getEndTime(), stepExecution.getStatus().toString(), stepExecution.getCommitCount(),
|
||||
stepExecution.getTaskCount(), stepExecution.getExitStatus().isContinuable() ? "Y" : "N",
|
||||
stepExecution.getExitStatus().getExitCode(), stepExecution.getExitStatus().getExitDescription() };
|
||||
getJdbcTemplate().update(
|
||||
getQuery(SAVE_STEP_EXECUTION),
|
||||
parameters,
|
||||
new int[] { Types.INTEGER, Types.INTEGER, Types.VARCHAR, Types.INTEGER, Types.TIMESTAMP,
|
||||
Types.TIMESTAMP, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.CHAR, Types.VARCHAR,
|
||||
Types.VARCHAR });
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate StepExecution. At a minimum, JobId, StartTime, and Status cannot
|
||||
* be null. EndTime can be null for an unfinished job.
|
||||
*
|
||||
* @param jobExecution
|
||||
* @throws IllegalArgumentException
|
||||
*/
|
||||
private void validateStepExecution(StepExecution stepExecution) {
|
||||
Assert.notNull(stepExecution);
|
||||
Assert.notNull(stepExecution.getStepName(), "StepExecution step name cannot be null.");
|
||||
Assert.notNull(stepExecution.getStartTime(), "StepExecution start time cannot be null.");
|
||||
Assert.notNull(stepExecution.getStatus(), "StepExecution status cannot be null.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Save or update execution attributes. A lob creator must be used, since
|
||||
* any attributes that don't match a provided type must be serialized into a
|
||||
* blob.
|
||||
*
|
||||
* @see {@link LobCreator}
|
||||
*/
|
||||
public void saveOrUpdateExecutionContext(final StepExecution stepExecution) {
|
||||
|
||||
Long executionId = stepExecution.getId();
|
||||
ExecutionContext executionContext = stepExecution.getExecutionContext();
|
||||
Assert.notNull(executionId, "ExecutionId must not be null.");
|
||||
Assert.notNull(executionContext, "The ExecutionContext must not be null.");
|
||||
|
||||
for (Iterator it = executionContext.entrySet().iterator(); it.hasNext();) {
|
||||
Entry entry = (Entry) it.next();
|
||||
final String key = entry.getKey().toString();
|
||||
final Object value = entry.getValue();
|
||||
|
||||
if (value instanceof String) {
|
||||
updateExecutionAttribute(executionId, key, value, AttributeType.STRING);
|
||||
}
|
||||
else if (value instanceof Double) {
|
||||
updateExecutionAttribute(executionId, key, value, AttributeType.DOUBLE);
|
||||
}
|
||||
else if (value instanceof Long) {
|
||||
updateExecutionAttribute(executionId, key, value, AttributeType.LONG);
|
||||
}
|
||||
else {
|
||||
updateExecutionAttribute(executionId, key, value, AttributeType.OBJECT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateExecutionAttribute(final Long executionId, final String key, final Object value,
|
||||
final AttributeType type) {
|
||||
|
||||
PreparedStatementCallback callback = new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
|
||||
|
||||
protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException,
|
||||
DataAccessException {
|
||||
|
||||
ps.setLong(6, executionId.longValue());
|
||||
ps.setString(7, key);
|
||||
if (type == AttributeType.STRING) {
|
||||
ps.setString(1, AttributeType.STRING.toString());
|
||||
ps.setString(2, value.toString());
|
||||
ps.setDouble(3, 0.0);
|
||||
ps.setLong(4, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 5, null);
|
||||
}
|
||||
else if (type == AttributeType.DOUBLE) {
|
||||
ps.setString(1, AttributeType.DOUBLE.toString());
|
||||
ps.setString(2, null);
|
||||
ps.setDouble(3, ((Double) value).doubleValue());
|
||||
ps.setLong(4, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 5, null);
|
||||
}
|
||||
else if (type == AttributeType.LONG) {
|
||||
ps.setString(1, AttributeType.LONG.toString());
|
||||
ps.setString(2, null);
|
||||
ps.setDouble(3, 0.0);
|
||||
ps.setLong(4, ((Long) value).longValue());
|
||||
lobCreator.setBlobAsBytes(ps, 5, null);
|
||||
}
|
||||
else {
|
||||
ps.setString(1, AttributeType.OBJECT.toString());
|
||||
ps.setString(2, null);
|
||||
ps.setDouble(3, 0.0);
|
||||
ps.setLong(4, 0);
|
||||
lobCreator.setBlobAsBytes(ps, 5, SerializationUtils.serialize((Serializable) value));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// LobCreating callbacks always return the affect row count for SQL DML
|
||||
// statements, if less than 1 row
|
||||
// is affected, then this row is new and should be inserted.
|
||||
Integer affectedRows = (Integer) getJdbcTemplate().execute(getQuery(UPDATE_STEP_EXECUTION_CONTEXT), callback);
|
||||
if (affectedRows.intValue() < 1) {
|
||||
insertExecutionAttribute(executionId, key, value, type);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.batch.execution.repository.dao.StepExecutionDao#updateStepExecution(org.springframework.batch.core.domain.StepExecution)
|
||||
*/
|
||||
public void updateStepExecution(StepExecution stepExecution) {
|
||||
|
||||
validateStepExecution(stepExecution);
|
||||
Assert.notNull(stepExecution.getId(), "StepExecution Id cannot be null. StepExecution must saved"
|
||||
+ " before it can be updated.");
|
||||
|
||||
// Do not check for existence of step execution considering
|
||||
// it is saved at every commit point.
|
||||
|
||||
String exitDescription = stepExecution.getExitStatus().getExitDescription();
|
||||
if (exitDescription != null && exitDescription.length() > EXIT_MESSAGE_LENGTH) {
|
||||
exitDescription = exitDescription.substring(0, EXIT_MESSAGE_LENGTH);
|
||||
logger.debug("Truncating long message before update of StepExecution: " + stepExecution);
|
||||
}
|
||||
|
||||
// Attempt to prevent concurrent modification errors by blocking here if
|
||||
// someone is already trying to do it.
|
||||
synchronized (stepExecution) {
|
||||
|
||||
Integer version = new Integer(stepExecution.getVersion().intValue() + 1);
|
||||
Object[] parameters = new Object[] { stepExecution.getStartTime(), stepExecution.getEndTime(),
|
||||
stepExecution.getStatus().toString(), stepExecution.getCommitCount(), stepExecution.getTaskCount(),
|
||||
stepExecution.getExitStatus().isContinuable() ? "Y" : "N",
|
||||
stepExecution.getExitStatus().getExitCode(), exitDescription, version, stepExecution.getId(),
|
||||
stepExecution.getVersion() };
|
||||
int count = getJdbcTemplate().update(
|
||||
getQuery(UPDATE_STEP_EXECUTION),
|
||||
parameters,
|
||||
new int[] { Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.INTEGER, Types.INTEGER,
|
||||
Types.CHAR, Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.INTEGER });
|
||||
|
||||
// Avoid concurrent modifications...
|
||||
if (count == 0) {
|
||||
int curentVersion = getJdbcTemplate().queryForInt(
|
||||
getQuery(CURRENT_VERSION_STEP_EXECUTION),
|
||||
new Object[] { stepExecution.getId() });
|
||||
throw new OptimisticLockingFailureException("Attempt to update step execution id="
|
||||
+ stepExecution.getId() + " with wrong version (" + stepExecution.getVersion() + "), where current version is "+curentVersion);
|
||||
}
|
||||
|
||||
stepExecution.incrementVersion();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private class StepExecutionRowMapper implements RowMapper {
|
||||
|
||||
private final JobExecution jobExecution;
|
||||
|
||||
private final Step step;
|
||||
|
||||
public StepExecutionRowMapper(JobExecution jobExecution, Step step) {
|
||||
this.jobExecution = jobExecution;
|
||||
this.step = step;
|
||||
}
|
||||
|
||||
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
|
||||
StepExecution stepExecution = new StepExecution(step, jobExecution, new Long(rs.getLong(1)));
|
||||
stepExecution.setStartTime(rs.getTimestamp(3));
|
||||
stepExecution.setEndTime(rs.getTimestamp(4));
|
||||
stepExecution.setStatus(BatchStatus.getStatus(rs.getString(5)));
|
||||
stepExecution.setCommitCount(rs.getInt(6));
|
||||
stepExecution.setTaskCount(rs.getInt(7));
|
||||
stepExecution.setExitStatus(new ExitStatus("Y".equals(rs.getString(8)), rs.getString(9), rs.getString(10)));
|
||||
stepExecution.setExecutionContext(findExecutionContext(stepExecution));
|
||||
return stepExecution;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setLobHandler(LobHandler lobHandler) {
|
||||
this.lobHandler = lobHandler;
|
||||
}
|
||||
|
||||
public void setStepExecutionIncrementer(DataFieldMaxValueIncrementer stepExecutionIncrementer) {
|
||||
this.stepExecutionIncrementer = stepExecutionIncrementer;
|
||||
}
|
||||
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
Assert.notNull(stepExecutionIncrementer, "StepExecutionIncrementer cannot be null.");
|
||||
}
|
||||
|
||||
public static class AttributeType {
|
||||
|
||||
private final String type;
|
||||
|
||||
private AttributeType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public static final AttributeType STRING = new AttributeType("STRING");
|
||||
|
||||
public static final AttributeType LONG = new AttributeType("LONG");
|
||||
|
||||
public static final AttributeType OBJECT = new AttributeType("OBJECT");
|
||||
|
||||
public static final AttributeType DOUBLE = new AttributeType("DOUBLE");
|
||||
|
||||
private static final AttributeType[] VALUES = { STRING, OBJECT, LONG, DOUBLE };
|
||||
|
||||
public static AttributeType getType(String typeAsString) {
|
||||
|
||||
for (int i = 0; i < VALUES.length; i++) {
|
||||
if (VALUES[i].toString().equals(typeAsString)) {
|
||||
return (AttributeType) VALUES[i];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public StepExecution getStepExecution(JobExecution jobExecution, Step step) {
|
||||
List executions = getJdbcTemplate().query(getQuery(GET_STEP_EXECUTION),
|
||||
new Object[] { step.getName(), jobExecution.getId() }, new StepExecutionRowMapper(jobExecution, step));
|
||||
|
||||
Assert.state(executions.size() <= 1,
|
||||
"There can be at most one step execution with given name for single job execution");
|
||||
if (executions.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
return (StepExecution) executions.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,55 +1,55 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
|
||||
/**
|
||||
* Data Access Object for job executions.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Robert Kasanicky
|
||||
*/
|
||||
public interface JobExecutionDao {
|
||||
|
||||
/**
|
||||
* Save a new JobExecution.
|
||||
*
|
||||
* Preconditions: jobInstance the jobExecution belongs to must have a jobInstanceId.
|
||||
*
|
||||
* @param jobExecution
|
||||
*/
|
||||
void saveJobExecution(JobExecution jobExecution);
|
||||
|
||||
/**
|
||||
* Update and existing JobExecution.
|
||||
*
|
||||
* Preconditions: jobExecution must have an Id (which can be obtained by the
|
||||
* save method) and a jobInstanceId.
|
||||
*
|
||||
* @param jobExecution
|
||||
*/
|
||||
void updateJobExecution(JobExecution jobExecution);
|
||||
|
||||
/**
|
||||
* Return the number of JobExecutions for the given JobInstance
|
||||
*
|
||||
* Preconditions: jobInstance must have an id.
|
||||
*/
|
||||
int getJobExecutionCount(JobInstance jobInstance);
|
||||
|
||||
/**
|
||||
* Return list of JobExecutions for given JobInstance.
|
||||
*
|
||||
* @param jobInstance
|
||||
* @return list of jobExecutions.
|
||||
*/
|
||||
List findJobExecutions(JobInstance jobInstance);
|
||||
|
||||
/**
|
||||
* @return last JobExecution for given JobInstance.
|
||||
*/
|
||||
JobExecution getLastJobExecution(JobInstance jobInstance);
|
||||
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
|
||||
/**
|
||||
* Data Access Object for job executions.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Robert Kasanicky
|
||||
*/
|
||||
public interface JobExecutionDao {
|
||||
|
||||
/**
|
||||
* Save a new JobExecution.
|
||||
*
|
||||
* Preconditions: jobInstance the jobExecution belongs to must have a jobInstanceId.
|
||||
*
|
||||
* @param jobExecution
|
||||
*/
|
||||
void saveJobExecution(JobExecution jobExecution);
|
||||
|
||||
/**
|
||||
* Update and existing JobExecution.
|
||||
*
|
||||
* Preconditions: jobExecution must have an Id (which can be obtained by the
|
||||
* save method) and a jobInstanceId.
|
||||
*
|
||||
* @param jobExecution
|
||||
*/
|
||||
void updateJobExecution(JobExecution jobExecution);
|
||||
|
||||
/**
|
||||
* Return the number of JobExecutions for the given JobInstance
|
||||
*
|
||||
* Preconditions: jobInstance must have an id.
|
||||
*/
|
||||
int getJobExecutionCount(JobInstance jobInstance);
|
||||
|
||||
/**
|
||||
* Return list of JobExecutions for given JobInstance.
|
||||
*
|
||||
* @param jobInstance
|
||||
* @return list of jobExecutions.
|
||||
*/
|
||||
List findJobExecutions(JobInstance jobInstance);
|
||||
|
||||
/**
|
||||
* @return last JobExecution for given JobInstance.
|
||||
*/
|
||||
JobExecution getLastJobExecution(JobInstance jobInstance);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,42 +1,42 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
|
||||
/**
|
||||
* Data Access Object for job instances.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Robert Kasanicky
|
||||
*
|
||||
*/
|
||||
public interface JobInstanceDao {
|
||||
|
||||
/**
|
||||
* Create a JobInstance with given name and parameters.
|
||||
*
|
||||
* PreConditions: JobInstance for given name and parameters must not already exist
|
||||
*
|
||||
* PostConditions: A valid job instancewill be returned which has been persisted and
|
||||
* contains an unique Id.
|
||||
*
|
||||
* @param jobName
|
||||
* @param jobParameters
|
||||
* @return JobInstance
|
||||
*/
|
||||
JobInstance createJobInstance(Job job, JobParameters jobParameters);
|
||||
|
||||
/**
|
||||
* Find all job instances that match the given name and parameters. If no
|
||||
* matching job instances are found, then a list of size 0 will be
|
||||
* returned.
|
||||
*
|
||||
* @param jobName
|
||||
* @param jobParameters
|
||||
* @return List of {@link JobInstance} objects matching
|
||||
* {@link JobIdentifier}
|
||||
*/
|
||||
JobInstance getJobInstance(Job job, JobParameters jobParameters);
|
||||
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
|
||||
/**
|
||||
* Data Access Object for job instances.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Robert Kasanicky
|
||||
*
|
||||
*/
|
||||
public interface JobInstanceDao {
|
||||
|
||||
/**
|
||||
* Create a JobInstance with given name and parameters.
|
||||
*
|
||||
* PreConditions: JobInstance for given name and parameters must not already exist
|
||||
*
|
||||
* PostConditions: A valid job instancewill be returned which has been persisted and
|
||||
* contains an unique Id.
|
||||
*
|
||||
* @param jobName
|
||||
* @param jobParameters
|
||||
* @return JobInstance
|
||||
*/
|
||||
JobInstance createJobInstance(Job job, JobParameters jobParameters);
|
||||
|
||||
/**
|
||||
* Find all job instances that match the given name and parameters. If no
|
||||
* matching job instances are found, then a list of size 0 will be
|
||||
* returned.
|
||||
*
|
||||
* @param jobName
|
||||
* @param jobParameters
|
||||
* @return List of {@link JobInstance} objects matching
|
||||
* {@link JobIdentifier}
|
||||
*/
|
||||
JobInstance getJobInstance(Job job, JobParameters jobParameters);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,76 +1,76 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
|
||||
|
||||
/**
|
||||
* In-memory implementation of {@link JobExecutionDao}.
|
||||
*
|
||||
*/
|
||||
public class MapJobExecutionDao implements JobExecutionDao {
|
||||
|
||||
private static Map executionsByJobInstanceId = TransactionAwareProxyFactory.createTransactionalMap();
|
||||
|
||||
private static long currentId;
|
||||
|
||||
public static void clear() {
|
||||
executionsByJobInstanceId.clear();
|
||||
}
|
||||
|
||||
public int getJobExecutionCount(JobInstance jobInstance) {
|
||||
Set executions = (Set) executionsByJobInstanceId.get(jobInstance.getId());
|
||||
if (executions == null) {
|
||||
return 0;
|
||||
}
|
||||
return executions.size();
|
||||
}
|
||||
|
||||
public void saveJobExecution(JobExecution jobExecution) {
|
||||
Set executions = (Set) executionsByJobInstanceId.get(jobExecution.getJobId());
|
||||
if (executions == null) {
|
||||
executions = TransactionAwareProxyFactory.createTransactionalSet();
|
||||
executionsByJobInstanceId.put(jobExecution.getJobId(), executions);
|
||||
}
|
||||
executions.add(jobExecution);
|
||||
jobExecution.setId(new Long(currentId++));
|
||||
}
|
||||
|
||||
public List findJobExecutions(JobInstance jobInstance) {
|
||||
Set executions = (Set) executionsByJobInstanceId.get(jobInstance.getId());
|
||||
if (executions == null) {
|
||||
return new ArrayList();
|
||||
}
|
||||
else {
|
||||
return new ArrayList(executions);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateJobExecution(JobExecution jobExecution) {
|
||||
// no-op
|
||||
}
|
||||
|
||||
public JobExecution getLastJobExecution(JobInstance jobInstance) {
|
||||
Set executions = (Set) executionsByJobInstanceId.get(jobInstance.getId());
|
||||
if (executions == null) {
|
||||
return null;
|
||||
}
|
||||
JobExecution lastExec = null;
|
||||
for (Iterator iterator = executions.iterator(); iterator.hasNext();) {
|
||||
JobExecution exec = (JobExecution) iterator.next();
|
||||
if (lastExec == null) {
|
||||
lastExec = exec;
|
||||
}
|
||||
if (lastExec.getStartTime().getTime() < exec.getStartTime().getTime()) {
|
||||
lastExec = exec;
|
||||
}
|
||||
}
|
||||
return lastExec;
|
||||
}
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
|
||||
|
||||
/**
|
||||
* In-memory implementation of {@link JobExecutionDao}.
|
||||
*
|
||||
*/
|
||||
public class MapJobExecutionDao implements JobExecutionDao {
|
||||
|
||||
private static Map executionsByJobInstanceId = TransactionAwareProxyFactory.createTransactionalMap();
|
||||
|
||||
private static long currentId;
|
||||
|
||||
public static void clear() {
|
||||
executionsByJobInstanceId.clear();
|
||||
}
|
||||
|
||||
public int getJobExecutionCount(JobInstance jobInstance) {
|
||||
Set executions = (Set) executionsByJobInstanceId.get(jobInstance.getId());
|
||||
if (executions == null) {
|
||||
return 0;
|
||||
}
|
||||
return executions.size();
|
||||
}
|
||||
|
||||
public void saveJobExecution(JobExecution jobExecution) {
|
||||
Set executions = (Set) executionsByJobInstanceId.get(jobExecution.getJobId());
|
||||
if (executions == null) {
|
||||
executions = TransactionAwareProxyFactory.createTransactionalSet();
|
||||
executionsByJobInstanceId.put(jobExecution.getJobId(), executions);
|
||||
}
|
||||
executions.add(jobExecution);
|
||||
jobExecution.setId(new Long(currentId++));
|
||||
}
|
||||
|
||||
public List findJobExecutions(JobInstance jobInstance) {
|
||||
Set executions = (Set) executionsByJobInstanceId.get(jobInstance.getId());
|
||||
if (executions == null) {
|
||||
return new ArrayList();
|
||||
}
|
||||
else {
|
||||
return new ArrayList(executions);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateJobExecution(JobExecution jobExecution) {
|
||||
// no-op
|
||||
}
|
||||
|
||||
public JobExecution getLastJobExecution(JobInstance jobInstance) {
|
||||
Set executions = (Set) executionsByJobInstanceId.get(jobInstance.getId());
|
||||
if (executions == null) {
|
||||
return null;
|
||||
}
|
||||
JobExecution lastExec = null;
|
||||
for (Iterator iterator = executions.iterator(); iterator.hasNext();) {
|
||||
JobExecution exec = (JobExecution) iterator.next();
|
||||
if (lastExec == null) {
|
||||
lastExec = exec;
|
||||
}
|
||||
if (lastExec.getStartTime().getTime() < exec.getStartTime().getTime()) {
|
||||
lastExec = exec;
|
||||
}
|
||||
}
|
||||
return lastExec;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
public class MapJobInstanceDao implements JobInstanceDao {
|
||||
|
||||
private static Collection jobInstances = TransactionAwareProxyFactory.createTransactionalList();
|
||||
|
||||
private long currentId = 0;
|
||||
|
||||
public static void clear() {
|
||||
jobInstances.clear();
|
||||
}
|
||||
|
||||
public JobInstance createJobInstance(Job job, JobParameters jobParameters) {
|
||||
|
||||
Assert.state(getJobInstance(job, jobParameters) == null, "JobInstance must not already exist");
|
||||
|
||||
JobInstance jobInstance = new JobInstance(new Long(currentId++), jobParameters, job);
|
||||
jobInstances.add(jobInstance);
|
||||
|
||||
return jobInstance;
|
||||
}
|
||||
|
||||
public JobInstance getJobInstance(Job job, JobParameters jobParameters) {
|
||||
|
||||
for (Iterator iterator = jobInstances.iterator(); iterator.hasNext();) {
|
||||
JobInstance instance = (JobInstance) iterator.next();
|
||||
if (instance.getJobName().equals(job.getName()) && instance.getJobParameters().equals(jobParameters)) {
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
public class MapJobInstanceDao implements JobInstanceDao {
|
||||
|
||||
private static Collection jobInstances = TransactionAwareProxyFactory.createTransactionalList();
|
||||
|
||||
private long currentId = 0;
|
||||
|
||||
public static void clear() {
|
||||
jobInstances.clear();
|
||||
}
|
||||
|
||||
public JobInstance createJobInstance(Job job, JobParameters jobParameters) {
|
||||
|
||||
Assert.state(getJobInstance(job, jobParameters) == null, "JobInstance must not already exist");
|
||||
|
||||
JobInstance jobInstance = new JobInstance(new Long(currentId++), jobParameters, job);
|
||||
jobInstances.add(jobInstance);
|
||||
|
||||
return jobInstance;
|
||||
}
|
||||
|
||||
public JobInstance getJobInstance(Job job, JobParameters jobParameters) {
|
||||
|
||||
for (Iterator iterator = jobInstances.iterator(); iterator.hasNext();) {
|
||||
JobInstance instance = (JobInstance) iterator.next();
|
||||
if (instance.getJobName().equals(job.getName()) && instance.getJobParameters().equals(jobParameters)) {
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,48 +1,48 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.item.ExecutionContext;
|
||||
|
||||
public interface StepExecutionDao {
|
||||
|
||||
/**
|
||||
* Save the given StepExecution.
|
||||
*
|
||||
* Preconditions: Id must be null.
|
||||
*
|
||||
* Postconditions: Id will be set to a unique Long.
|
||||
*
|
||||
* @param stepExecution
|
||||
*/
|
||||
void saveStepExecution(StepExecution stepExecution);
|
||||
|
||||
/**
|
||||
* Update the given StepExecution
|
||||
*
|
||||
* Preconditions: Id must not be null.
|
||||
*
|
||||
* @param stepExecution
|
||||
*/
|
||||
void updateStepExecution(StepExecution stepExecution);
|
||||
|
||||
/**
|
||||
* Find all {@link ExecutionContext} for the given {@link StepExecution}.
|
||||
*
|
||||
* @throws IllegalArgumentException if the id is null.
|
||||
*/
|
||||
ExecutionContext findExecutionContext(StepExecution stepExecution);
|
||||
|
||||
/**
|
||||
* Save the {@link ExecutionContext} of the given {@link StepExecution}.
|
||||
*
|
||||
* @param stepExecution the {@link StepExecution} containing the
|
||||
* {@link ExecutionContext} to be saved.
|
||||
* @throws IllegalArgumentException if the attributes are null.
|
||||
*/
|
||||
void saveOrUpdateExecutionContext(StepExecution stepExecution);
|
||||
|
||||
StepExecution getStepExecution(JobExecution jobExecution, Step step);
|
||||
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.item.ExecutionContext;
|
||||
|
||||
public interface StepExecutionDao {
|
||||
|
||||
/**
|
||||
* Save the given StepExecution.
|
||||
*
|
||||
* Preconditions: Id must be null.
|
||||
*
|
||||
* Postconditions: Id will be set to a unique Long.
|
||||
*
|
||||
* @param stepExecution
|
||||
*/
|
||||
void saveStepExecution(StepExecution stepExecution);
|
||||
|
||||
/**
|
||||
* Update the given StepExecution
|
||||
*
|
||||
* Preconditions: Id must not be null.
|
||||
*
|
||||
* @param stepExecution
|
||||
*/
|
||||
void updateStepExecution(StepExecution stepExecution);
|
||||
|
||||
/**
|
||||
* Find all {@link ExecutionContext} for the given {@link StepExecution}.
|
||||
*
|
||||
* @throws IllegalArgumentException if the id is null.
|
||||
*/
|
||||
ExecutionContext findExecutionContext(StepExecution stepExecution);
|
||||
|
||||
/**
|
||||
* Save the {@link ExecutionContext} of the given {@link StepExecution}.
|
||||
*
|
||||
* @param stepExecution the {@link StepExecution} containing the
|
||||
* {@link ExecutionContext} to be saved.
|
||||
* @throws IllegalArgumentException if the attributes are null.
|
||||
*/
|
||||
void saveOrUpdateExecutionContext(StepExecution stepExecution);
|
||||
|
||||
StepExecution getStepExecution(JobExecution jobExecution, Step step);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,94 +1,94 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step;
|
||||
|
||||
import org.springframework.batch.core.domain.JobInterruptedException;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.io.exception.InfrastructureException;
|
||||
|
||||
/**
|
||||
* A {@link Step} implementation that provides common behaviour to subclasses.
|
||||
*
|
||||
* @author Dave Syer
|
||||
* @author Ben Hale
|
||||
*/
|
||||
public abstract class AbstractStep implements Step {
|
||||
|
||||
protected String name;
|
||||
|
||||
protected int startLimit = Integer.MAX_VALUE;
|
||||
|
||||
protected boolean allowStartIfComplete;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public AbstractStep() {
|
||||
super();
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name property. Always overrides the default value if this object
|
||||
* is a Spring bean.
|
||||
*
|
||||
* @see #setBeanName(java.lang.String)
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getStartLimit() {
|
||||
return this.startLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the startLimit.
|
||||
*
|
||||
* @param startLimit the startLimit to set
|
||||
*/
|
||||
public void setStartLimit(int startLimit) {
|
||||
this.startLimit = startLimit;
|
||||
}
|
||||
|
||||
public boolean isAllowStartIfComplete() {
|
||||
return this.allowStartIfComplete;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the shouldAllowStartIfComplete.
|
||||
*
|
||||
* @param allowStartIfComplete the shouldAllowStartIfComplete to set
|
||||
*/
|
||||
public void setAllowStartIfComplete(boolean allowStartIfComplete) {
|
||||
this.allowStartIfComplete = allowStartIfComplete;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenient constructor for setting only the name property.
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public AbstractStep(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public abstract void execute(StepExecution stepExecution) throws JobInterruptedException, InfrastructureException;
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step;
|
||||
|
||||
import org.springframework.batch.core.domain.JobInterruptedException;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.io.exception.InfrastructureException;
|
||||
|
||||
/**
|
||||
* A {@link Step} implementation that provides common behaviour to subclasses.
|
||||
*
|
||||
* @author Dave Syer
|
||||
* @author Ben Hale
|
||||
*/
|
||||
public abstract class AbstractStep implements Step {
|
||||
|
||||
protected String name;
|
||||
|
||||
protected int startLimit = Integer.MAX_VALUE;
|
||||
|
||||
protected boolean allowStartIfComplete;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public AbstractStep() {
|
||||
super();
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name property. Always overrides the default value if this object
|
||||
* is a Spring bean.
|
||||
*
|
||||
* @see #setBeanName(java.lang.String)
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getStartLimit() {
|
||||
return this.startLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the startLimit.
|
||||
*
|
||||
* @param startLimit the startLimit to set
|
||||
*/
|
||||
public void setStartLimit(int startLimit) {
|
||||
this.startLimit = startLimit;
|
||||
}
|
||||
|
||||
public boolean isAllowStartIfComplete() {
|
||||
return this.allowStartIfComplete;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the shouldAllowStartIfComplete.
|
||||
*
|
||||
* @param allowStartIfComplete the shouldAllowStartIfComplete to set
|
||||
*/
|
||||
public void setAllowStartIfComplete(boolean allowStartIfComplete) {
|
||||
this.allowStartIfComplete = allowStartIfComplete;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenient constructor for setting only the name property.
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public AbstractStep(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public abstract void execute(StepExecution stepExecution) throws JobInterruptedException, InfrastructureException;
|
||||
}
|
||||
@@ -1,78 +1,78 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step;
|
||||
|
||||
import org.springframework.batch.core.domain.StepContribution;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.item.exception.ClearFailedException;
|
||||
import org.springframework.batch.item.exception.FlushFailedException;
|
||||
import org.springframework.batch.item.exception.MarkFailedException;
|
||||
import org.springframework.batch.item.exception.ResetFailedException;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* Strategy for processing a single item in an item-oriented step. Extends
|
||||
* {@link ItemReader} and {@link ItemWriter} because part of the contract of the
|
||||
* processor is that it should delegate calls to those interfaces.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface ItemHandler {
|
||||
|
||||
/**
|
||||
* Given the current context in the form of a step contribution, do whatever
|
||||
* is necessary to process this unit inside a chunk. Implementations obtain
|
||||
* the item and return {@link ExitStatus#FINISHED} if it is null. If it is
|
||||
* not null process the item and return {@link ExitStatus#CONTINUABLE}. On
|
||||
* failure throws an exception.
|
||||
*
|
||||
* @param contribution the current step context
|
||||
* @return an {@link ExitStatus} indicating whether processing is
|
||||
* continuable.
|
||||
*/
|
||||
ExitStatus handle(StepContribution contribution) throws Exception;
|
||||
|
||||
/**
|
||||
* Implementations should delegate to an {@link ItemReader}.
|
||||
*
|
||||
* @see org.springframework.batch.item.ItemReader#mark()
|
||||
*/
|
||||
void mark() throws MarkFailedException;
|
||||
|
||||
/**
|
||||
* Implementations should delegate to an {@link ItemReader}.
|
||||
*
|
||||
* @see org.springframework.batch.item.ItemReader#reset()
|
||||
*/
|
||||
void reset() throws ResetFailedException;
|
||||
|
||||
/**
|
||||
* Implementations should delegate to an {@link ItemWriter}.
|
||||
*
|
||||
* @see org.springframework.batch.item.ItemWriter#flush()
|
||||
*/
|
||||
public void flush() throws FlushFailedException;
|
||||
|
||||
/**
|
||||
* Implementations should delegate to an {@link ItemWriter}.
|
||||
*
|
||||
* @see org.springframework.batch.item.ItemWriter#clear()
|
||||
*/
|
||||
public void clear() throws ClearFailedException;
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step;
|
||||
|
||||
import org.springframework.batch.core.domain.StepContribution;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.item.exception.ClearFailedException;
|
||||
import org.springframework.batch.item.exception.FlushFailedException;
|
||||
import org.springframework.batch.item.exception.MarkFailedException;
|
||||
import org.springframework.batch.item.exception.ResetFailedException;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* Strategy for processing a single item in an item-oriented step. Extends
|
||||
* {@link ItemReader} and {@link ItemWriter} because part of the contract of the
|
||||
* processor is that it should delegate calls to those interfaces.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public interface ItemHandler {
|
||||
|
||||
/**
|
||||
* Given the current context in the form of a step contribution, do whatever
|
||||
* is necessary to process this unit inside a chunk. Implementations obtain
|
||||
* the item and return {@link ExitStatus#FINISHED} if it is null. If it is
|
||||
* not null process the item and return {@link ExitStatus#CONTINUABLE}. On
|
||||
* failure throws an exception.
|
||||
*
|
||||
* @param contribution the current step context
|
||||
* @return an {@link ExitStatus} indicating whether processing is
|
||||
* continuable.
|
||||
*/
|
||||
ExitStatus handle(StepContribution contribution) throws Exception;
|
||||
|
||||
/**
|
||||
* Implementations should delegate to an {@link ItemReader}.
|
||||
*
|
||||
* @see org.springframework.batch.item.ItemReader#mark()
|
||||
*/
|
||||
void mark() throws MarkFailedException;
|
||||
|
||||
/**
|
||||
* Implementations should delegate to an {@link ItemReader}.
|
||||
*
|
||||
* @see org.springframework.batch.item.ItemReader#reset()
|
||||
*/
|
||||
void reset() throws ResetFailedException;
|
||||
|
||||
/**
|
||||
* Implementations should delegate to an {@link ItemWriter}.
|
||||
*
|
||||
* @see org.springframework.batch.item.ItemWriter#flush()
|
||||
*/
|
||||
public void flush() throws FlushFailedException;
|
||||
|
||||
/**
|
||||
* Implementations should delegate to an {@link ItemWriter}.
|
||||
*
|
||||
* @see org.springframework.batch.item.ItemWriter#clear()
|
||||
*/
|
||||
public void clear() throws ClearFailedException;
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,198 +1,198 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.repository.JobRepository;
|
||||
import org.springframework.batch.execution.step.ItemOrientedStep;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.beans.factory.BeanNameAware;
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Base class for factory beans for {@link ItemOrientedStep}. Ensures that all
|
||||
* the mandatory properties are set, and provides basic support for the
|
||||
* {@link Step} interface responsibilities like start limit.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public abstract class AbstractStepFactoryBean implements FactoryBean, BeanNameAware {
|
||||
|
||||
private String name;
|
||||
|
||||
private int startLimit = Integer.MAX_VALUE;
|
||||
|
||||
private boolean allowStartIfComplete;
|
||||
|
||||
private ItemReader itemReader;
|
||||
|
||||
private ItemWriter itemWriter;
|
||||
|
||||
private PlatformTransactionManager transactionManager;
|
||||
|
||||
private JobRepository jobRepository;
|
||||
|
||||
private boolean singleton = true;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public AbstractStepFactoryBean() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the bean name property, which will become the name of the
|
||||
* {@link Step} when it is created.
|
||||
*
|
||||
* @see org.springframework.beans.factory.BeanNameAware#setBeanName(java.lang.String)
|
||||
*/
|
||||
public void setBeanName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public getter for the String.
|
||||
* @return the name
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the startLimit.
|
||||
*
|
||||
* @param startLimit the startLimit to set
|
||||
*/
|
||||
public void setStartLimit(int startLimit) {
|
||||
this.startLimit = startLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the shouldAllowStartIfComplete.
|
||||
*
|
||||
* @param allowStartIfComplete the shouldAllowStartIfComplete to set
|
||||
*/
|
||||
public void setAllowStartIfComplete(boolean allowStartIfComplete) {
|
||||
this.allowStartIfComplete = allowStartIfComplete;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param itemReader the itemReader to set
|
||||
*/
|
||||
public void setItemReader(ItemReader itemReader) {
|
||||
this.itemReader = itemReader;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param itemWriter the itemWriter to set
|
||||
*/
|
||||
public void setItemWriter(ItemWriter itemWriter) {
|
||||
this.itemWriter = itemWriter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Protected getter for the {@link ItemReader} for subclasses to use.
|
||||
* @return the itemReader
|
||||
*/
|
||||
protected ItemReader getItemReader() {
|
||||
return itemReader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Protected getter for the {@link ItemWriter} for subclasses to use
|
||||
* @return the itemWriter
|
||||
*/
|
||||
protected ItemWriter getItemWriter() {
|
||||
return itemWriter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for {@link JobRepository}.
|
||||
*
|
||||
* @param jobRepository is a mandatory dependence (no default).
|
||||
*/
|
||||
public void setJobRepository(JobRepository jobRepository) {
|
||||
this.jobRepository = jobRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the {@link PlatformTransactionManager}.
|
||||
*
|
||||
* @param transactionManager the transaction manager to set
|
||||
*/
|
||||
public void setTransactionManager(PlatformTransactionManager transactionManager) {
|
||||
this.transactionManager = transactionManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a {@link Step} from the configuration provided.
|
||||
*
|
||||
* @see org.springframework.beans.factory.FactoryBean#getObject()
|
||||
*/
|
||||
public final Object getObject() throws Exception {
|
||||
ItemOrientedStep step = new ItemOrientedStep(getName());
|
||||
applyConfiguration(step);
|
||||
return step;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param step
|
||||
*
|
||||
*/
|
||||
protected void applyConfiguration(ItemOrientedStep step) {
|
||||
|
||||
Assert.notNull(getItemReader(), "ItemReader must be provided");
|
||||
Assert.notNull(getItemWriter(), "ItemWriter must be provided");
|
||||
Assert.notNull(jobRepository, "JobRepository must be provided");
|
||||
Assert.notNull(transactionManager, "TransactionManager must be provided");
|
||||
|
||||
step.setItemHandler(new SimpleItemHandler(itemReader, itemWriter));
|
||||
step.setTransactionManager(transactionManager);
|
||||
step.setJobRepository(jobRepository);
|
||||
step.setStartLimit(startLimit);
|
||||
step.setAllowStartIfComplete(allowStartIfComplete);
|
||||
|
||||
}
|
||||
|
||||
public Class getObjectType() {
|
||||
return Step.class;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true by default, but in most cases a {@link Step} should not be
|
||||
* treated as thread safe. Clients are recommended to create a new step for
|
||||
* each job execution.
|
||||
*
|
||||
* @see org.springframework.beans.factory.FactoryBean#isSingleton()
|
||||
*/
|
||||
public boolean isSingleton() {
|
||||
return this.singleton;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the singleton flag.
|
||||
* @param singleton the value to set. Defaults to true.
|
||||
*/
|
||||
public void setSingleton(boolean singleton) {
|
||||
this.singleton = singleton;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.repository.JobRepository;
|
||||
import org.springframework.batch.execution.step.ItemOrientedStep;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.beans.factory.BeanNameAware;
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Base class for factory beans for {@link ItemOrientedStep}. Ensures that all
|
||||
* the mandatory properties are set, and provides basic support for the
|
||||
* {@link Step} interface responsibilities like start limit.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public abstract class AbstractStepFactoryBean implements FactoryBean, BeanNameAware {
|
||||
|
||||
private String name;
|
||||
|
||||
private int startLimit = Integer.MAX_VALUE;
|
||||
|
||||
private boolean allowStartIfComplete;
|
||||
|
||||
private ItemReader itemReader;
|
||||
|
||||
private ItemWriter itemWriter;
|
||||
|
||||
private PlatformTransactionManager transactionManager;
|
||||
|
||||
private JobRepository jobRepository;
|
||||
|
||||
private boolean singleton = true;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public AbstractStepFactoryBean() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the bean name property, which will become the name of the
|
||||
* {@link Step} when it is created.
|
||||
*
|
||||
* @see org.springframework.beans.factory.BeanNameAware#setBeanName(java.lang.String)
|
||||
*/
|
||||
public void setBeanName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public getter for the String.
|
||||
* @return the name
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the startLimit.
|
||||
*
|
||||
* @param startLimit the startLimit to set
|
||||
*/
|
||||
public void setStartLimit(int startLimit) {
|
||||
this.startLimit = startLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the shouldAllowStartIfComplete.
|
||||
*
|
||||
* @param allowStartIfComplete the shouldAllowStartIfComplete to set
|
||||
*/
|
||||
public void setAllowStartIfComplete(boolean allowStartIfComplete) {
|
||||
this.allowStartIfComplete = allowStartIfComplete;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param itemReader the itemReader to set
|
||||
*/
|
||||
public void setItemReader(ItemReader itemReader) {
|
||||
this.itemReader = itemReader;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param itemWriter the itemWriter to set
|
||||
*/
|
||||
public void setItemWriter(ItemWriter itemWriter) {
|
||||
this.itemWriter = itemWriter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Protected getter for the {@link ItemReader} for subclasses to use.
|
||||
* @return the itemReader
|
||||
*/
|
||||
protected ItemReader getItemReader() {
|
||||
return itemReader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Protected getter for the {@link ItemWriter} for subclasses to use
|
||||
* @return the itemWriter
|
||||
*/
|
||||
protected ItemWriter getItemWriter() {
|
||||
return itemWriter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for {@link JobRepository}.
|
||||
*
|
||||
* @param jobRepository is a mandatory dependence (no default).
|
||||
*/
|
||||
public void setJobRepository(JobRepository jobRepository) {
|
||||
this.jobRepository = jobRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the {@link PlatformTransactionManager}.
|
||||
*
|
||||
* @param transactionManager the transaction manager to set
|
||||
*/
|
||||
public void setTransactionManager(PlatformTransactionManager transactionManager) {
|
||||
this.transactionManager = transactionManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a {@link Step} from the configuration provided.
|
||||
*
|
||||
* @see org.springframework.beans.factory.FactoryBean#getObject()
|
||||
*/
|
||||
public final Object getObject() throws Exception {
|
||||
ItemOrientedStep step = new ItemOrientedStep(getName());
|
||||
applyConfiguration(step);
|
||||
return step;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param step
|
||||
*
|
||||
*/
|
||||
protected void applyConfiguration(ItemOrientedStep step) {
|
||||
|
||||
Assert.notNull(getItemReader(), "ItemReader must be provided");
|
||||
Assert.notNull(getItemWriter(), "ItemWriter must be provided");
|
||||
Assert.notNull(jobRepository, "JobRepository must be provided");
|
||||
Assert.notNull(transactionManager, "TransactionManager must be provided");
|
||||
|
||||
step.setItemHandler(new SimpleItemHandler(itemReader, itemWriter));
|
||||
step.setTransactionManager(transactionManager);
|
||||
step.setJobRepository(jobRepository);
|
||||
step.setStartLimit(startLimit);
|
||||
step.setAllowStartIfComplete(allowStartIfComplete);
|
||||
|
||||
}
|
||||
|
||||
public Class getObjectType() {
|
||||
return Step.class;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true by default, but in most cases a {@link Step} should not be
|
||||
* treated as thread safe. Clients are recommended to create a new step for
|
||||
* each job execution.
|
||||
*
|
||||
* @see org.springframework.beans.factory.FactoryBean#isSingleton()
|
||||
*/
|
||||
public boolean isSingleton() {
|
||||
return this.singleton;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the singleton flag.
|
||||
* @param singleton the value to set. Defaults to true.
|
||||
*/
|
||||
public void setSingleton(boolean singleton) {
|
||||
this.singleton = singleton;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,102 +1,102 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import org.springframework.batch.core.domain.ItemSkipPolicy;
|
||||
import org.springframework.batch.core.domain.StepContribution;
|
||||
import org.springframework.batch.io.Skippable;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class ItemSkipPolicyItemHandler extends SimpleItemHandler {
|
||||
|
||||
private ItemSkipPolicy itemSkipPolicy = new NeverSkipItemSkipPolicy();
|
||||
|
||||
/**
|
||||
* @param itemReader
|
||||
* @param itemWriter
|
||||
*/
|
||||
public ItemSkipPolicyItemHandler(ItemReader itemReader, ItemWriter itemWriter) {
|
||||
super(itemReader, itemWriter);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param itemSkipPolicy
|
||||
*/
|
||||
public void setItemSkipPolicy(ItemSkipPolicy itemSkipPolicy) {
|
||||
this.itemSkipPolicy = itemSkipPolicy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the business logic, delegating to the reader and writer.
|
||||
* Subclasses could extend the behaviour as long as they always return the
|
||||
* value of this method call in their superclass.<br/>
|
||||
*
|
||||
* Read from the {@link ItemReader} and process (if not null) with the
|
||||
* {@link ItemWriter}.<br/>
|
||||
*
|
||||
* If there is an exception and the reader or writer implements
|
||||
* {@link Skippable} then the skip method is called.
|
||||
*
|
||||
* @param contribution the current step
|
||||
* @return {@link ExitStatus#CONTINUABLE} if there is more processing to do
|
||||
* @throws Exception if there is an error
|
||||
*/
|
||||
public ExitStatus handle(StepContribution contribution) throws Exception {
|
||||
ExitStatus exitStatus = ExitStatus.CONTINUABLE;
|
||||
|
||||
try {
|
||||
|
||||
exitStatus = super.handle(contribution);
|
||||
|
||||
}
|
||||
catch (Exception e) {
|
||||
|
||||
if (itemSkipPolicy.shouldSkip(e, contribution.getSkipCount())) {
|
||||
contribution.incrementSkipCount();
|
||||
skip();
|
||||
}
|
||||
else {
|
||||
// Rethrow so that outer transaction is rolled back properly
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return exitStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark the current item as skipped if possible. If the reader and / or
|
||||
* writer are {@link Skippable} then delegate to them in that order.
|
||||
*
|
||||
* @see org.springframework.batch.io.Skippable#skip()
|
||||
*/
|
||||
private void skip() {
|
||||
if (getItemReader() instanceof Skippable) {
|
||||
((Skippable) getItemReader()).skip();
|
||||
}
|
||||
if (getItemWriter() instanceof Skippable) {
|
||||
((Skippable) getItemWriter()).skip();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import org.springframework.batch.core.domain.ItemSkipPolicy;
|
||||
import org.springframework.batch.core.domain.StepContribution;
|
||||
import org.springframework.batch.io.Skippable;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class ItemSkipPolicyItemHandler extends SimpleItemHandler {
|
||||
|
||||
private ItemSkipPolicy itemSkipPolicy = new NeverSkipItemSkipPolicy();
|
||||
|
||||
/**
|
||||
* @param itemReader
|
||||
* @param itemWriter
|
||||
*/
|
||||
public ItemSkipPolicyItemHandler(ItemReader itemReader, ItemWriter itemWriter) {
|
||||
super(itemReader, itemWriter);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param itemSkipPolicy
|
||||
*/
|
||||
public void setItemSkipPolicy(ItemSkipPolicy itemSkipPolicy) {
|
||||
this.itemSkipPolicy = itemSkipPolicy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the business logic, delegating to the reader and writer.
|
||||
* Subclasses could extend the behaviour as long as they always return the
|
||||
* value of this method call in their superclass.<br/>
|
||||
*
|
||||
* Read from the {@link ItemReader} and process (if not null) with the
|
||||
* {@link ItemWriter}.<br/>
|
||||
*
|
||||
* If there is an exception and the reader or writer implements
|
||||
* {@link Skippable} then the skip method is called.
|
||||
*
|
||||
* @param contribution the current step
|
||||
* @return {@link ExitStatus#CONTINUABLE} if there is more processing to do
|
||||
* @throws Exception if there is an error
|
||||
*/
|
||||
public ExitStatus handle(StepContribution contribution) throws Exception {
|
||||
ExitStatus exitStatus = ExitStatus.CONTINUABLE;
|
||||
|
||||
try {
|
||||
|
||||
exitStatus = super.handle(contribution);
|
||||
|
||||
}
|
||||
catch (Exception e) {
|
||||
|
||||
if (itemSkipPolicy.shouldSkip(e, contribution.getSkipCount())) {
|
||||
contribution.incrementSkipCount();
|
||||
skip();
|
||||
}
|
||||
else {
|
||||
// Rethrow so that outer transaction is rolled back properly
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return exitStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark the current item as skipped if possible. If the reader and / or
|
||||
* writer are {@link Skippable} then delegate to them in that order.
|
||||
*
|
||||
* @see org.springframework.batch.io.Skippable#skip()
|
||||
*/
|
||||
private void skip() {
|
||||
if (getItemReader() instanceof Skippable) {
|
||||
((Skippable) getItemReader()).skip();
|
||||
}
|
||||
if (getItemWriter() instanceof Skippable) {
|
||||
((Skippable) getItemWriter()).skip();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,140 +1,140 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import org.springframework.batch.core.domain.BatchListener;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepListener;
|
||||
import org.springframework.batch.execution.step.ItemOrientedStep;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemStream;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.repeat.RepeatOperations;
|
||||
import org.springframework.batch.repeat.support.RepeatTemplate;
|
||||
|
||||
/**
|
||||
* Factory bean for {@link Step} implementations allowing registration of
|
||||
* listeners and also direct injection of the {@link RepeatOperations} needed at
|
||||
* step and chunk level.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class RepeatOperationsStepFactoryBean extends AbstractStepFactoryBean {
|
||||
|
||||
private ItemStream[] streams = new ItemStream[0];
|
||||
|
||||
private BatchListener[] listeners = new BatchListener[0];
|
||||
|
||||
private RepeatOperations chunkOperations = new RepeatTemplate();
|
||||
|
||||
private RepeatOperations stepOperations = new RepeatTemplate();
|
||||
|
||||
/**
|
||||
* The streams to inject into the {@link Step}. Any instance of
|
||||
* {@link ItemStream} can be used, and will then receive callbacks at the
|
||||
* appropriate stage in the step.
|
||||
*
|
||||
* @param streams an array of listeners
|
||||
*/
|
||||
public void setStreams(ItemStream[] streams) {
|
||||
this.streams = streams;
|
||||
}
|
||||
|
||||
/**
|
||||
* The listeners to inject into the {@link Step}. Any instance of
|
||||
* {@link BatchListener} can be used, and will then receive callbacks at the
|
||||
* appropriate stage in the step.
|
||||
*
|
||||
* @param listeners an array of listeners
|
||||
*/
|
||||
public void setListeners(BatchListener[] listeners) {
|
||||
this.listeners = listeners;
|
||||
}
|
||||
|
||||
/**
|
||||
* The {@link RepeatOperations} to use for the outer loop of the batch
|
||||
* processing. Should be set up by the caller through a factory. Defaults to
|
||||
* a plain {@link RepeatTemplate}.
|
||||
*
|
||||
* @param stepOperations a {@link RepeatOperations} instance.
|
||||
*/
|
||||
public void setStepOperations(RepeatOperations stepOperations) {
|
||||
this.stepOperations = stepOperations;
|
||||
}
|
||||
|
||||
/**
|
||||
* The {@link RepeatOperations} to use for the inner loop of the batch
|
||||
* processing. should be set up by the caller through a factory. defaults to
|
||||
* a plain {@link RepeatTemplate}.
|
||||
*
|
||||
* @param chunkOperations a {@link RepeatOperations} instance.
|
||||
*/
|
||||
public void setChunkOperations(RepeatOperations chunkOperations) {
|
||||
this.chunkOperations = chunkOperations;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param step
|
||||
*
|
||||
*/
|
||||
protected void applyConfiguration(ItemOrientedStep step) {
|
||||
|
||||
super.applyConfiguration(step);
|
||||
|
||||
step.setStreams(streams);
|
||||
|
||||
ItemReader itemReader = getItemReader();
|
||||
ItemWriter itemWriter = getItemWriter();
|
||||
|
||||
/*
|
||||
* Since we are going to wrap these things with listener callbacks we
|
||||
* need to register them here because the step will not know we did
|
||||
* that.
|
||||
*/
|
||||
if (itemReader instanceof ItemStream) {
|
||||
step.registerStream((ItemStream) itemReader);
|
||||
}
|
||||
if (itemReader instanceof StepListener) {
|
||||
step.registerStepListener((StepListener) itemReader);
|
||||
}
|
||||
if (itemWriter instanceof ItemStream) {
|
||||
step.registerStream((ItemStream) itemWriter);
|
||||
}
|
||||
if (itemWriter instanceof StepListener) {
|
||||
step.registerStepListener((StepListener) itemWriter);
|
||||
}
|
||||
|
||||
BatchListenerFactoryHelper helper = new BatchListenerFactoryHelper();
|
||||
|
||||
StepListener[] stepListeners = helper.getStepListeners(listeners);
|
||||
itemReader = helper.getItemReader(itemReader, listeners);
|
||||
itemWriter = helper.getItemWriter(itemWriter, listeners);
|
||||
RepeatOperations stepOperations = helper.addChunkListeners(this.stepOperations, listeners);
|
||||
|
||||
// In case they are used by subclasses:
|
||||
setItemReader(itemReader);
|
||||
setItemWriter(itemWriter);
|
||||
|
||||
step.setStepListeners(stepListeners);
|
||||
step.setItemHandler(new SimpleItemHandler(itemReader, itemWriter));
|
||||
|
||||
step.setChunkOperations(chunkOperations);
|
||||
step.setStepOperations(stepOperations);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import org.springframework.batch.core.domain.BatchListener;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepListener;
|
||||
import org.springframework.batch.execution.step.ItemOrientedStep;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemStream;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.repeat.RepeatOperations;
|
||||
import org.springframework.batch.repeat.support.RepeatTemplate;
|
||||
|
||||
/**
|
||||
* Factory bean for {@link Step} implementations allowing registration of
|
||||
* listeners and also direct injection of the {@link RepeatOperations} needed at
|
||||
* step and chunk level.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class RepeatOperationsStepFactoryBean extends AbstractStepFactoryBean {
|
||||
|
||||
private ItemStream[] streams = new ItemStream[0];
|
||||
|
||||
private BatchListener[] listeners = new BatchListener[0];
|
||||
|
||||
private RepeatOperations chunkOperations = new RepeatTemplate();
|
||||
|
||||
private RepeatOperations stepOperations = new RepeatTemplate();
|
||||
|
||||
/**
|
||||
* The streams to inject into the {@link Step}. Any instance of
|
||||
* {@link ItemStream} can be used, and will then receive callbacks at the
|
||||
* appropriate stage in the step.
|
||||
*
|
||||
* @param streams an array of listeners
|
||||
*/
|
||||
public void setStreams(ItemStream[] streams) {
|
||||
this.streams = streams;
|
||||
}
|
||||
|
||||
/**
|
||||
* The listeners to inject into the {@link Step}. Any instance of
|
||||
* {@link BatchListener} can be used, and will then receive callbacks at the
|
||||
* appropriate stage in the step.
|
||||
*
|
||||
* @param listeners an array of listeners
|
||||
*/
|
||||
public void setListeners(BatchListener[] listeners) {
|
||||
this.listeners = listeners;
|
||||
}
|
||||
|
||||
/**
|
||||
* The {@link RepeatOperations} to use for the outer loop of the batch
|
||||
* processing. Should be set up by the caller through a factory. Defaults to
|
||||
* a plain {@link RepeatTemplate}.
|
||||
*
|
||||
* @param stepOperations a {@link RepeatOperations} instance.
|
||||
*/
|
||||
public void setStepOperations(RepeatOperations stepOperations) {
|
||||
this.stepOperations = stepOperations;
|
||||
}
|
||||
|
||||
/**
|
||||
* The {@link RepeatOperations} to use for the inner loop of the batch
|
||||
* processing. should be set up by the caller through a factory. defaults to
|
||||
* a plain {@link RepeatTemplate}.
|
||||
*
|
||||
* @param chunkOperations a {@link RepeatOperations} instance.
|
||||
*/
|
||||
public void setChunkOperations(RepeatOperations chunkOperations) {
|
||||
this.chunkOperations = chunkOperations;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param step
|
||||
*
|
||||
*/
|
||||
protected void applyConfiguration(ItemOrientedStep step) {
|
||||
|
||||
super.applyConfiguration(step);
|
||||
|
||||
step.setStreams(streams);
|
||||
|
||||
ItemReader itemReader = getItemReader();
|
||||
ItemWriter itemWriter = getItemWriter();
|
||||
|
||||
/*
|
||||
* Since we are going to wrap these things with listener callbacks we
|
||||
* need to register them here because the step will not know we did
|
||||
* that.
|
||||
*/
|
||||
if (itemReader instanceof ItemStream) {
|
||||
step.registerStream((ItemStream) itemReader);
|
||||
}
|
||||
if (itemReader instanceof StepListener) {
|
||||
step.registerStepListener((StepListener) itemReader);
|
||||
}
|
||||
if (itemWriter instanceof ItemStream) {
|
||||
step.registerStream((ItemStream) itemWriter);
|
||||
}
|
||||
if (itemWriter instanceof StepListener) {
|
||||
step.registerStepListener((StepListener) itemWriter);
|
||||
}
|
||||
|
||||
BatchListenerFactoryHelper helper = new BatchListenerFactoryHelper();
|
||||
|
||||
StepListener[] stepListeners = helper.getStepListeners(listeners);
|
||||
itemReader = helper.getItemReader(itemReader, listeners);
|
||||
itemWriter = helper.getItemWriter(itemWriter, listeners);
|
||||
RepeatOperations stepOperations = helper.addChunkListeners(this.stepOperations, listeners);
|
||||
|
||||
// In case they are used by subclasses:
|
||||
setItemReader(itemReader);
|
||||
setItemWriter(itemWriter);
|
||||
|
||||
step.setStepListeners(stepListeners);
|
||||
step.setItemHandler(new SimpleItemHandler(itemReader, itemWriter));
|
||||
|
||||
step.setChunkOperations(chunkOperations);
|
||||
step.setStepOperations(stepOperations);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,79 +1,79 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
||||
import org.springframework.batch.core.domain.JobInterruptedException;
|
||||
import org.springframework.batch.core.runtime.ExitStatusExceptionClassifier;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Simple implementation of {@link ExitStatusExceptionClassifier} that returns
|
||||
* basic String exit codes, and defaults to the class name of the throwable for
|
||||
* the message. Most users will want to write their own implementation that
|
||||
* creates more specific exit codes for different exception types.
|
||||
* </p>
|
||||
*
|
||||
* @author Lucas Ward
|
||||
*
|
||||
*/
|
||||
public class SimpleExitStatusExceptionClassifier implements
|
||||
ExitStatusExceptionClassifier {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.core.executor.ExitCodeExceptionClassifier#classifyForExitCode(java.lang.Throwable)
|
||||
*/
|
||||
public ExitStatus classifyForExitCode(Throwable throwable) {
|
||||
return (ExitStatus) classify(throwable);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.common.ExceptionClassifier#classify(java.lang.Throwable)
|
||||
*/
|
||||
public Object classify(Throwable throwable) {
|
||||
|
||||
ExitStatus exitStatus = ExitStatus.FAILED;
|
||||
|
||||
if (throwable instanceof JobInterruptedException) {
|
||||
exitStatus = new ExitStatus(false, JOB_INTERRUPTED,
|
||||
JobInterruptedException.class.getName());
|
||||
} else {
|
||||
String message = "";
|
||||
if (throwable!=null) {
|
||||
StringWriter writer = new StringWriter();
|
||||
throwable.printStackTrace(new PrintWriter(writer));
|
||||
message = writer.toString();
|
||||
}
|
||||
exitStatus = new ExitStatus(false, FATAL_EXCEPTION, message);
|
||||
}
|
||||
|
||||
return exitStatus;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.springframework.batch.common.ExceptionClassifier#getDefault()
|
||||
*/
|
||||
public Object getDefault() {
|
||||
// return without message since we don't know what the exception is
|
||||
return new ExitStatus(false, FATAL_EXCEPTION);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
||||
import org.springframework.batch.core.domain.JobInterruptedException;
|
||||
import org.springframework.batch.core.runtime.ExitStatusExceptionClassifier;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Simple implementation of {@link ExitStatusExceptionClassifier} that returns
|
||||
* basic String exit codes, and defaults to the class name of the throwable for
|
||||
* the message. Most users will want to write their own implementation that
|
||||
* creates more specific exit codes for different exception types.
|
||||
* </p>
|
||||
*
|
||||
* @author Lucas Ward
|
||||
*
|
||||
*/
|
||||
public class SimpleExitStatusExceptionClassifier implements
|
||||
ExitStatusExceptionClassifier {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.core.executor.ExitCodeExceptionClassifier#classifyForExitCode(java.lang.Throwable)
|
||||
*/
|
||||
public ExitStatus classifyForExitCode(Throwable throwable) {
|
||||
return (ExitStatus) classify(throwable);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.common.ExceptionClassifier#classify(java.lang.Throwable)
|
||||
*/
|
||||
public Object classify(Throwable throwable) {
|
||||
|
||||
ExitStatus exitStatus = ExitStatus.FAILED;
|
||||
|
||||
if (throwable instanceof JobInterruptedException) {
|
||||
exitStatus = new ExitStatus(false, JOB_INTERRUPTED,
|
||||
JobInterruptedException.class.getName());
|
||||
} else {
|
||||
String message = "";
|
||||
if (throwable!=null) {
|
||||
StringWriter writer = new StringWriter();
|
||||
throwable.printStackTrace(new PrintWriter(writer));
|
||||
message = writer.toString();
|
||||
}
|
||||
exitStatus = new ExitStatus(false, FATAL_EXCEPTION, message);
|
||||
}
|
||||
|
||||
return exitStatus;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.springframework.batch.common.ExceptionClassifier#getDefault()
|
||||
*/
|
||||
public Object getDefault() {
|
||||
// return without message since we don't know what the exception is
|
||||
return new ExitStatus(false, FATAL_EXCEPTION);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,115 +1,115 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import org.springframework.batch.core.domain.StepContribution;
|
||||
import org.springframework.batch.execution.step.ItemHandler;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.item.exception.ClearFailedException;
|
||||
import org.springframework.batch.item.exception.FlushFailedException;
|
||||
import org.springframework.batch.item.exception.MarkFailedException;
|
||||
import org.springframework.batch.item.exception.ResetFailedException;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* Simplest possible implementation of {@link ItemHandler} with no skipping or
|
||||
* recovering. Just delegates all calls to the provided {@link ItemReader} and
|
||||
* {@link ItemWriter}.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class SimpleItemHandler implements ItemHandler {
|
||||
|
||||
private ItemReader itemReader;
|
||||
|
||||
private ItemWriter itemWriter;
|
||||
|
||||
/**
|
||||
* @param itemReader
|
||||
* @param itemWriter
|
||||
*/
|
||||
public SimpleItemHandler(ItemReader itemReader, ItemWriter itemWriter) {
|
||||
super();
|
||||
this.itemReader = itemReader;
|
||||
this.itemWriter = itemWriter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public getter for the ItemReader.
|
||||
* @return the itemReader
|
||||
*/
|
||||
public ItemReader getItemReader() {
|
||||
return itemReader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public getter for the ItemWriter.
|
||||
* @return the itemWriter
|
||||
*/
|
||||
public ItemWriter getItemWriter() {
|
||||
return itemWriter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read from the {@link ItemReader} and process (if not null) with the
|
||||
* {@link ItemWriter}.
|
||||
*
|
||||
* @see org.springframework.batch.execution.step.ItemHandler#handle(org.springframework.batch.core.domain.StepContribution)
|
||||
*/
|
||||
public ExitStatus handle(StepContribution contribution) throws Exception {
|
||||
Object item = itemReader.read();
|
||||
if (item == null) {
|
||||
return ExitStatus.FINISHED;
|
||||
}
|
||||
itemWriter.write(item);
|
||||
return ExitStatus.CONTINUABLE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws MarkFailedException
|
||||
* @see org.springframework.batch.item.ItemReader#mark()
|
||||
*/
|
||||
public void mark() throws MarkFailedException {
|
||||
itemReader.mark();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws ResetFailedException
|
||||
* @see org.springframework.batch.item.ItemReader#reset()
|
||||
*/
|
||||
public void reset() throws ResetFailedException {
|
||||
itemReader.reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws ClearFailedException
|
||||
* @see org.springframework.batch.item.ItemWriter#clear()
|
||||
*/
|
||||
public void clear() throws ClearFailedException {
|
||||
itemWriter.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws FlushFailedException
|
||||
* @see org.springframework.batch.item.ItemWriter#flush()
|
||||
*/
|
||||
public void flush() throws FlushFailedException {
|
||||
itemWriter.flush();
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import org.springframework.batch.core.domain.StepContribution;
|
||||
import org.springframework.batch.execution.step.ItemHandler;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.item.exception.ClearFailedException;
|
||||
import org.springframework.batch.item.exception.FlushFailedException;
|
||||
import org.springframework.batch.item.exception.MarkFailedException;
|
||||
import org.springframework.batch.item.exception.ResetFailedException;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
/**
|
||||
* Simplest possible implementation of {@link ItemHandler} with no skipping or
|
||||
* recovering. Just delegates all calls to the provided {@link ItemReader} and
|
||||
* {@link ItemWriter}.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class SimpleItemHandler implements ItemHandler {
|
||||
|
||||
private ItemReader itemReader;
|
||||
|
||||
private ItemWriter itemWriter;
|
||||
|
||||
/**
|
||||
* @param itemReader
|
||||
* @param itemWriter
|
||||
*/
|
||||
public SimpleItemHandler(ItemReader itemReader, ItemWriter itemWriter) {
|
||||
super();
|
||||
this.itemReader = itemReader;
|
||||
this.itemWriter = itemWriter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public getter for the ItemReader.
|
||||
* @return the itemReader
|
||||
*/
|
||||
public ItemReader getItemReader() {
|
||||
return itemReader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public getter for the ItemWriter.
|
||||
* @return the itemWriter
|
||||
*/
|
||||
public ItemWriter getItemWriter() {
|
||||
return itemWriter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read from the {@link ItemReader} and process (if not null) with the
|
||||
* {@link ItemWriter}.
|
||||
*
|
||||
* @see org.springframework.batch.execution.step.ItemHandler#handle(org.springframework.batch.core.domain.StepContribution)
|
||||
*/
|
||||
public ExitStatus handle(StepContribution contribution) throws Exception {
|
||||
Object item = itemReader.read();
|
||||
if (item == null) {
|
||||
return ExitStatus.FINISHED;
|
||||
}
|
||||
itemWriter.write(item);
|
||||
return ExitStatus.CONTINUABLE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws MarkFailedException
|
||||
* @see org.springframework.batch.item.ItemReader#mark()
|
||||
*/
|
||||
public void mark() throws MarkFailedException {
|
||||
itemReader.mark();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws ResetFailedException
|
||||
* @see org.springframework.batch.item.ItemReader#reset()
|
||||
*/
|
||||
public void reset() throws ResetFailedException {
|
||||
itemReader.reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws ClearFailedException
|
||||
* @see org.springframework.batch.item.ItemWriter#clear()
|
||||
*/
|
||||
public void clear() throws ClearFailedException {
|
||||
itemWriter.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws FlushFailedException
|
||||
* @see org.springframework.batch.item.ItemWriter#flush()
|
||||
*/
|
||||
public void flush() throws FlushFailedException {
|
||||
itemWriter.flush();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,197 +1,197 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepContribution;
|
||||
import org.springframework.batch.execution.step.ItemOrientedStep;
|
||||
import org.springframework.batch.item.ItemKeyGenerator;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemRecoverer;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
import org.springframework.batch.retry.RetryOperations;
|
||||
import org.springframework.batch.retry.RetryPolicy;
|
||||
import org.springframework.batch.retry.backoff.BackOffPolicy;
|
||||
import org.springframework.batch.retry.callback.ItemReaderRetryCallback;
|
||||
import org.springframework.batch.retry.policy.ItemReaderRetryPolicy;
|
||||
import org.springframework.batch.retry.policy.SimpleRetryPolicy;
|
||||
import org.springframework.batch.retry.support.RetryTemplate;
|
||||
|
||||
/**
|
||||
* Factory bean for step that executes its item processing with a stateful
|
||||
* retry. Failed items are never skipped, but always cause a rollback. Before a
|
||||
* rollback, the {@link Step} makes a record of the failed item, caching it
|
||||
* under a key given by the {@link ItemKeyGenerator}. Then when it is
|
||||
* re-presented by the {@link ItemReader} it is recognised and retried up to a
|
||||
* limit given by the {@link RetryPolicy}. When the retry is exhausted instead
|
||||
* of the item being skipped it is handled by an {@link ItemRecoverer}.<br/>
|
||||
*
|
||||
* The skipLimit property is still used to control the overall exception
|
||||
* handling policy. Only exhausted retries count against the exception handler,
|
||||
* instead of counting all exceptions.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class StatefulRetryStepFactoryBean extends DefaultStepFactoryBean {
|
||||
|
||||
private ItemKeyGenerator itemKeyGenerator;
|
||||
|
||||
private ItemRecoverer itemRecoverer;
|
||||
|
||||
private int retryLimit;
|
||||
|
||||
private Class[] retryableExceptionClasses;
|
||||
|
||||
private BackOffPolicy backOffPolicy;
|
||||
|
||||
/**
|
||||
* Public setter for the retry limit. Each item can be retried up to this
|
||||
* limit.
|
||||
* @param retryLimit the retry limit to set
|
||||
*/
|
||||
public void setRetryLimit(int retryLimit) {
|
||||
this.retryLimit = retryLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the Class[].
|
||||
* @param retryableExceptionClasses the retryableExceptionClasses to set
|
||||
*/
|
||||
public void setRetryableExceptionClasses(Class[] retryableExceptionClasses) {
|
||||
this.retryableExceptionClasses = retryableExceptionClasses;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the {@link BackOffPolicy}.
|
||||
* @param backOffPolicy the {@link BackOffPolicy} to set
|
||||
*/
|
||||
public void setBackOffPolicy(BackOffPolicy backOffPolicy) {
|
||||
this.backOffPolicy = backOffPolicy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the {@link ItemKeyGenerator} which will be used to
|
||||
* cache failed items between transactions. If it is not injected but the
|
||||
* reader or writer implement {@link ItemKeyGenerator}, one of those will
|
||||
* be used instead (preferring the reader to the writer if both would be
|
||||
* appropriate). If neither can be used, then the default will be to just
|
||||
* use the item itself as a cache key.
|
||||
*
|
||||
* @param itemKeyGenerator the {@link ItemKeyGenerator} to set
|
||||
*/
|
||||
public void setItemKeyGenerator(ItemKeyGenerator itemKeyGenerator) {
|
||||
this.itemKeyGenerator = itemKeyGenerator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the {@link ItemRecoverer}. If this is set the
|
||||
* {@link ItemRecoverer#recover(Object, Throwable)} will be called when
|
||||
* retry is exhausted, and within the business transaction (which will not
|
||||
* roll back because of any other item-related errors).
|
||||
*
|
||||
* @param itemRecoverer the {@link ItemRecoverer} to set
|
||||
*/
|
||||
public void setItemRecoverer(ItemRecoverer itemRecoverer) {
|
||||
this.itemRecoverer = itemRecoverer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param step
|
||||
*
|
||||
*/
|
||||
protected void applyConfiguration(ItemOrientedStep step) {
|
||||
|
||||
super.applyConfiguration(step);
|
||||
|
||||
if (retryLimit > 0) {
|
||||
|
||||
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy(retryLimit);
|
||||
if (retryableExceptionClasses != null) {
|
||||
retryPolicy.setRetryableExceptionClasses(retryableExceptionClasses);
|
||||
}
|
||||
|
||||
// Co-ordinate the retry policy with the exception handler:
|
||||
getStepOperations()
|
||||
.setExceptionHandler(new SimpleRetryExceptionHandler(retryPolicy, getExceptionHandler()));
|
||||
|
||||
ItemReaderRetryCallback retryCallback = new ItemReaderRetryCallback(getItemReader(), itemKeyGenerator,
|
||||
getItemWriter());
|
||||
retryCallback.setRecoverer(itemRecoverer);
|
||||
ItemReaderRetryPolicy itemProviderRetryPolicy = new ItemReaderRetryPolicy(retryPolicy);
|
||||
|
||||
RetryTemplate retryTemplate = new RetryTemplate();
|
||||
retryTemplate.setRetryPolicy(itemProviderRetryPolicy);
|
||||
if (backOffPolicy != null) {
|
||||
retryTemplate.setBackOffPolicy(backOffPolicy);
|
||||
}
|
||||
|
||||
StatefulRetryItemHandler itemProcessor = new StatefulRetryItemHandler(getItemReader(), getItemWriter(),
|
||||
retryTemplate, retryCallback);
|
||||
|
||||
step.setItemHandler(itemProcessor);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class StatefulRetryItemHandler extends SimpleItemHandler {
|
||||
|
||||
final private RetryOperations retryOperations;
|
||||
|
||||
final private ItemReaderRetryCallback retryCallback;
|
||||
|
||||
/**
|
||||
* @param itemReader
|
||||
* @param itemWriter
|
||||
* @param retryCallback
|
||||
* @param retryTemplate
|
||||
*/
|
||||
public StatefulRetryItemHandler(ItemReader itemReader, ItemWriter itemWriter, RetryOperations retryTemplate,
|
||||
ItemReaderRetryCallback retryCallback) {
|
||||
super(itemReader, itemWriter);
|
||||
this.retryOperations = retryTemplate;
|
||||
this.retryCallback = retryCallback;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the business logic, delegating to the reader and writer.
|
||||
* Subclasses could extend the behaviour as long as they always return
|
||||
* the value of this method call in their superclass.<br/>
|
||||
*
|
||||
* Read from the {@link ItemReader} and process (if not null) with the
|
||||
* {@link ItemWriter}. The call to {@link ItemWriter} is wrapped in a
|
||||
* stateful retry. In that case the {@link ItemRecoverer} is used (if
|
||||
* provided) in the case of an exception to apply alternate processing
|
||||
* to the item. If the stateful retry is in place then the recovery will
|
||||
* happen in the next transaction automatically, otherwise it might be
|
||||
* necessary for clients to make the recover method transactional with
|
||||
* appropriate propagation behaviour (probably REQUIRES_NEW because the
|
||||
* call will happen in the context of a transaction that is about to
|
||||
* rollback).<br/>
|
||||
*
|
||||
* @param contribution the current step
|
||||
* @return {@link ExitStatus#CONTINUABLE} if there is more processing to
|
||||
* do
|
||||
* @throws Exception if there is an error
|
||||
*/
|
||||
public ExitStatus handle(StepContribution contribution) throws Exception {
|
||||
return new ExitStatus(retryOperations.execute(retryCallback) != null);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.step.support;
|
||||
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepContribution;
|
||||
import org.springframework.batch.execution.step.ItemOrientedStep;
|
||||
import org.springframework.batch.item.ItemKeyGenerator;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemRecoverer;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
import org.springframework.batch.retry.RetryOperations;
|
||||
import org.springframework.batch.retry.RetryPolicy;
|
||||
import org.springframework.batch.retry.backoff.BackOffPolicy;
|
||||
import org.springframework.batch.retry.callback.ItemReaderRetryCallback;
|
||||
import org.springframework.batch.retry.policy.ItemReaderRetryPolicy;
|
||||
import org.springframework.batch.retry.policy.SimpleRetryPolicy;
|
||||
import org.springframework.batch.retry.support.RetryTemplate;
|
||||
|
||||
/**
|
||||
* Factory bean for step that executes its item processing with a stateful
|
||||
* retry. Failed items are never skipped, but always cause a rollback. Before a
|
||||
* rollback, the {@link Step} makes a record of the failed item, caching it
|
||||
* under a key given by the {@link ItemKeyGenerator}. Then when it is
|
||||
* re-presented by the {@link ItemReader} it is recognised and retried up to a
|
||||
* limit given by the {@link RetryPolicy}. When the retry is exhausted instead
|
||||
* of the item being skipped it is handled by an {@link ItemRecoverer}.<br/>
|
||||
*
|
||||
* The skipLimit property is still used to control the overall exception
|
||||
* handling policy. Only exhausted retries count against the exception handler,
|
||||
* instead of counting all exceptions.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class StatefulRetryStepFactoryBean extends DefaultStepFactoryBean {
|
||||
|
||||
private ItemKeyGenerator itemKeyGenerator;
|
||||
|
||||
private ItemRecoverer itemRecoverer;
|
||||
|
||||
private int retryLimit;
|
||||
|
||||
private Class[] retryableExceptionClasses;
|
||||
|
||||
private BackOffPolicy backOffPolicy;
|
||||
|
||||
/**
|
||||
* Public setter for the retry limit. Each item can be retried up to this
|
||||
* limit.
|
||||
* @param retryLimit the retry limit to set
|
||||
*/
|
||||
public void setRetryLimit(int retryLimit) {
|
||||
this.retryLimit = retryLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the Class[].
|
||||
* @param retryableExceptionClasses the retryableExceptionClasses to set
|
||||
*/
|
||||
public void setRetryableExceptionClasses(Class[] retryableExceptionClasses) {
|
||||
this.retryableExceptionClasses = retryableExceptionClasses;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the {@link BackOffPolicy}.
|
||||
* @param backOffPolicy the {@link BackOffPolicy} to set
|
||||
*/
|
||||
public void setBackOffPolicy(BackOffPolicy backOffPolicy) {
|
||||
this.backOffPolicy = backOffPolicy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the {@link ItemKeyGenerator} which will be used to
|
||||
* cache failed items between transactions. If it is not injected but the
|
||||
* reader or writer implement {@link ItemKeyGenerator}, one of those will
|
||||
* be used instead (preferring the reader to the writer if both would be
|
||||
* appropriate). If neither can be used, then the default will be to just
|
||||
* use the item itself as a cache key.
|
||||
*
|
||||
* @param itemKeyGenerator the {@link ItemKeyGenerator} to set
|
||||
*/
|
||||
public void setItemKeyGenerator(ItemKeyGenerator itemKeyGenerator) {
|
||||
this.itemKeyGenerator = itemKeyGenerator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public setter for the {@link ItemRecoverer}. If this is set the
|
||||
* {@link ItemRecoverer#recover(Object, Throwable)} will be called when
|
||||
* retry is exhausted, and within the business transaction (which will not
|
||||
* roll back because of any other item-related errors).
|
||||
*
|
||||
* @param itemRecoverer the {@link ItemRecoverer} to set
|
||||
*/
|
||||
public void setItemRecoverer(ItemRecoverer itemRecoverer) {
|
||||
this.itemRecoverer = itemRecoverer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param step
|
||||
*
|
||||
*/
|
||||
protected void applyConfiguration(ItemOrientedStep step) {
|
||||
|
||||
super.applyConfiguration(step);
|
||||
|
||||
if (retryLimit > 0) {
|
||||
|
||||
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy(retryLimit);
|
||||
if (retryableExceptionClasses != null) {
|
||||
retryPolicy.setRetryableExceptionClasses(retryableExceptionClasses);
|
||||
}
|
||||
|
||||
// Co-ordinate the retry policy with the exception handler:
|
||||
getStepOperations()
|
||||
.setExceptionHandler(new SimpleRetryExceptionHandler(retryPolicy, getExceptionHandler()));
|
||||
|
||||
ItemReaderRetryCallback retryCallback = new ItemReaderRetryCallback(getItemReader(), itemKeyGenerator,
|
||||
getItemWriter());
|
||||
retryCallback.setRecoverer(itemRecoverer);
|
||||
ItemReaderRetryPolicy itemProviderRetryPolicy = new ItemReaderRetryPolicy(retryPolicy);
|
||||
|
||||
RetryTemplate retryTemplate = new RetryTemplate();
|
||||
retryTemplate.setRetryPolicy(itemProviderRetryPolicy);
|
||||
if (backOffPolicy != null) {
|
||||
retryTemplate.setBackOffPolicy(backOffPolicy);
|
||||
}
|
||||
|
||||
StatefulRetryItemHandler itemProcessor = new StatefulRetryItemHandler(getItemReader(), getItemWriter(),
|
||||
retryTemplate, retryCallback);
|
||||
|
||||
step.setItemHandler(itemProcessor);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class StatefulRetryItemHandler extends SimpleItemHandler {
|
||||
|
||||
final private RetryOperations retryOperations;
|
||||
|
||||
final private ItemReaderRetryCallback retryCallback;
|
||||
|
||||
/**
|
||||
* @param itemReader
|
||||
* @param itemWriter
|
||||
* @param retryCallback
|
||||
* @param retryTemplate
|
||||
*/
|
||||
public StatefulRetryItemHandler(ItemReader itemReader, ItemWriter itemWriter, RetryOperations retryTemplate,
|
||||
ItemReaderRetryCallback retryCallback) {
|
||||
super(itemReader, itemWriter);
|
||||
this.retryOperations = retryTemplate;
|
||||
this.retryCallback = retryCallback;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the business logic, delegating to the reader and writer.
|
||||
* Subclasses could extend the behaviour as long as they always return
|
||||
* the value of this method call in their superclass.<br/>
|
||||
*
|
||||
* Read from the {@link ItemReader} and process (if not null) with the
|
||||
* {@link ItemWriter}. The call to {@link ItemWriter} is wrapped in a
|
||||
* stateful retry. In that case the {@link ItemRecoverer} is used (if
|
||||
* provided) in the case of an exception to apply alternate processing
|
||||
* to the item. If the stateful retry is in place then the recovery will
|
||||
* happen in the next transaction automatically, otherwise it might be
|
||||
* necessary for clients to make the recover method transactional with
|
||||
* appropriate propagation behaviour (probably REQUIRES_NEW because the
|
||||
* call will happen in the context of a transaction that is about to
|
||||
* rollback).<br/>
|
||||
*
|
||||
* @param contribution the current step
|
||||
* @return {@link ExitStatus#CONTINUABLE} if there is more processing to
|
||||
* do
|
||||
* @throws Exception if there is an error
|
||||
*/
|
||||
public ExitStatus handle(StepContribution contribution) throws Exception {
|
||||
return new ExitStatus(retryOperations.execute(retryCallback) != null);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
platform=db2
|
||||
# SQL language oddities
|
||||
BIGINT = BIGINT
|
||||
IDENTITY =
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = BLOB
|
||||
# for generating drop statements...
|
||||
SEQUENCE = SEQUENCE
|
||||
platform=db2
|
||||
# SQL language oddities
|
||||
BIGINT = BIGINT
|
||||
IDENTITY =
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = BLOB
|
||||
# for generating drop statements...
|
||||
SEQUENCE = SEQUENCE
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
#macro (sequence $name)CREATE SEQUENCE ${name};
|
||||
#end
|
||||
#macro (sequence $name)CREATE SEQUENCE ${name};
|
||||
#end
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
platform=db2
|
||||
# SQL language oddities
|
||||
BIGINT = BIGINT
|
||||
IDENTITY =
|
||||
GENERATED = GENERATED BY DEFAULT AS IDENTITY
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = BLOB
|
||||
# for generating drop statements...
|
||||
SEQUENCE = TABLE
|
||||
platform=db2
|
||||
# SQL language oddities
|
||||
BIGINT = BIGINT
|
||||
IDENTITY =
|
||||
GENERATED = GENERATED BY DEFAULT AS IDENTITY
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = BLOB
|
||||
# for generating drop statements...
|
||||
SEQUENCE = TABLE
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
#macro (sequence $name)CREATE TABLE ${name} (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1));
|
||||
#end
|
||||
#macro (sequence $name)CREATE TABLE ${name} (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1));
|
||||
#end
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
platform=hsqldb
|
||||
# SQL language oddities
|
||||
BIGINT = BIGINT
|
||||
IDENTITY = IDENTITY
|
||||
IFEXISTS = IF EXISTS
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = LONGVARBINARY
|
||||
# for generating drop statements...
|
||||
SEQUENCE = TABLE
|
||||
platform=hsqldb
|
||||
# SQL language oddities
|
||||
BIGINT = BIGINT
|
||||
IDENTITY = IDENTITY
|
||||
IFEXISTS = IF EXISTS
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = LONGVARBINARY
|
||||
# for generating drop statements...
|
||||
SEQUENCE = TABLE
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#macro (sequence $name)CREATE TABLE ${name} (
|
||||
ID BIGINT IDENTITY
|
||||
);
|
||||
#end
|
||||
#macro (sequence $name)CREATE TABLE ${name} (
|
||||
ID BIGINT IDENTITY
|
||||
);
|
||||
#end
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
platform=oracle10g
|
||||
# SQL language oddities
|
||||
BIGINT = BIGINT
|
||||
IDENTITY = unsigned
|
||||
GENERATED =
|
||||
IFEXISTSBEFORE = IF EXISTS
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = BLOB
|
||||
# for generating drop statements...
|
||||
SEQUENCE = TABLE
|
||||
platform=oracle10g
|
||||
# SQL language oddities
|
||||
BIGINT = BIGINT
|
||||
IDENTITY = unsigned
|
||||
GENERATED =
|
||||
IFEXISTSBEFORE = IF EXISTS
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = BLOB
|
||||
# for generating drop statements...
|
||||
SEQUENCE = TABLE
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#macro (sequence $name)CREATE TABLE ${name} (ID BIGINT NOT NULL) type=MYISAM;
|
||||
INSERT INTO ${name} values(0);
|
||||
#end
|
||||
#macro (sequence $name)CREATE TABLE ${name} (ID BIGINT NOT NULL) type=MYISAM;
|
||||
INSERT INTO ${name} values(0);
|
||||
#end
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
platform=oracle10g
|
||||
# SQL language oddities
|
||||
BIGINT = NUMBER(38)
|
||||
IDENTITY =
|
||||
GENERATED =
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = BLOB
|
||||
# for generating drop statements...
|
||||
SEQUENCE = SEQUENCE
|
||||
platform=oracle10g
|
||||
# SQL language oddities
|
||||
BIGINT = NUMBER(38)
|
||||
IDENTITY =
|
||||
GENERATED =
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = BLOB
|
||||
# for generating drop statements...
|
||||
SEQUENCE = SEQUENCE
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
#macro (sequence $name)CREATE SEQUENCE ${name};
|
||||
#end
|
||||
#macro (sequence $name)CREATE SEQUENCE ${name};
|
||||
#end
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
platform=postgresql
|
||||
# SQL language oddities
|
||||
BIGINT = BIGINT
|
||||
IDENTITY =
|
||||
GENERATED =
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = BYTEA
|
||||
# for generating drop statements...
|
||||
SEQUENCE = SEQUENCE
|
||||
platform=postgresql
|
||||
# SQL language oddities
|
||||
BIGINT = BIGINT
|
||||
IDENTITY =
|
||||
GENERATED =
|
||||
DOUBLE = DOUBLE PRECISION
|
||||
BLOB = BYTEA
|
||||
# for generating drop statements...
|
||||
SEQUENCE = SEQUENCE
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
#macro (sequence $name)CREATE SEQUENCE ${name};
|
||||
#end
|
||||
#macro (sequence $name)CREATE SEQUENCE ${name};
|
||||
#end
|
||||
|
||||
@@ -1,131 +1,131 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.configuration;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
import org.springframework.batch.core.repository.NoSuchJobException;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
import org.springframework.beans.FatalBeanException;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobRegistryBeanPostProcessorTests extends TestCase {
|
||||
|
||||
private JobRegistryBeanPostProcessor processor = new JobRegistryBeanPostProcessor();
|
||||
|
||||
public void testInitialization() throws Exception {
|
||||
try {
|
||||
processor.afterPropertiesSet();
|
||||
fail("Expected IllegalArgumentException");
|
||||
} catch (IllegalArgumentException e) {
|
||||
// expected
|
||||
assertTrue(e.getMessage().indexOf("JobConfigurationRegistry") >= 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void testBeforeInitialization() throws Exception {
|
||||
// should be a no-op
|
||||
assertEquals("foo", processor.postProcessAfterInitialization("foo",
|
||||
"bar"));
|
||||
}
|
||||
|
||||
public void testAfterInitializationWithWrongType() throws Exception {
|
||||
// should be a no-op
|
||||
assertEquals("foo", processor.postProcessAfterInitialization("foo",
|
||||
"bar"));
|
||||
}
|
||||
|
||||
public void testAfterInitializationWithCorrectType() throws Exception {
|
||||
MapJobRegistry registry = new MapJobRegistry();
|
||||
processor.setJobRegistry(registry);
|
||||
JobSupport configuration = new JobSupport();
|
||||
configuration.setBeanName("foo");
|
||||
assertEquals(configuration, processor.postProcessAfterInitialization(
|
||||
configuration, "bar"));
|
||||
assertEquals(configuration, registry.getJob("foo"));
|
||||
}
|
||||
|
||||
public void testAfterInitializationWithDuplicate() throws Exception {
|
||||
MapJobRegistry registry = new MapJobRegistry();
|
||||
processor.setJobRegistry(registry);
|
||||
JobSupport configuration = new JobSupport();
|
||||
configuration.setBeanName("foo");
|
||||
processor.postProcessAfterInitialization(configuration, "bar");
|
||||
try {
|
||||
processor.postProcessAfterInitialization(configuration, "spam");
|
||||
fail("Expected FatalBeanException");
|
||||
} catch (FatalBeanException e) {
|
||||
// Expected
|
||||
assertTrue(e.getCause() instanceof DuplicateJobException);
|
||||
}
|
||||
}
|
||||
|
||||
public void testUnregisterOnDestroy() throws Exception {
|
||||
MapJobRegistry registry = new MapJobRegistry();
|
||||
processor.setJobRegistry(registry);
|
||||
JobSupport configuration = new JobSupport();
|
||||
configuration.setBeanName("foo");
|
||||
assertEquals(configuration, processor.postProcessAfterInitialization(
|
||||
configuration, "bar"));
|
||||
processor.destroy();
|
||||
try {
|
||||
assertEquals(null, registry.getJob("foo"));
|
||||
fail("Expected NoSuchJobConfigurationException");
|
||||
} catch (NoSuchJobException e) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
public void testExecutionWithApplicationContext() throws Exception {
|
||||
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
"test-context.xml", getClass());
|
||||
MapJobRegistry registry = (MapJobRegistry) context
|
||||
.getBean("registry");
|
||||
Collection configurations = registry.getJobNames();
|
||||
// System.err.println(configurations);
|
||||
String[] names = context.getBeanNamesForType(JobSupport.class);
|
||||
int count = names.length;
|
||||
// Each concrete bean of type JobConfiguration is registered...
|
||||
assertEquals(count, configurations.size());
|
||||
// N.B. there is a failure / wonky mode where a parent bean is given an
|
||||
// explicit name or beanName (using property setter): in this case then
|
||||
// child beans will have the same name and will be re-registered (and
|
||||
// override, if the registry supports that).
|
||||
assertNotNull(registry.getJob("test-job"));
|
||||
assertEquals(context.getBean("test-job-with-name"), registry
|
||||
.getJob("foo"));
|
||||
assertEquals(context.getBean("test-job-with-bean-name"), registry
|
||||
.getJob("bar"));
|
||||
assertEquals(context.getBean("test-job-with-parent-and-name"), registry
|
||||
.getJob("spam"));
|
||||
assertEquals(context.getBean("test-job-with-parent-and-bean-name"),
|
||||
registry.getJob("bucket"));
|
||||
assertEquals(context.getBean("test-job-with-concrete-parent"), registry
|
||||
.getJob("maps"));
|
||||
assertEquals(context.getBean("test-job-with-concrete-parent-and-name"),
|
||||
registry.getJob("oof"));
|
||||
assertEquals(context
|
||||
.getBean("test-job-with-concrete-parent-and-bean-name"),
|
||||
registry.getJob("rab"));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.configuration;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
import org.springframework.batch.core.repository.NoSuchJobException;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
import org.springframework.beans.FatalBeanException;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JobRegistryBeanPostProcessorTests extends TestCase {
|
||||
|
||||
private JobRegistryBeanPostProcessor processor = new JobRegistryBeanPostProcessor();
|
||||
|
||||
public void testInitialization() throws Exception {
|
||||
try {
|
||||
processor.afterPropertiesSet();
|
||||
fail("Expected IllegalArgumentException");
|
||||
} catch (IllegalArgumentException e) {
|
||||
// expected
|
||||
assertTrue(e.getMessage().indexOf("JobConfigurationRegistry") >= 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void testBeforeInitialization() throws Exception {
|
||||
// should be a no-op
|
||||
assertEquals("foo", processor.postProcessAfterInitialization("foo",
|
||||
"bar"));
|
||||
}
|
||||
|
||||
public void testAfterInitializationWithWrongType() throws Exception {
|
||||
// should be a no-op
|
||||
assertEquals("foo", processor.postProcessAfterInitialization("foo",
|
||||
"bar"));
|
||||
}
|
||||
|
||||
public void testAfterInitializationWithCorrectType() throws Exception {
|
||||
MapJobRegistry registry = new MapJobRegistry();
|
||||
processor.setJobRegistry(registry);
|
||||
JobSupport configuration = new JobSupport();
|
||||
configuration.setBeanName("foo");
|
||||
assertEquals(configuration, processor.postProcessAfterInitialization(
|
||||
configuration, "bar"));
|
||||
assertEquals(configuration, registry.getJob("foo"));
|
||||
}
|
||||
|
||||
public void testAfterInitializationWithDuplicate() throws Exception {
|
||||
MapJobRegistry registry = new MapJobRegistry();
|
||||
processor.setJobRegistry(registry);
|
||||
JobSupport configuration = new JobSupport();
|
||||
configuration.setBeanName("foo");
|
||||
processor.postProcessAfterInitialization(configuration, "bar");
|
||||
try {
|
||||
processor.postProcessAfterInitialization(configuration, "spam");
|
||||
fail("Expected FatalBeanException");
|
||||
} catch (FatalBeanException e) {
|
||||
// Expected
|
||||
assertTrue(e.getCause() instanceof DuplicateJobException);
|
||||
}
|
||||
}
|
||||
|
||||
public void testUnregisterOnDestroy() throws Exception {
|
||||
MapJobRegistry registry = new MapJobRegistry();
|
||||
processor.setJobRegistry(registry);
|
||||
JobSupport configuration = new JobSupport();
|
||||
configuration.setBeanName("foo");
|
||||
assertEquals(configuration, processor.postProcessAfterInitialization(
|
||||
configuration, "bar"));
|
||||
processor.destroy();
|
||||
try {
|
||||
assertEquals(null, registry.getJob("foo"));
|
||||
fail("Expected NoSuchJobConfigurationException");
|
||||
} catch (NoSuchJobException e) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
public void testExecutionWithApplicationContext() throws Exception {
|
||||
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
"test-context.xml", getClass());
|
||||
MapJobRegistry registry = (MapJobRegistry) context
|
||||
.getBean("registry");
|
||||
Collection configurations = registry.getJobNames();
|
||||
// System.err.println(configurations);
|
||||
String[] names = context.getBeanNamesForType(JobSupport.class);
|
||||
int count = names.length;
|
||||
// Each concrete bean of type JobConfiguration is registered...
|
||||
assertEquals(count, configurations.size());
|
||||
// N.B. there is a failure / wonky mode where a parent bean is given an
|
||||
// explicit name or beanName (using property setter): in this case then
|
||||
// child beans will have the same name and will be re-registered (and
|
||||
// override, if the registry supports that).
|
||||
assertNotNull(registry.getJob("test-job"));
|
||||
assertEquals(context.getBean("test-job-with-name"), registry
|
||||
.getJob("foo"));
|
||||
assertEquals(context.getBean("test-job-with-bean-name"), registry
|
||||
.getJob("bar"));
|
||||
assertEquals(context.getBean("test-job-with-parent-and-name"), registry
|
||||
.getJob("spam"));
|
||||
assertEquals(context.getBean("test-job-with-parent-and-bean-name"),
|
||||
registry.getJob("bucket"));
|
||||
assertEquals(context.getBean("test-job-with-concrete-parent"), registry
|
||||
.getJob("maps"));
|
||||
assertEquals(context.getBean("test-job-with-concrete-parent-and-name"),
|
||||
registry.getJob("oof"));
|
||||
assertEquals(context
|
||||
.getBean("test-job-with-concrete-parent-and-bean-name"),
|
||||
registry.getJob("rab"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,95 +1,95 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.configuration;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.configuration.JobFactory;
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
import org.springframework.batch.core.repository.NoSuchJobException;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class MapJobRegistryTests extends TestCase {
|
||||
|
||||
private MapJobRegistry registry = new MapJobRegistry();
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.execution.configuration.MapJobRegistry#unregister(String)}.
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testUnregister() throws Exception {
|
||||
registry.register(new ReferenceJobFactory(new JobSupport("foo")));
|
||||
assertNotNull(registry.getJob("foo"));
|
||||
registry.unregister("foo");
|
||||
try {
|
||||
assertNull(registry.getJob("foo"));
|
||||
fail("Expected NoSuchJobConfigurationException");
|
||||
}
|
||||
catch (NoSuchJobException e) {
|
||||
// expected
|
||||
assertTrue(e.getMessage().indexOf("foo")>=0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.execution.configuration.MapJobRegistry#getJob(java.lang.String)}.
|
||||
*/
|
||||
public void testReplaceDuplicateConfiguration() throws Exception {
|
||||
registry.register(new ReferenceJobFactory(new JobSupport("foo")));
|
||||
try {
|
||||
registry.register(new ReferenceJobFactory(new JobSupport("foo")));
|
||||
fail("Expected DuplicateJobConfigurationException");
|
||||
} catch (DuplicateJobException e) {
|
||||
// unexpected: even if the job is different we want a DuplicateJobException
|
||||
assertTrue(e.getMessage().indexOf("foo")>=0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.execution.configuration.MapJobRegistry#getJob(java.lang.String)}.
|
||||
*/
|
||||
public void testRealDuplicateConfiguration() throws Exception {
|
||||
JobFactory jobFactory = new ReferenceJobFactory(new JobSupport("foo"));
|
||||
registry.register(jobFactory);
|
||||
try {
|
||||
registry.register(jobFactory);
|
||||
fail("Unexpected DuplicateJobConfigurationException");
|
||||
} catch (DuplicateJobException e) {
|
||||
// expected
|
||||
assertTrue(e.getMessage().indexOf("foo")>=0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.execution.configuration.MapJobRegistry#getJobNames()}.
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testGetJobConfigurations() throws Exception {
|
||||
JobFactory jobFactory = new ReferenceJobFactory(new JobSupport("foo"));
|
||||
registry.register(jobFactory);
|
||||
registry.register(new ReferenceJobFactory(new JobSupport("bar")));
|
||||
Collection configurations = registry.getJobNames();
|
||||
assertEquals(2, configurations.size());
|
||||
assertTrue(configurations.contains(jobFactory.getJobName()));
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.configuration;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.configuration.JobFactory;
|
||||
import org.springframework.batch.core.repository.DuplicateJobException;
|
||||
import org.springframework.batch.core.repository.NoSuchJobException;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class MapJobRegistryTests extends TestCase {
|
||||
|
||||
private MapJobRegistry registry = new MapJobRegistry();
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.execution.configuration.MapJobRegistry#unregister(String)}.
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testUnregister() throws Exception {
|
||||
registry.register(new ReferenceJobFactory(new JobSupport("foo")));
|
||||
assertNotNull(registry.getJob("foo"));
|
||||
registry.unregister("foo");
|
||||
try {
|
||||
assertNull(registry.getJob("foo"));
|
||||
fail("Expected NoSuchJobConfigurationException");
|
||||
}
|
||||
catch (NoSuchJobException e) {
|
||||
// expected
|
||||
assertTrue(e.getMessage().indexOf("foo")>=0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.execution.configuration.MapJobRegistry#getJob(java.lang.String)}.
|
||||
*/
|
||||
public void testReplaceDuplicateConfiguration() throws Exception {
|
||||
registry.register(new ReferenceJobFactory(new JobSupport("foo")));
|
||||
try {
|
||||
registry.register(new ReferenceJobFactory(new JobSupport("foo")));
|
||||
fail("Expected DuplicateJobConfigurationException");
|
||||
} catch (DuplicateJobException e) {
|
||||
// unexpected: even if the job is different we want a DuplicateJobException
|
||||
assertTrue(e.getMessage().indexOf("foo")>=0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.execution.configuration.MapJobRegistry#getJob(java.lang.String)}.
|
||||
*/
|
||||
public void testRealDuplicateConfiguration() throws Exception {
|
||||
JobFactory jobFactory = new ReferenceJobFactory(new JobSupport("foo"));
|
||||
registry.register(jobFactory);
|
||||
try {
|
||||
registry.register(jobFactory);
|
||||
fail("Unexpected DuplicateJobConfigurationException");
|
||||
} catch (DuplicateJobException e) {
|
||||
// expected
|
||||
assertTrue(e.getMessage().indexOf("foo")>=0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.execution.configuration.MapJobRegistry#getJobNames()}.
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testGetJobConfigurations() throws Exception {
|
||||
JobFactory jobFactory = new ReferenceJobFactory(new JobSupport("foo"));
|
||||
registry.register(jobFactory);
|
||||
registry.register(new ReferenceJobFactory(new JobSupport("bar")));
|
||||
Collection configurations = registry.getJobNames();
|
||||
assertEquals(2, configurations.size());
|
||||
assertTrue(configurations.contains(jobFactory.getJobName()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,115 +1,115 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.job;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import org.springframework.batch.execution.step.StepSupport;
|
||||
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class AbstractJobTests extends TestCase {
|
||||
|
||||
JobSupport job = new JobSupport("job");
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#JobConfiguration()}.
|
||||
*/
|
||||
public void testJobConfiguration() {
|
||||
job = new JobSupport();
|
||||
assertNull(job.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#setBeanName(java.lang.String)}.
|
||||
*/
|
||||
public void testSetBeanName() {
|
||||
job.setBeanName("foo");
|
||||
assertEquals("job", job.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#setBeanName(java.lang.String)}.
|
||||
*/
|
||||
public void testSetBeanNameWithNullName() {
|
||||
job = new JobSupport(null);
|
||||
assertEquals(null, job.getName());
|
||||
job.setBeanName("foo");
|
||||
assertEquals("foo", job.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#setStepNames(java.util.List)}.
|
||||
*/
|
||||
public void testSetSteps() {
|
||||
job.setSteps(Collections.singletonList(new StepSupport("step")));
|
||||
assertEquals(1, job.getSteps().size());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#addStepName(org.springframework.batch.core.configuration.StepConfiguration)}.
|
||||
*/
|
||||
public void testAddStep() {
|
||||
job.addStep(new StepSupport("step"));
|
||||
assertEquals(1, job.getSteps().size());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#setStartLimit(int)}.
|
||||
*/
|
||||
public void testSetStartLimit() {
|
||||
assertEquals(Integer.MAX_VALUE, job.getStartLimit());
|
||||
job.setStartLimit(10);
|
||||
assertEquals(10, job.getStartLimit());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#setRestartable(boolean)}.
|
||||
*/
|
||||
public void testSetRestartable() {
|
||||
assertFalse(job.isRestartable());
|
||||
job.setRestartable(true);
|
||||
assertTrue(job.isRestartable());
|
||||
}
|
||||
|
||||
public void testToString() throws Exception {
|
||||
String value = job.toString();
|
||||
assertTrue("Should contain name: "+value, value.indexOf("name=")>=0);
|
||||
}
|
||||
|
||||
public void testRunNotSupported() throws Exception {
|
||||
try {
|
||||
job.execute(null);
|
||||
} catch (UnsupportedOperationException e) {
|
||||
// expected
|
||||
String message = e.getMessage();
|
||||
assertTrue("Message should contain JobSupport: "+message, message.contains("JobSupport"));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.job;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import org.springframework.batch.execution.step.StepSupport;
|
||||
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class AbstractJobTests extends TestCase {
|
||||
|
||||
JobSupport job = new JobSupport("job");
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#JobConfiguration()}.
|
||||
*/
|
||||
public void testJobConfiguration() {
|
||||
job = new JobSupport();
|
||||
assertNull(job.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#setBeanName(java.lang.String)}.
|
||||
*/
|
||||
public void testSetBeanName() {
|
||||
job.setBeanName("foo");
|
||||
assertEquals("job", job.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#setBeanName(java.lang.String)}.
|
||||
*/
|
||||
public void testSetBeanNameWithNullName() {
|
||||
job = new JobSupport(null);
|
||||
assertEquals(null, job.getName());
|
||||
job.setBeanName("foo");
|
||||
assertEquals("foo", job.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#setStepNames(java.util.List)}.
|
||||
*/
|
||||
public void testSetSteps() {
|
||||
job.setSteps(Collections.singletonList(new StepSupport("step")));
|
||||
assertEquals(1, job.getSteps().size());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#addStepName(org.springframework.batch.core.configuration.StepConfiguration)}.
|
||||
*/
|
||||
public void testAddStep() {
|
||||
job.addStep(new StepSupport("step"));
|
||||
assertEquals(1, job.getSteps().size());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#setStartLimit(int)}.
|
||||
*/
|
||||
public void testSetStartLimit() {
|
||||
assertEquals(Integer.MAX_VALUE, job.getStartLimit());
|
||||
job.setStartLimit(10);
|
||||
assertEquals(10, job.getStartLimit());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for
|
||||
* {@link org.springframework.batch.execution.job.AbstractJob#setRestartable(boolean)}.
|
||||
*/
|
||||
public void testSetRestartable() {
|
||||
assertFalse(job.isRestartable());
|
||||
job.setRestartable(true);
|
||||
assertTrue(job.isRestartable());
|
||||
}
|
||||
|
||||
public void testToString() throws Exception {
|
||||
String value = job.toString();
|
||||
assertTrue("Should contain name: "+value, value.indexOf("name=")>=0);
|
||||
}
|
||||
|
||||
public void testRunNotSupported() throws Exception {
|
||||
try {
|
||||
job.execute(null);
|
||||
} catch (UnsupportedOperationException e) {
|
||||
// expected
|
||||
String message = e.getMessage();
|
||||
assertTrue("Message should contain JobSupport: "+message, message.contains("JobSupport"));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,90 +1,90 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.execution.launch.support.ExitCodeMapper;
|
||||
import org.springframework.batch.execution.launch.support.SimpleJvmExitCodeMapper;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
public class SimpleJvmExitCodeMapperTests extends TestCase {
|
||||
|
||||
private SimpleJvmExitCodeMapper ecm;
|
||||
private SimpleJvmExitCodeMapper ecm2;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
ecm = new SimpleJvmExitCodeMapper();
|
||||
Map ecmMap = new HashMap();
|
||||
ecmMap.put("MY_CUSTOM_CODE", new Integer(3));
|
||||
ecm.setMapping(ecmMap);
|
||||
|
||||
ecm2 = new SimpleJvmExitCodeMapper();
|
||||
Map ecm2Map = new HashMap();
|
||||
ecm2Map.put(ExitStatus.FINISHED.getExitCode(), new Integer(-1));
|
||||
ecm2Map.put(ExitStatus.FAILED.getExitCode(), new Integer(-2));
|
||||
ecm2Map.put(ExitCodeMapper.JOB_NOT_PROVIDED, new Integer(-3));
|
||||
ecm2Map.put(ExitCodeMapper.NO_SUCH_JOB, new Integer(-3));
|
||||
ecm2.setMapping(ecm2Map);
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
public void testGetExitCodeWithpPredefinedCodes() {
|
||||
assertEquals(
|
||||
ecm.getExitCode(ExitStatus.FINISHED.getExitCode()),
|
||||
ExitCodeMapper.JVM_EXITCODE_COMPLETED);
|
||||
assertEquals(
|
||||
ecm.getExitCode(ExitStatus.FAILED.getExitCode()),
|
||||
ExitCodeMapper.JVM_EXITCODE_GENERIC_ERROR);
|
||||
assertEquals(
|
||||
ecm.getExitCode(ExitCodeMapper.JOB_NOT_PROVIDED),
|
||||
ExitCodeMapper.JVM_EXITCODE_JOB_ERROR);
|
||||
assertEquals(
|
||||
ecm.getExitCode(ExitCodeMapper.NO_SUCH_JOB),
|
||||
ExitCodeMapper.JVM_EXITCODE_JOB_ERROR);
|
||||
}
|
||||
|
||||
public void testGetExitCodeWithPredefinedCodesOverridden() {
|
||||
System.out.println(ecm2.getExitCode(ExitStatus.FINISHED.getExitCode()));
|
||||
assertEquals(
|
||||
ecm2.getExitCode(ExitStatus.FINISHED.getExitCode()), -1);
|
||||
assertEquals(
|
||||
ecm2.getExitCode(ExitStatus.FAILED.getExitCode()), -2);
|
||||
assertEquals(
|
||||
ecm2.getExitCode(ExitCodeMapper.JOB_NOT_PROVIDED), -3);
|
||||
assertEquals(
|
||||
ecm2.getExitCode(ExitCodeMapper.NO_SUCH_JOB), -3);
|
||||
}
|
||||
|
||||
public void testGetExitCodeWithCustomCode() {
|
||||
assertEquals(ecm.getExitCode("MY_CUSTOM_CODE"),3);
|
||||
}
|
||||
|
||||
public void testGetExitCodeWithDefaultCode() {
|
||||
assertEquals(
|
||||
ecm.getExitCode("UNDEFINED_CUSTOM_CODE"),
|
||||
ExitCodeMapper.JVM_EXITCODE_GENERIC_ERROR);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.execution.launch.support.ExitCodeMapper;
|
||||
import org.springframework.batch.execution.launch.support.SimpleJvmExitCodeMapper;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
public class SimpleJvmExitCodeMapperTests extends TestCase {
|
||||
|
||||
private SimpleJvmExitCodeMapper ecm;
|
||||
private SimpleJvmExitCodeMapper ecm2;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
ecm = new SimpleJvmExitCodeMapper();
|
||||
Map ecmMap = new HashMap();
|
||||
ecmMap.put("MY_CUSTOM_CODE", new Integer(3));
|
||||
ecm.setMapping(ecmMap);
|
||||
|
||||
ecm2 = new SimpleJvmExitCodeMapper();
|
||||
Map ecm2Map = new HashMap();
|
||||
ecm2Map.put(ExitStatus.FINISHED.getExitCode(), new Integer(-1));
|
||||
ecm2Map.put(ExitStatus.FAILED.getExitCode(), new Integer(-2));
|
||||
ecm2Map.put(ExitCodeMapper.JOB_NOT_PROVIDED, new Integer(-3));
|
||||
ecm2Map.put(ExitCodeMapper.NO_SUCH_JOB, new Integer(-3));
|
||||
ecm2.setMapping(ecm2Map);
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
public void testGetExitCodeWithpPredefinedCodes() {
|
||||
assertEquals(
|
||||
ecm.getExitCode(ExitStatus.FINISHED.getExitCode()),
|
||||
ExitCodeMapper.JVM_EXITCODE_COMPLETED);
|
||||
assertEquals(
|
||||
ecm.getExitCode(ExitStatus.FAILED.getExitCode()),
|
||||
ExitCodeMapper.JVM_EXITCODE_GENERIC_ERROR);
|
||||
assertEquals(
|
||||
ecm.getExitCode(ExitCodeMapper.JOB_NOT_PROVIDED),
|
||||
ExitCodeMapper.JVM_EXITCODE_JOB_ERROR);
|
||||
assertEquals(
|
||||
ecm.getExitCode(ExitCodeMapper.NO_SUCH_JOB),
|
||||
ExitCodeMapper.JVM_EXITCODE_JOB_ERROR);
|
||||
}
|
||||
|
||||
public void testGetExitCodeWithPredefinedCodesOverridden() {
|
||||
System.out.println(ecm2.getExitCode(ExitStatus.FINISHED.getExitCode()));
|
||||
assertEquals(
|
||||
ecm2.getExitCode(ExitStatus.FINISHED.getExitCode()), -1);
|
||||
assertEquals(
|
||||
ecm2.getExitCode(ExitStatus.FAILED.getExitCode()), -2);
|
||||
assertEquals(
|
||||
ecm2.getExitCode(ExitCodeMapper.JOB_NOT_PROVIDED), -3);
|
||||
assertEquals(
|
||||
ecm2.getExitCode(ExitCodeMapper.NO_SUCH_JOB), -3);
|
||||
}
|
||||
|
||||
public void testGetExitCodeWithCustomCode() {
|
||||
assertEquals(ecm.getExitCode("MY_CUSTOM_CODE"),3);
|
||||
}
|
||||
|
||||
public void testGetExitCodeWithDefaultCode() {
|
||||
assertEquals(
|
||||
ecm.getExitCode("UNDEFINED_CUSTOM_CODE"),
|
||||
ExitCodeMapper.JVM_EXITCODE_GENERIC_ERROR);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,54 +1,54 @@
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
|
||||
import org.springframework.batch.execution.launch.JobLauncher;
|
||||
|
||||
/**
|
||||
* Mock Job Launcher. Normally, something like EasyMock would
|
||||
* be used to mock an interface, however, because of the nature
|
||||
* of launching a batch job from the command line, the mocked
|
||||
* class cannot be injected.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
*
|
||||
*/
|
||||
public class StubJobLauncher implements JobLauncher {
|
||||
|
||||
public static final int RUN_NO_ARGS = 0;
|
||||
public static final int RUN_JOB_NAME = 1;
|
||||
public static final int RUN_JOB_IDENTIFIER =2 ;
|
||||
|
||||
private int lastRunCalled = RUN_NO_ARGS;
|
||||
private JobExecution returnValue = null;
|
||||
|
||||
private boolean isRunning = false;
|
||||
|
||||
public boolean isRunning() {
|
||||
return isRunning;
|
||||
}
|
||||
|
||||
public JobExecution run(Job job, JobParameters jobParameters)
|
||||
throws JobExecutionAlreadyRunningException {
|
||||
lastRunCalled = RUN_JOB_IDENTIFIER;
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
|
||||
}
|
||||
|
||||
public void setReturnValue(JobExecution returnValue){
|
||||
this.returnValue = returnValue;
|
||||
}
|
||||
|
||||
public void setIsRunning(boolean isRunning){
|
||||
this.isRunning = isRunning;
|
||||
}
|
||||
|
||||
public int getLastRunCalled(){
|
||||
return lastRunCalled;
|
||||
}
|
||||
}
|
||||
package org.springframework.batch.execution.launch.support;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
|
||||
import org.springframework.batch.execution.launch.JobLauncher;
|
||||
|
||||
/**
|
||||
* Mock Job Launcher. Normally, something like EasyMock would
|
||||
* be used to mock an interface, however, because of the nature
|
||||
* of launching a batch job from the command line, the mocked
|
||||
* class cannot be injected.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
*
|
||||
*/
|
||||
public class StubJobLauncher implements JobLauncher {
|
||||
|
||||
public static final int RUN_NO_ARGS = 0;
|
||||
public static final int RUN_JOB_NAME = 1;
|
||||
public static final int RUN_JOB_IDENTIFIER =2 ;
|
||||
|
||||
private int lastRunCalled = RUN_NO_ARGS;
|
||||
private JobExecution returnValue = null;
|
||||
|
||||
private boolean isRunning = false;
|
||||
|
||||
public boolean isRunning() {
|
||||
return isRunning;
|
||||
}
|
||||
|
||||
public JobExecution run(Job job, JobParameters jobParameters)
|
||||
throws JobExecutionAlreadyRunningException {
|
||||
lastRunCalled = RUN_JOB_IDENTIFIER;
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
|
||||
}
|
||||
|
||||
public void setReturnValue(JobExecution returnValue){
|
||||
this.returnValue = returnValue;
|
||||
}
|
||||
|
||||
public void setIsRunning(boolean isRunning){
|
||||
this.isRunning = isRunning;
|
||||
}
|
||||
|
||||
public int getLastRunCalled(){
|
||||
return lastRunCalled;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,224 +1,224 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.Date;
|
||||
import org.springframework.batch.core.domain.BatchStatus;
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.core.runtime.ExitStatusExceptionClassifier;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
import org.springframework.batch.execution.step.StepSupport;
|
||||
import org.springframework.batch.item.ExecutionContext;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
import org.springframework.dao.OptimisticLockingFailureException;
|
||||
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
/**
|
||||
* Tests for step persistence (StepInstanceDao and StepExecutionDao). Because it is very reasonable to assume that there is a
|
||||
* foreign key constraint on the JobId of a step, the JobDao is used to create
|
||||
* jobs, to have an id for creating steps.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
*/
|
||||
public abstract class AbstractStepDaoTests extends AbstractTransactionalDataSourceSpringContextTests {
|
||||
|
||||
protected JobInstanceDao jobInstanceDao;
|
||||
|
||||
protected StepExecutionDao stepExecutionDao;
|
||||
|
||||
protected JobExecutionDao jobExecutionDao;
|
||||
|
||||
protected JobInstance jobInstance;
|
||||
|
||||
protected Step step1;
|
||||
|
||||
protected Step step2;
|
||||
|
||||
protected StepExecution stepExecution;
|
||||
|
||||
protected JobExecution jobExecution;
|
||||
|
||||
protected JobParameters jobParameters = new JobParameters();
|
||||
|
||||
protected ExecutionContext executionContext;
|
||||
|
||||
public void setJobInstanceDao(JobInstanceDao jobInstanceDao) {
|
||||
this.jobInstanceDao = jobInstanceDao;
|
||||
}
|
||||
|
||||
public void setStepExecutionDao(StepExecutionDao stepExecutionDao) {
|
||||
this.stepExecutionDao = stepExecutionDao;
|
||||
}
|
||||
|
||||
public void setJobExecutionDao(JobExecutionDao jobExecutionDao) {
|
||||
this.jobExecutionDao = jobExecutionDao;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.test.AbstractSingleSpringContextTests#getConfigLocations()
|
||||
*/
|
||||
protected String[] getConfigLocations() {
|
||||
return new String[] { ClassUtils.addResourcePathToPackagePath(getClass(), "sql-dao-test.xml") };
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.test.AbstractTransactionalSpringContextTests#onSetUpInTransaction()
|
||||
*/
|
||||
protected void onSetUpInTransaction() throws Exception {
|
||||
Job job = new JobSupport("TestJob");
|
||||
jobInstance = jobInstanceDao.createJobInstance(job, jobParameters);
|
||||
step1 = new StepSupport("TestStep1");
|
||||
step2 = new StepSupport("TestStep2");
|
||||
jobExecution = new JobExecution(jobInstance);
|
||||
jobExecutionDao.saveJobExecution(jobExecution);
|
||||
|
||||
stepExecution = new StepExecution(step1, jobExecution, new Long(1));
|
||||
stepExecution.setStatus(BatchStatus.STARTED);
|
||||
stepExecution.setStartTime(new Date(System.currentTimeMillis()));
|
||||
stepExecutionDao.saveStepExecution(stepExecution);
|
||||
|
||||
executionContext = new ExecutionContext();
|
||||
executionContext.putString("1", "testString1");
|
||||
executionContext.putString("2", "testString2");
|
||||
executionContext.putLong("3", 3);
|
||||
executionContext.putDouble("4", 4.4);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void testVersionIsNotNullForStepExecution() throws Exception {
|
||||
int version = jdbcTemplate.queryForInt("select version from BATCH_STEP_EXECUTION where STEP_EXECUTION_ID="
|
||||
+ stepExecution.getId());
|
||||
assertEquals(0, version);
|
||||
}
|
||||
|
||||
public void testUpdateStepWithExecutionContext() {
|
||||
stepExecution.setExecutionContext(executionContext);
|
||||
stepExecutionDao.saveOrUpdateExecutionContext(stepExecution);
|
||||
ExecutionContext tempAttributes = stepExecutionDao.findExecutionContext(stepExecution);
|
||||
assertEquals(executionContext, tempAttributes);
|
||||
}
|
||||
|
||||
public void testSaveStepExecution() {
|
||||
StepExecution execution = new StepExecution(step2, jobExecution, null);
|
||||
execution.setStatus(BatchStatus.STARTED);
|
||||
execution.setStartTime(new Date(System.currentTimeMillis()));
|
||||
execution.setExitStatus(new ExitStatus(false, ExitStatusExceptionClassifier.FATAL_EXCEPTION,
|
||||
"java.lang.Exception"));
|
||||
stepExecutionDao.saveStepExecution(execution);
|
||||
StepExecution retrievedExecution = stepExecutionDao.getStepExecution(jobExecution, step2);
|
||||
assertNotNull(retrievedExecution);
|
||||
assertEquals(execution, retrievedExecution);
|
||||
assertEquals(execution.getExitStatus(), retrievedExecution.getExitStatus());
|
||||
}
|
||||
|
||||
public void testSaveStepExecutionAndExecutionContext() {
|
||||
StepExecution execution = new StepExecution(step2, jobExecution, null);
|
||||
execution.setStatus(BatchStatus.STARTED);
|
||||
execution.setStartTime(new Date(System.currentTimeMillis()));
|
||||
execution.setExecutionContext(executionContext);
|
||||
execution.setExitStatus(new ExitStatus(false, ExitStatusExceptionClassifier.FATAL_EXCEPTION,
|
||||
"java.lang.Exception"));
|
||||
stepExecutionDao.saveStepExecution(execution);
|
||||
stepExecutionDao.saveOrUpdateExecutionContext(execution);
|
||||
StepExecution retrievedExecution = stepExecutionDao.getStepExecution(jobExecution, step2);
|
||||
assertNotNull(retrievedExecution);
|
||||
assertEquals(execution, retrievedExecution);
|
||||
assertEquals(execution.getExecutionContext().getString("1"), retrievedExecution.getExecutionContext().getString("1"));
|
||||
assertEquals(execution.getExecutionContext().getLong("3"), retrievedExecution.getExecutionContext().getLong("3"));
|
||||
assertEquals(execution.getExitStatus(), retrievedExecution.getExitStatus());
|
||||
}
|
||||
|
||||
public void testUpdateStepExecution() {
|
||||
|
||||
stepExecution.setStatus(BatchStatus.COMPLETED);
|
||||
stepExecution.setEndTime(new Date(System.currentTimeMillis()));
|
||||
stepExecution.setCommitCount(5);
|
||||
stepExecution.setTaskCount(5);
|
||||
stepExecution.setExecutionContext(new ExecutionContext());
|
||||
stepExecution.setExitStatus(new ExitStatus(false, ExitStatusExceptionClassifier.FATAL_EXCEPTION,
|
||||
"java.lang.Exception"));
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
StepExecution retrievedExecution = stepExecutionDao.getStepExecution(jobExecution, step1);
|
||||
assertNotNull(retrievedExecution);
|
||||
assertEquals(stepExecution, retrievedExecution);
|
||||
assertEquals(stepExecution.getExitStatus(), retrievedExecution.getExitStatus());
|
||||
}
|
||||
|
||||
public void testUpdateStepExecutionWithNullId() {
|
||||
StepExecution stepExecution = new StepExecution(new StepSupport("testStep"), null, null);
|
||||
try {
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
fail("Expected IllegalArgumentException");
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
public void testUpdateStepExecutionVersion() throws Exception {
|
||||
int before = stepExecution.getVersion().intValue();
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
int after = stepExecution.getVersion().intValue();
|
||||
assertEquals("StepExecution version not updated", before + 1, after);
|
||||
}
|
||||
|
||||
public void testUpdateStepExecutionOptimisticLocking() throws Exception {
|
||||
stepExecution.incrementVersion(); // not really allowed outside dao
|
||||
// code
|
||||
try {
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
fail("Expected OptimisticLockingFailureException");
|
||||
}
|
||||
catch (OptimisticLockingFailureException e) {
|
||||
// expected
|
||||
assertTrue("Exception message should contain step execution id: " + e.getMessage(), e.getMessage().indexOf(
|
||||
"" + stepExecution.getId()) >= 0);
|
||||
assertTrue("Exception message should contain step execution version: " + e.getMessage(), e.getMessage()
|
||||
.indexOf("" + stepExecution.getVersion()) >= 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void testSaveExecutionContext(){
|
||||
|
||||
stepExecution.setExecutionContext(executionContext);
|
||||
stepExecutionDao.saveOrUpdateExecutionContext(stepExecution);
|
||||
ExecutionContext attributes = stepExecutionDao.findExecutionContext(stepExecution);
|
||||
assertEquals(executionContext, attributes);
|
||||
executionContext.putString("newString", "newString");
|
||||
executionContext.putLong("newLong", 1);
|
||||
executionContext.putDouble("newDouble", 2.5);
|
||||
executionContext.put("newSerializable", "serializableValue");
|
||||
stepExecutionDao.saveOrUpdateExecutionContext(stepExecution);
|
||||
attributes = stepExecutionDao.findExecutionContext(stepExecution);
|
||||
assertEquals(executionContext, attributes);
|
||||
}
|
||||
|
||||
public void testGetStepExecution() {
|
||||
assertEquals(stepExecution, stepExecutionDao.getStepExecution(jobExecution, step1));
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.Date;
|
||||
import org.springframework.batch.core.domain.BatchStatus;
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.core.runtime.ExitStatusExceptionClassifier;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
import org.springframework.batch.execution.step.StepSupport;
|
||||
import org.springframework.batch.item.ExecutionContext;
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
import org.springframework.dao.OptimisticLockingFailureException;
|
||||
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
/**
|
||||
* Tests for step persistence (StepInstanceDao and StepExecutionDao). Because it is very reasonable to assume that there is a
|
||||
* foreign key constraint on the JobId of a step, the JobDao is used to create
|
||||
* jobs, to have an id for creating steps.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
* @author Dave Syer
|
||||
*/
|
||||
public abstract class AbstractStepDaoTests extends AbstractTransactionalDataSourceSpringContextTests {
|
||||
|
||||
protected JobInstanceDao jobInstanceDao;
|
||||
|
||||
protected StepExecutionDao stepExecutionDao;
|
||||
|
||||
protected JobExecutionDao jobExecutionDao;
|
||||
|
||||
protected JobInstance jobInstance;
|
||||
|
||||
protected Step step1;
|
||||
|
||||
protected Step step2;
|
||||
|
||||
protected StepExecution stepExecution;
|
||||
|
||||
protected JobExecution jobExecution;
|
||||
|
||||
protected JobParameters jobParameters = new JobParameters();
|
||||
|
||||
protected ExecutionContext executionContext;
|
||||
|
||||
public void setJobInstanceDao(JobInstanceDao jobInstanceDao) {
|
||||
this.jobInstanceDao = jobInstanceDao;
|
||||
}
|
||||
|
||||
public void setStepExecutionDao(StepExecutionDao stepExecutionDao) {
|
||||
this.stepExecutionDao = stepExecutionDao;
|
||||
}
|
||||
|
||||
public void setJobExecutionDao(JobExecutionDao jobExecutionDao) {
|
||||
this.jobExecutionDao = jobExecutionDao;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.test.AbstractSingleSpringContextTests#getConfigLocations()
|
||||
*/
|
||||
protected String[] getConfigLocations() {
|
||||
return new String[] { ClassUtils.addResourcePathToPackagePath(getClass(), "sql-dao-test.xml") };
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.test.AbstractTransactionalSpringContextTests#onSetUpInTransaction()
|
||||
*/
|
||||
protected void onSetUpInTransaction() throws Exception {
|
||||
Job job = new JobSupport("TestJob");
|
||||
jobInstance = jobInstanceDao.createJobInstance(job, jobParameters);
|
||||
step1 = new StepSupport("TestStep1");
|
||||
step2 = new StepSupport("TestStep2");
|
||||
jobExecution = new JobExecution(jobInstance);
|
||||
jobExecutionDao.saveJobExecution(jobExecution);
|
||||
|
||||
stepExecution = new StepExecution(step1, jobExecution, new Long(1));
|
||||
stepExecution.setStatus(BatchStatus.STARTED);
|
||||
stepExecution.setStartTime(new Date(System.currentTimeMillis()));
|
||||
stepExecutionDao.saveStepExecution(stepExecution);
|
||||
|
||||
executionContext = new ExecutionContext();
|
||||
executionContext.putString("1", "testString1");
|
||||
executionContext.putString("2", "testString2");
|
||||
executionContext.putLong("3", 3);
|
||||
executionContext.putDouble("4", 4.4);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void testVersionIsNotNullForStepExecution() throws Exception {
|
||||
int version = jdbcTemplate.queryForInt("select version from BATCH_STEP_EXECUTION where STEP_EXECUTION_ID="
|
||||
+ stepExecution.getId());
|
||||
assertEquals(0, version);
|
||||
}
|
||||
|
||||
public void testUpdateStepWithExecutionContext() {
|
||||
stepExecution.setExecutionContext(executionContext);
|
||||
stepExecutionDao.saveOrUpdateExecutionContext(stepExecution);
|
||||
ExecutionContext tempAttributes = stepExecutionDao.findExecutionContext(stepExecution);
|
||||
assertEquals(executionContext, tempAttributes);
|
||||
}
|
||||
|
||||
public void testSaveStepExecution() {
|
||||
StepExecution execution = new StepExecution(step2, jobExecution, null);
|
||||
execution.setStatus(BatchStatus.STARTED);
|
||||
execution.setStartTime(new Date(System.currentTimeMillis()));
|
||||
execution.setExitStatus(new ExitStatus(false, ExitStatusExceptionClassifier.FATAL_EXCEPTION,
|
||||
"java.lang.Exception"));
|
||||
stepExecutionDao.saveStepExecution(execution);
|
||||
StepExecution retrievedExecution = stepExecutionDao.getStepExecution(jobExecution, step2);
|
||||
assertNotNull(retrievedExecution);
|
||||
assertEquals(execution, retrievedExecution);
|
||||
assertEquals(execution.getExitStatus(), retrievedExecution.getExitStatus());
|
||||
}
|
||||
|
||||
public void testSaveStepExecutionAndExecutionContext() {
|
||||
StepExecution execution = new StepExecution(step2, jobExecution, null);
|
||||
execution.setStatus(BatchStatus.STARTED);
|
||||
execution.setStartTime(new Date(System.currentTimeMillis()));
|
||||
execution.setExecutionContext(executionContext);
|
||||
execution.setExitStatus(new ExitStatus(false, ExitStatusExceptionClassifier.FATAL_EXCEPTION,
|
||||
"java.lang.Exception"));
|
||||
stepExecutionDao.saveStepExecution(execution);
|
||||
stepExecutionDao.saveOrUpdateExecutionContext(execution);
|
||||
StepExecution retrievedExecution = stepExecutionDao.getStepExecution(jobExecution, step2);
|
||||
assertNotNull(retrievedExecution);
|
||||
assertEquals(execution, retrievedExecution);
|
||||
assertEquals(execution.getExecutionContext().getString("1"), retrievedExecution.getExecutionContext().getString("1"));
|
||||
assertEquals(execution.getExecutionContext().getLong("3"), retrievedExecution.getExecutionContext().getLong("3"));
|
||||
assertEquals(execution.getExitStatus(), retrievedExecution.getExitStatus());
|
||||
}
|
||||
|
||||
public void testUpdateStepExecution() {
|
||||
|
||||
stepExecution.setStatus(BatchStatus.COMPLETED);
|
||||
stepExecution.setEndTime(new Date(System.currentTimeMillis()));
|
||||
stepExecution.setCommitCount(5);
|
||||
stepExecution.setTaskCount(5);
|
||||
stepExecution.setExecutionContext(new ExecutionContext());
|
||||
stepExecution.setExitStatus(new ExitStatus(false, ExitStatusExceptionClassifier.FATAL_EXCEPTION,
|
||||
"java.lang.Exception"));
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
StepExecution retrievedExecution = stepExecutionDao.getStepExecution(jobExecution, step1);
|
||||
assertNotNull(retrievedExecution);
|
||||
assertEquals(stepExecution, retrievedExecution);
|
||||
assertEquals(stepExecution.getExitStatus(), retrievedExecution.getExitStatus());
|
||||
}
|
||||
|
||||
public void testUpdateStepExecutionWithNullId() {
|
||||
StepExecution stepExecution = new StepExecution(new StepSupport("testStep"), null, null);
|
||||
try {
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
fail("Expected IllegalArgumentException");
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
public void testUpdateStepExecutionVersion() throws Exception {
|
||||
int before = stepExecution.getVersion().intValue();
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
int after = stepExecution.getVersion().intValue();
|
||||
assertEquals("StepExecution version not updated", before + 1, after);
|
||||
}
|
||||
|
||||
public void testUpdateStepExecutionOptimisticLocking() throws Exception {
|
||||
stepExecution.incrementVersion(); // not really allowed outside dao
|
||||
// code
|
||||
try {
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
fail("Expected OptimisticLockingFailureException");
|
||||
}
|
||||
catch (OptimisticLockingFailureException e) {
|
||||
// expected
|
||||
assertTrue("Exception message should contain step execution id: " + e.getMessage(), e.getMessage().indexOf(
|
||||
"" + stepExecution.getId()) >= 0);
|
||||
assertTrue("Exception message should contain step execution version: " + e.getMessage(), e.getMessage()
|
||||
.indexOf("" + stepExecution.getVersion()) >= 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void testSaveExecutionContext(){
|
||||
|
||||
stepExecution.setExecutionContext(executionContext);
|
||||
stepExecutionDao.saveOrUpdateExecutionContext(stepExecution);
|
||||
ExecutionContext attributes = stepExecutionDao.findExecutionContext(stepExecution);
|
||||
assertEquals(executionContext, attributes);
|
||||
executionContext.putString("newString", "newString");
|
||||
executionContext.putLong("newLong", 1);
|
||||
executionContext.putDouble("newDouble", 2.5);
|
||||
executionContext.put("newSerializable", "serializableValue");
|
||||
stepExecutionDao.saveOrUpdateExecutionContext(stepExecution);
|
||||
attributes = stepExecutionDao.findExecutionContext(stepExecution);
|
||||
assertEquals(executionContext, attributes);
|
||||
}
|
||||
|
||||
public void testGetStepExecution() {
|
||||
assertEquals(stepExecution, stepExecutionDao.getStepExecution(jobExecution, step1));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,82 +1,82 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JdbcJobDaoQueryTests extends TestCase {
|
||||
|
||||
JdbcJobExecutionDao jobExecutionDao;
|
||||
|
||||
List list = new ArrayList();
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see junit.framework.TestCase#setUp()
|
||||
*/
|
||||
protected void setUp() throws Exception {
|
||||
|
||||
jobExecutionDao = new JdbcJobExecutionDao();
|
||||
jobExecutionDao.setJobExecutionIncrementer(new DataFieldMaxValueIncrementer() {
|
||||
|
||||
public int nextIntValue() throws DataAccessException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public long nextLongValue() throws DataAccessException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String nextStringValue() throws DataAccessException {
|
||||
return "bar";
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
public void testTablePrefix() throws Exception {
|
||||
jobExecutionDao.setTablePrefix("FOO_");
|
||||
jobExecutionDao.setJdbcTemplate(new JdbcTemplate() {
|
||||
public int update(String sql, Object[] args, int[] argTypes) throws DataAccessException {
|
||||
list.add(sql);
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
JobExecution jobExecution = new JobExecution(new JobInstance(new Long(11), new JobParameters(), new JobSupport(
|
||||
"testJob")));
|
||||
|
||||
jobExecutionDao.saveJobExecution(jobExecution);
|
||||
assertEquals(1, list.size());
|
||||
String query = (String) list.get(0);
|
||||
assertTrue("Query did not contain FOO_:" + query, query.indexOf("FOO_") >= 0);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JdbcJobDaoQueryTests extends TestCase {
|
||||
|
||||
JdbcJobExecutionDao jobExecutionDao;
|
||||
|
||||
List list = new ArrayList();
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see junit.framework.TestCase#setUp()
|
||||
*/
|
||||
protected void setUp() throws Exception {
|
||||
|
||||
jobExecutionDao = new JdbcJobExecutionDao();
|
||||
jobExecutionDao.setJobExecutionIncrementer(new DataFieldMaxValueIncrementer() {
|
||||
|
||||
public int nextIntValue() throws DataAccessException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public long nextLongValue() throws DataAccessException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String nextStringValue() throws DataAccessException {
|
||||
return "bar";
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
public void testTablePrefix() throws Exception {
|
||||
jobExecutionDao.setTablePrefix("FOO_");
|
||||
jobExecutionDao.setJdbcTemplate(new JdbcTemplate() {
|
||||
public int update(String sql, Object[] args, int[] argTypes) throws DataAccessException {
|
||||
list.add(sql);
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
JobExecution jobExecution = new JobExecution(new JobInstance(new Long(11), new JobParameters(), new JobSupport(
|
||||
"testJob")));
|
||||
|
||||
jobExecutionDao.saveJobExecution(jobExecution);
|
||||
assertEquals(1, list.size());
|
||||
String query = (String) list.get(0);
|
||||
assertTrue("Query did not contain FOO_:" + query, query.indexOf("FOO_") >= 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,32 +1,32 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
public class JdbcJobDaoTests extends AbstractJobDaoTests {
|
||||
|
||||
public static final String LONG_STRING = "A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String ";
|
||||
|
||||
protected void onSetUpBeforeTransaction() throws Exception {
|
||||
((JdbcJobInstanceDao) jobInstanceDao).setTablePrefix(AbstractJdbcBatchMetadataDao.DEFAULT_TABLE_PREFIX);
|
||||
((JdbcJobExecutionDao) jobExecutionDao).setTablePrefix(AbstractJdbcBatchMetadataDao.DEFAULT_TABLE_PREFIX);
|
||||
}
|
||||
|
||||
public void testUpdateJobExecutionWithLongExitCode() {
|
||||
|
||||
assertTrue(LONG_STRING.length() > 250);
|
||||
jobExecution.setExitStatus(ExitStatus.FINISHED
|
||||
.addExitDescription(LONG_STRING));
|
||||
jobExecutionDao.updateJobExecution(jobExecution);
|
||||
|
||||
List executions = jdbcTemplate.queryForList(
|
||||
"SELECT * FROM BATCH_JOB_EXECUTION where JOB_INSTANCE_ID=?",
|
||||
new Object[] { jobInstance.getId() });
|
||||
assertEquals(1, executions.size());
|
||||
assertEquals(LONG_STRING.substring(0, 250), ((Map) executions.get(0))
|
||||
.get("EXIT_MESSAGE"));
|
||||
}
|
||||
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
public class JdbcJobDaoTests extends AbstractJobDaoTests {
|
||||
|
||||
public static final String LONG_STRING = "A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String A very long String ";
|
||||
|
||||
protected void onSetUpBeforeTransaction() throws Exception {
|
||||
((JdbcJobInstanceDao) jobInstanceDao).setTablePrefix(AbstractJdbcBatchMetadataDao.DEFAULT_TABLE_PREFIX);
|
||||
((JdbcJobExecutionDao) jobExecutionDao).setTablePrefix(AbstractJdbcBatchMetadataDao.DEFAULT_TABLE_PREFIX);
|
||||
}
|
||||
|
||||
public void testUpdateJobExecutionWithLongExitCode() {
|
||||
|
||||
assertTrue(LONG_STRING.length() > 250);
|
||||
jobExecution.setExitStatus(ExitStatus.FINISHED
|
||||
.addExitDescription(LONG_STRING));
|
||||
jobExecutionDao.updateJobExecution(jobExecution);
|
||||
|
||||
List executions = jdbcTemplate.queryForList(
|
||||
"SELECT * FROM BATCH_JOB_EXECUTION where JOB_INSTANCE_ID=?",
|
||||
new Object[] { jobInstance.getId() });
|
||||
assertEquals(1, executions.size());
|
||||
assertEquals(LONG_STRING.substring(0, 250), ((Map) executions.get(0))
|
||||
.get("EXIT_MESSAGE"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,111 +1,111 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.easymock.MockControl;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
import org.springframework.batch.execution.step.StepSupport;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
|
||||
|
||||
/**
|
||||
* Unit Test of SqlStepDao that only tests prefix matching. A
|
||||
* separate test is needed because all other tests hit hsql,
|
||||
* while this test needs to mock JdbcTemplate to analyze the
|
||||
* Sql passed in.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
*
|
||||
*/
|
||||
public class JdbcStepDaoPrefixTests extends TestCase {
|
||||
|
||||
private JdbcStepExecutionDao stepExecutionDao;
|
||||
|
||||
MockJdbcTemplate jdbcTemplate = new MockJdbcTemplate();
|
||||
|
||||
JobInstance job = new JobInstance(new Long(1), new JobParameters(), new JobSupport("testJob"));
|
||||
Step step = new StepSupport("foo");
|
||||
StepExecution stepExecution = new StepExecution(step, new JobExecution(job), null);
|
||||
|
||||
MockControl stepExecutionIncrementerControl = MockControl.createControl(DataFieldMaxValueIncrementer.class);
|
||||
DataFieldMaxValueIncrementer stepExecutionIncrementer;
|
||||
MockControl stepIncrementerControl = MockControl.createControl(DataFieldMaxValueIncrementer.class);
|
||||
DataFieldMaxValueIncrementer stepIncrementer;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
|
||||
stepExecutionDao = new JdbcStepExecutionDao();
|
||||
stepExecutionIncrementer = (DataFieldMaxValueIncrementer)stepExecutionIncrementerControl.getMock();
|
||||
stepIncrementer = (DataFieldMaxValueIncrementer)stepIncrementerControl.getMock();
|
||||
|
||||
stepExecutionDao.setJdbcTemplate(jdbcTemplate);
|
||||
stepExecutionDao.setStepExecutionIncrementer(stepExecutionIncrementer);
|
||||
stepExecution.setId(new Long(1));
|
||||
stepExecution.incrementVersion();
|
||||
|
||||
}
|
||||
|
||||
public void testModifiedUpdateStepExecution(){
|
||||
stepExecutionDao.setTablePrefix("FOO_");
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
assertTrue(jdbcTemplate.getSqlStatement().indexOf("FOO_STEP_EXECUTION") != -1);
|
||||
}
|
||||
|
||||
public void testModifiedSaveStepExecution(){
|
||||
stepExecutionDao.setTablePrefix("FOO_");
|
||||
stepExecutionIncrementer.nextLongValue();
|
||||
stepExecutionIncrementerControl.setReturnValue(1);
|
||||
stepExecutionIncrementerControl.replay();
|
||||
stepExecutionDao.saveStepExecution(stepExecution);
|
||||
assertTrue(jdbcTemplate.getSqlStatement().indexOf("FOO_STEP_EXECUTION") != -1);
|
||||
}
|
||||
|
||||
public void testDefaultSaveStepExecution(){
|
||||
stepExecutionIncrementer.nextLongValue();
|
||||
stepExecutionIncrementerControl.setReturnValue(1);
|
||||
stepExecutionIncrementerControl.replay();
|
||||
stepExecutionDao.saveStepExecution(stepExecution);
|
||||
assertTrue(jdbcTemplate.getSqlStatement().indexOf("BATCH_STEP_EXECUTION") != -1);
|
||||
}
|
||||
|
||||
public void testDefaultUpdateStepExecution(){
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
assertTrue(jdbcTemplate.getSqlStatement().indexOf("BATCH_STEP_EXECUTION") != -1);
|
||||
}
|
||||
|
||||
private class MockJdbcTemplate extends JdbcTemplate {
|
||||
|
||||
private String sql;
|
||||
|
||||
public int update(String sql, Object[] args) throws DataAccessException {
|
||||
this.sql = sql;
|
||||
return 1;
|
||||
}
|
||||
|
||||
public int update(String sql, Object[] args, int[] argTypes) throws DataAccessException {
|
||||
this.sql = sql;
|
||||
return 1;
|
||||
}
|
||||
|
||||
public List query(String sql, Object[] args, RowMapper rowMapper) throws DataAccessException {
|
||||
this.sql = sql;
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getSqlStatement() {
|
||||
return sql;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.easymock.MockControl;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
import org.springframework.batch.execution.step.StepSupport;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
|
||||
|
||||
/**
|
||||
* Unit Test of SqlStepDao that only tests prefix matching. A
|
||||
* separate test is needed because all other tests hit hsql,
|
||||
* while this test needs to mock JdbcTemplate to analyze the
|
||||
* Sql passed in.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
*
|
||||
*/
|
||||
public class JdbcStepDaoPrefixTests extends TestCase {
|
||||
|
||||
private JdbcStepExecutionDao stepExecutionDao;
|
||||
|
||||
MockJdbcTemplate jdbcTemplate = new MockJdbcTemplate();
|
||||
|
||||
JobInstance job = new JobInstance(new Long(1), new JobParameters(), new JobSupport("testJob"));
|
||||
Step step = new StepSupport("foo");
|
||||
StepExecution stepExecution = new StepExecution(step, new JobExecution(job), null);
|
||||
|
||||
MockControl stepExecutionIncrementerControl = MockControl.createControl(DataFieldMaxValueIncrementer.class);
|
||||
DataFieldMaxValueIncrementer stepExecutionIncrementer;
|
||||
MockControl stepIncrementerControl = MockControl.createControl(DataFieldMaxValueIncrementer.class);
|
||||
DataFieldMaxValueIncrementer stepIncrementer;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
|
||||
stepExecutionDao = new JdbcStepExecutionDao();
|
||||
stepExecutionIncrementer = (DataFieldMaxValueIncrementer)stepExecutionIncrementerControl.getMock();
|
||||
stepIncrementer = (DataFieldMaxValueIncrementer)stepIncrementerControl.getMock();
|
||||
|
||||
stepExecutionDao.setJdbcTemplate(jdbcTemplate);
|
||||
stepExecutionDao.setStepExecutionIncrementer(stepExecutionIncrementer);
|
||||
stepExecution.setId(new Long(1));
|
||||
stepExecution.incrementVersion();
|
||||
|
||||
}
|
||||
|
||||
public void testModifiedUpdateStepExecution(){
|
||||
stepExecutionDao.setTablePrefix("FOO_");
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
assertTrue(jdbcTemplate.getSqlStatement().indexOf("FOO_STEP_EXECUTION") != -1);
|
||||
}
|
||||
|
||||
public void testModifiedSaveStepExecution(){
|
||||
stepExecutionDao.setTablePrefix("FOO_");
|
||||
stepExecutionIncrementer.nextLongValue();
|
||||
stepExecutionIncrementerControl.setReturnValue(1);
|
||||
stepExecutionIncrementerControl.replay();
|
||||
stepExecutionDao.saveStepExecution(stepExecution);
|
||||
assertTrue(jdbcTemplate.getSqlStatement().indexOf("FOO_STEP_EXECUTION") != -1);
|
||||
}
|
||||
|
||||
public void testDefaultSaveStepExecution(){
|
||||
stepExecutionIncrementer.nextLongValue();
|
||||
stepExecutionIncrementerControl.setReturnValue(1);
|
||||
stepExecutionIncrementerControl.replay();
|
||||
stepExecutionDao.saveStepExecution(stepExecution);
|
||||
assertTrue(jdbcTemplate.getSqlStatement().indexOf("BATCH_STEP_EXECUTION") != -1);
|
||||
}
|
||||
|
||||
public void testDefaultUpdateStepExecution(){
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
assertTrue(jdbcTemplate.getSqlStatement().indexOf("BATCH_STEP_EXECUTION") != -1);
|
||||
}
|
||||
|
||||
private class MockJdbcTemplate extends JdbcTemplate {
|
||||
|
||||
private String sql;
|
||||
|
||||
public int update(String sql, Object[] args) throws DataAccessException {
|
||||
this.sql = sql;
|
||||
return 1;
|
||||
}
|
||||
|
||||
public int update(String sql, Object[] args, int[] argTypes) throws DataAccessException {
|
||||
this.sql = sql;
|
||||
return 1;
|
||||
}
|
||||
|
||||
public List query(String sql, Object[] args, RowMapper rowMapper) throws DataAccessException {
|
||||
this.sql = sql;
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getSqlStatement() {
|
||||
return sql;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
public class JdbcStepDaoTests extends AbstractStepDaoTests {
|
||||
|
||||
private static final String LONG_STRING = JdbcJobDaoTests.LONG_STRING;
|
||||
|
||||
protected void onSetUpBeforeTransaction() throws Exception {
|
||||
((JdbcStepExecutionDao) stepExecutionDao).setTablePrefix(AbstractJdbcBatchMetadataDao.DEFAULT_TABLE_PREFIX);
|
||||
}
|
||||
|
||||
public void testTablePrefix() throws Exception {
|
||||
// ((JdbcStepInstanceDao) stepInstanceDao).setTablePrefix("FOO_");
|
||||
// ((JdbcStepExecutionDao) stepExecutionDao).setTablePrefix("FOO_");
|
||||
// try {
|
||||
// testCreateStep();
|
||||
// fail("Expected DataAccessException");
|
||||
// } catch (DataAccessException e) {
|
||||
// // expected
|
||||
// }
|
||||
}
|
||||
|
||||
public void testUpdateStepExecutionWithLongExitCode() {
|
||||
|
||||
assertTrue(LONG_STRING.length()>250);
|
||||
stepExecution.setExitStatus(ExitStatus.FINISHED.addExitDescription(LONG_STRING));
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
|
||||
List executions = jdbcTemplate.queryForList(
|
||||
"SELECT * FROM BATCH_STEP_EXECUTION where STEP_NAME=?",
|
||||
new Object[] { step1.getName() });
|
||||
assertEquals(1, executions.size());
|
||||
assertEquals(LONG_STRING.substring(0, 250), ((Map) executions.get(0))
|
||||
.get("EXIT_MESSAGE"));
|
||||
}
|
||||
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.batch.repeat.ExitStatus;
|
||||
|
||||
public class JdbcStepDaoTests extends AbstractStepDaoTests {
|
||||
|
||||
private static final String LONG_STRING = JdbcJobDaoTests.LONG_STRING;
|
||||
|
||||
protected void onSetUpBeforeTransaction() throws Exception {
|
||||
((JdbcStepExecutionDao) stepExecutionDao).setTablePrefix(AbstractJdbcBatchMetadataDao.DEFAULT_TABLE_PREFIX);
|
||||
}
|
||||
|
||||
public void testTablePrefix() throws Exception {
|
||||
// ((JdbcStepInstanceDao) stepInstanceDao).setTablePrefix("FOO_");
|
||||
// ((JdbcStepExecutionDao) stepExecutionDao).setTablePrefix("FOO_");
|
||||
// try {
|
||||
// testCreateStep();
|
||||
// fail("Expected DataAccessException");
|
||||
// } catch (DataAccessException e) {
|
||||
// // expected
|
||||
// }
|
||||
}
|
||||
|
||||
public void testUpdateStepExecutionWithLongExitCode() {
|
||||
|
||||
assertTrue(LONG_STRING.length()>250);
|
||||
stepExecution.setExitStatus(ExitStatus.FINISHED.addExitDescription(LONG_STRING));
|
||||
stepExecutionDao.updateStepExecution(stepExecution);
|
||||
|
||||
List executions = jdbcTemplate.queryForList(
|
||||
"SELECT * FROM BATCH_STEP_EXECUTION where STEP_NAME=?",
|
||||
new Object[] { step1.getName() });
|
||||
assertEquals(1, executions.size());
|
||||
assertEquals(LONG_STRING.substring(0, 250), ((Map) executions.get(0))
|
||||
.get("EXIT_MESSAGE"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,94 +1,94 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.domain.BatchStatus;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
|
||||
public class MapJobExecutionDaoTests extends TestCase {
|
||||
|
||||
JobExecutionDao dao = new MapJobExecutionDao();
|
||||
|
||||
JobInstance jobInstance = new JobInstance(new Long(1), new JobParameters(), new JobSupport("execTestJob"));
|
||||
|
||||
JobExecution execution = new JobExecution(jobInstance);
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
MapJobExecutionDao.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Save and find a job execution.
|
||||
*/
|
||||
public void testSaveAndFind() {
|
||||
|
||||
dao.saveJobExecution(execution);
|
||||
|
||||
List executions = dao.findJobExecutions(jobInstance);
|
||||
assertTrue(executions.size() == 1);
|
||||
assertEquals(execution, executions.get(0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Saving sets id to the entity.
|
||||
*/
|
||||
public void testSaveAddsId() {
|
||||
|
||||
assertNull(execution.getId());
|
||||
dao.saveJobExecution(execution);
|
||||
assertNotNull(execution.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Execution count increases by one with every save for the same job
|
||||
* instance.
|
||||
*/
|
||||
public void testGetExecutionCount() {
|
||||
|
||||
JobExecution exec1 = new JobExecution(jobInstance);
|
||||
JobExecution exec2 = new JobExecution(jobInstance);
|
||||
|
||||
dao.saveJobExecution(exec1);
|
||||
assertEquals(1, dao.getJobExecutionCount(jobInstance));
|
||||
|
||||
dao.saveJobExecution(exec2);
|
||||
assertEquals(2, dao.getJobExecutionCount(jobInstance));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update and retrieve job execution - check attributes have changed as
|
||||
* expected.
|
||||
*/
|
||||
public void testUpdateExecution() {
|
||||
execution.setStatus(BatchStatus.STARTED);
|
||||
dao.saveJobExecution(execution);
|
||||
|
||||
execution.setStatus(BatchStatus.COMPLETED);
|
||||
dao.updateJobExecution(execution);
|
||||
|
||||
JobExecution updated = (JobExecution) dao.findJobExecutions(jobInstance).get(0);
|
||||
assertEquals(execution, updated);
|
||||
assertEquals(BatchStatus.COMPLETED, updated.getStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the execution with most recent start time is returned
|
||||
*/
|
||||
public void testGetLastExecution() {
|
||||
JobExecution exec1 = new JobExecution(jobInstance);
|
||||
exec1.setStartTime(new Date(0));
|
||||
JobExecution exec2 = new JobExecution(jobInstance);
|
||||
exec2.setStartTime(new Date(1));
|
||||
|
||||
dao.saveJobExecution(exec1);
|
||||
dao.saveJobExecution(exec2);
|
||||
|
||||
assertEquals(exec2, dao.getLastJobExecution(jobInstance));
|
||||
}
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.domain.BatchStatus;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
|
||||
public class MapJobExecutionDaoTests extends TestCase {
|
||||
|
||||
JobExecutionDao dao = new MapJobExecutionDao();
|
||||
|
||||
JobInstance jobInstance = new JobInstance(new Long(1), new JobParameters(), new JobSupport("execTestJob"));
|
||||
|
||||
JobExecution execution = new JobExecution(jobInstance);
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
MapJobExecutionDao.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Save and find a job execution.
|
||||
*/
|
||||
public void testSaveAndFind() {
|
||||
|
||||
dao.saveJobExecution(execution);
|
||||
|
||||
List executions = dao.findJobExecutions(jobInstance);
|
||||
assertTrue(executions.size() == 1);
|
||||
assertEquals(execution, executions.get(0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Saving sets id to the entity.
|
||||
*/
|
||||
public void testSaveAddsId() {
|
||||
|
||||
assertNull(execution.getId());
|
||||
dao.saveJobExecution(execution);
|
||||
assertNotNull(execution.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Execution count increases by one with every save for the same job
|
||||
* instance.
|
||||
*/
|
||||
public void testGetExecutionCount() {
|
||||
|
||||
JobExecution exec1 = new JobExecution(jobInstance);
|
||||
JobExecution exec2 = new JobExecution(jobInstance);
|
||||
|
||||
dao.saveJobExecution(exec1);
|
||||
assertEquals(1, dao.getJobExecutionCount(jobInstance));
|
||||
|
||||
dao.saveJobExecution(exec2);
|
||||
assertEquals(2, dao.getJobExecutionCount(jobInstance));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update and retrieve job execution - check attributes have changed as
|
||||
* expected.
|
||||
*/
|
||||
public void testUpdateExecution() {
|
||||
execution.setStatus(BatchStatus.STARTED);
|
||||
dao.saveJobExecution(execution);
|
||||
|
||||
execution.setStatus(BatchStatus.COMPLETED);
|
||||
dao.updateJobExecution(execution);
|
||||
|
||||
JobExecution updated = (JobExecution) dao.findJobExecutions(jobInstance).get(0);
|
||||
assertEquals(execution, updated);
|
||||
assertEquals(BatchStatus.COMPLETED, updated.getStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the execution with most recent start time is returned
|
||||
*/
|
||||
public void testGetLastExecution() {
|
||||
JobExecution exec1 = new JobExecution(jobInstance);
|
||||
exec1.setStartTime(new Date(0));
|
||||
JobExecution exec2 = new JobExecution(jobInstance);
|
||||
exec2.setStartTime(new Date(1));
|
||||
|
||||
dao.saveJobExecution(exec1);
|
||||
dao.saveJobExecution(exec2);
|
||||
|
||||
assertEquals(exec2, dao.getLastJobExecution(jobInstance));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,56 +1,56 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.core.domain.JobParametersBuilder;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
|
||||
public class MapJobInstanceDaoTests extends TestCase {
|
||||
|
||||
private JobInstanceDao dao = new MapJobInstanceDao();
|
||||
|
||||
private Job fooJob = new JobSupport("foo");
|
||||
|
||||
private JobParameters fooParams = new JobParametersBuilder().addString("fooKey", "fooValue").toJobParameters();
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
MapJobInstanceDao.clear();
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
MapJobInstanceDao.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create and retrieve a job instance.
|
||||
*/
|
||||
public void testCreateAndRetrieve() throws Exception {
|
||||
|
||||
JobInstance fooInstance = dao.createJobInstance(fooJob, fooParams);
|
||||
assertNotNull(fooInstance.getId());
|
||||
assertEquals(fooJob, fooInstance.getJob());
|
||||
assertEquals(fooParams, fooInstance.getJobParameters());
|
||||
|
||||
JobInstance retrievedInstance = dao.getJobInstance(fooJob, fooParams);
|
||||
assertEquals(fooInstance, retrievedInstance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Trying to create instance twice for the same job+parameters causes error
|
||||
*/
|
||||
public void testCreateDuplicateInstance() {
|
||||
|
||||
dao.createJobInstance(fooJob, fooParams);
|
||||
|
||||
try {
|
||||
dao.createJobInstance(fooJob, fooParams);
|
||||
fail();
|
||||
}
|
||||
catch (IllegalStateException e) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
}
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.domain.Job;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.core.domain.JobParametersBuilder;
|
||||
import org.springframework.batch.execution.job.JobSupport;
|
||||
|
||||
public class MapJobInstanceDaoTests extends TestCase {
|
||||
|
||||
private JobInstanceDao dao = new MapJobInstanceDao();
|
||||
|
||||
private Job fooJob = new JobSupport("foo");
|
||||
|
||||
private JobParameters fooParams = new JobParametersBuilder().addString("fooKey", "fooValue").toJobParameters();
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
MapJobInstanceDao.clear();
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
MapJobInstanceDao.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create and retrieve a job instance.
|
||||
*/
|
||||
public void testCreateAndRetrieve() throws Exception {
|
||||
|
||||
JobInstance fooInstance = dao.createJobInstance(fooJob, fooParams);
|
||||
assertNotNull(fooInstance.getId());
|
||||
assertEquals(fooJob, fooInstance.getJob());
|
||||
assertEquals(fooParams, fooInstance.getJobParameters());
|
||||
|
||||
JobInstance retrievedInstance = dao.getJobInstance(fooJob, fooParams);
|
||||
assertEquals(fooInstance, retrievedInstance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Trying to create instance twice for the same job+parameters causes error
|
||||
*/
|
||||
public void testCreateDuplicateInstance() {
|
||||
|
||||
dao.createJobInstance(fooJob, fooParams);
|
||||
|
||||
try {
|
||||
dao.createJobInstance(fooJob, fooParams);
|
||||
fail();
|
||||
}
|
||||
catch (IllegalStateException e) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +1,32 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import org.springframework.batch.execution.repository.dao.NoSuchObjectException;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class NoSuchBatchDomainObjectExceptionTests extends TestCase {
|
||||
|
||||
public void testCreateException() throws Exception {
|
||||
NoSuchObjectException e = new NoSuchObjectException("Foo");
|
||||
assertEquals("Foo", e.getMessage());
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import org.springframework.batch.execution.repository.dao.NoSuchObjectException;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class NoSuchBatchDomainObjectExceptionTests extends TestCase {
|
||||
|
||||
public void testCreateException() throws Exception {
|
||||
NoSuchObjectException e = new NoSuchObjectException("Foo");
|
||||
assertEquals("Foo", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user