Details
-
Type:
Task
-
Status:
Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: _Plugin Submission
-
Labels:None
-
Complexity:Intermediate
-
Number of attachments :7
Description
The Maven2 WebSphere 5 plugin is a set of commonly used tasks for WebSphere.
The tasks are:
Java2WSDL - WebSphere specific wsdl generation
WSDL2Java - WebSphere specific java generation
EJBDeploy - Generation of stubs & ties etc for WebSphere
StartServer - Starts a WebSphere 5 server
ServerStatus - Gives the status of a WebSphere 5 server
InstallApplication - Installs an application to a WebSphere 5 server
StartApplication - Starts an application that is installed on a WebSphere 5 server
ListApplications - Lists innstalled applications on a WebSphere 5 server
StopApplication - Stops an application on a WebSphere 5 server
UninstallApplication - Uninstalls an application from a WebSphere 5 server
StopServer - Stops a WebSphere 5 server
There is also a set of anttasks that the plugin relies on.
-
Hide
- WAS5 Plugin Mojo.zip
- 13/Jul/06 6:10 AM
- 53 kB
- Hermod Opstvedt
-
- pom.xml 4 kB
- src/main/scripts/was5.build.xml 39 kB
- src/main/scripts/was5.mojos.xml 40 kB
- src/site/changes.xml 0.6 kB
- src/site/css/maven-base.css 2 kB
- src/site/css/maven-classic.css 15 kB
- src/site/css/maven-theme.css 3 kB
- src/site/css/print.css 0.2 kB
- src/site/css/site.css 0.8 kB
- src/site/site.xml 2 kB
- src/site/xdoc/download.xml 0.3 kB
- src/site/xdoc/EJBDeploy-mojo.xml 11 kB
- src/site/xdoc/ejbdeploy.xml 2 kB
- src/site/xdoc/index.xml 4 kB
- src/site/.../InstallApplication-mojo.xml 3 kB
- src/site/xdoc/installapplication.xml 3 kB
- src/site/xdoc/introduction.xml 0.5 kB
- src/site/xdoc/Java2WSDL-mojo.xml 6 kB
- src/site/xdoc/java2wsdl.xml 2 kB
- src/site/xdoc/license.xml 1 kB
- src/site/xdoc/ListApplications-mojo.xml 2 kB
- src/site/xdoc/listapplications.xml 2 kB
- src/site/xdoc/release-notes.xml 0.3 kB
- src/site/xdoc/roadmap.xml 0.6 kB
- src/site/xdoc/ServerStatus-mojo.xml 5 kB
- src/site/xdoc/serverstatus.xml 2 kB
- src/site/xdoc/StartApplication-mojo.xml 4 kB
- src/site/xdoc/startapplication.xml 2 kB
- src/site/xdoc/StartServer-mojo.xml 8 kB
- src/site/xdoc/startserver.xml 2 kB
-
Hide
- WAS5 Plugin Mojo.zip
- 13/Jul/06 1:58 AM
- 53 kB
- Hermod Opstvedt
-
- pom.xml 4 kB
- src/main/scripts/was5.build.xml 39 kB
- src/main/scripts/was5.mojos.xml 40 kB
- src/site/changes.xml 0.6 kB
- src/site/css/maven-base.css 2 kB
- src/site/css/maven-classic.css 15 kB
- src/site/css/maven-theme.css 3 kB
- src/site/css/print.css 0.2 kB
- src/site/css/site.css 0.8 kB
- src/site/site.xml 2 kB
- src/site/xdoc/download.xml 0.3 kB
- src/site/xdoc/EJBDeploy-mojo.xml 11 kB
- src/site/xdoc/ejbdeploy.xml 2 kB
- src/site/xdoc/index.xml 4 kB
- src/site/.../InstallApplication-mojo.xml 3 kB
- src/site/xdoc/installapplication.xml 3 kB
- src/site/xdoc/introduction.xml 0.5 kB
- src/site/xdoc/Java2WSDL-mojo.xml 6 kB
- src/site/xdoc/java2wsdl.xml 2 kB
- src/site/xdoc/license.xml 1 kB
- src/site/xdoc/ListApplications-mojo.xml 2 kB
- src/site/xdoc/listapplications.xml 2 kB
- src/site/xdoc/release-notes.xml 0.3 kB
- src/site/xdoc/roadmap.xml 0.6 kB
- src/site/xdoc/ServerStatus-mojo.xml 5 kB
- src/site/xdoc/serverstatus.xml 2 kB
- src/site/xdoc/StartApplication-mojo.xml 4 kB
- src/site/xdoc/startapplication.xml 2 kB
- src/site/xdoc/StartServer-mojo.xml 8 kB
- src/site/xdoc/startserver.xml 2 kB
-
Hide
- WAS5 Plugin Mojo.zip
- 30/Jun/06 6:05 AM
- 289 kB
- Hermod Opstvedt
-
- pom.xml 4 kB
- src/main/scripts/was5.build.xml 39 kB
- src/main/scripts/was5.mojos.xml 40 kB
- src/site/changes.xml 0.6 kB
- src/site/css/maven-base.css 2 kB
- src/site/css/maven-classic.css 15 kB
- src/site/css/maven-theme.css 3 kB
- src/site/css/print.css 0.2 kB
- src/site/css/site.css 0.8 kB
- src/site/site.xml 2 kB
- src/site/xdoc/download.xml 0.3 kB
- src/site/xdoc/EJBDeploy-mojo.xml 11 kB
- src/site/xdoc/ejbdeploy.xml 2 kB
- src/site/xdoc/index.xml 4 kB
- src/site/.../InstallApplication-mojo.xml 3 kB
- src/site/xdoc/installapplication.xml 3 kB
- src/site/xdoc/introduction.xml 0.5 kB
- src/site/xdoc/Java2WSDL-mojo.xml 6 kB
- src/site/xdoc/java2wsdl.xml 2 kB
- src/site/xdoc/license.xml 1 kB
- src/site/xdoc/ListApplications-mojo.xml 2 kB
- src/site/xdoc/listapplications.xml 2 kB
- src/site/xdoc/release-notes.xml 0.3 kB
- src/site/xdoc/roadmap.xml 0.6 kB
- src/site/xdoc/ServerStatus-mojo.xml 5 kB
- src/site/xdoc/serverstatus.xml 2 kB
- src/site/xdoc/StartApplication-mojo.xml 4 kB
- src/site/xdoc/startapplication.xml 2 kB
- src/site/xdoc/StartServer-mojo.xml 8 kB
- src/site/xdoc/startserver.xml 2 kB
-
Hide
- WAS5 Plugin Mojo.zip
- 26/Jun/06 4:41 AM
- 277 kB
- Hermod Opstvedt
-
- pom.xml 4 kB
- src/main/scripts/was5.build.xml 36 kB
- src/main/scripts/was5.mojos.xml 40 kB
- src/site/changes.xml 0.6 kB
- src/site/css/maven-base.css 2 kB
- src/site/css/maven-classic.css 15 kB
- src/site/css/maven-theme.css 3 kB
- src/site/css/print.css 0.2 kB
- src/site/css/site.css 0.8 kB
- src/site/site.xml 2 kB
- src/site/xdoc/download.xml 0.3 kB
- src/site/xdoc/EJBDeploy-mojo.xml 11 kB
- src/site/xdoc/ejbdeploy.xml 2 kB
- src/site/xdoc/index.xml 4 kB
- src/site/.../InstallApplication-mojo.xml 3 kB
- src/site/xdoc/installapplication.xml 3 kB
- src/site/xdoc/introduction.xml 0.5 kB
- src/site/xdoc/Java2WSDL-mojo.xml 6 kB
- src/site/xdoc/java2wsdl.xml 2 kB
- src/site/xdoc/license.xml 1 kB
- src/site/xdoc/ListApplications-mojo.xml 2 kB
- src/site/xdoc/listapplications.xml 2 kB
- src/site/xdoc/release-notes.xml 0.3 kB
- src/site/xdoc/roadmap.xml 0.6 kB
- src/site/xdoc/ServerStatus-mojo.xml 5 kB
- src/site/xdoc/serverstatus.xml 2 kB
- src/site/xdoc/StartApplication-mojo.xml 4 kB
- src/site/xdoc/startapplication.xml 2 kB
- src/site/xdoc/StartServer-mojo.xml 8 kB
- src/site/xdoc/startserver.xml 2 kB
-
Hide
- WAS5 Plugin Mojo.zip
- 09/May/06 4:40 AM
- 295 kB
- Hermod Opstvedt
-
- pom.xml 4 kB
- .settings/.svn/dir-wcprops 0.1 kB
- .settings/.svn/empty-file 0.0 kB
- .settings/.svn/entries 0.6 kB
- .settings/.svn/format 0.0 kB
- .settings/.svn/README.txt 0.1 kB
- .settings/.../org.eclipse.wst.validation.prefs.svn-base 2 kB
- .settings/.../org.eclipse.wst.validation.prefs.svn-work 0.1 kB
- .settings/org.eclipse.wst.validation.prefs 2 kB
- .svn/dir-wcprops 0.1 kB
- .svn/empty-file 0.0 kB
- .svn/entries 2 kB
- .svn/format 0.0 kB
- .svn/README.txt 0.1 kB
- .svn/text-base/.classpath.svn-base 0.3 kB
- .svn/text-base/.project.svn-base 1 kB
- .svn/text-base/.wtpmodules.svn-base 0.4 kB
- .svn/text-base/LICENSE.txt.svn-base 0.6 kB
- .svn/text-base/pom.xml.svn-base 4 kB
- .svn/wcprops/.classpath.svn-work 0.1 kB
- .svn/wcprops/.project.svn-work 0.1 kB
- .svn/wcprops/.wtpmodules.svn-work 0.1 kB
- .svn/wcprops/LICENSE.txt.svn-work 0.1 kB
- .svn/wcprops/pom.xml.svn-work 0.1 kB
- src/.svn/dir-wcprops 0.1 kB
- src/.svn/empty-file 0.0 kB
- src/.svn/entries 0.4 kB
- src/.svn/format 0.0 kB
- src/.svn/README.txt 0.1 kB
- src/main/.svn/dir-wcprops 0.1 kB
-
Hide
- was-plugin-1.1.zip
- 24/May/06 6:30 AM
- 13 kB
- Hermod Opstvedt
-
- was5-plugin-1.1.pom 3 kB
- was5-plugin-1.1.jar 12 kB
-
Hide
- WAS-Plugin-anttasks.zip
- 09/May/06 4:40 AM
- 59 kB
- Hermod Opstvedt
-
- pom.xml 2 kB
- .settings/.svn/dir-wcprops 0.1 kB
- .settings/.svn/empty-file 0.0 kB
- .settings/.svn/entries 0.6 kB
- .settings/.svn/format 0.0 kB
- .settings/.svn/README.txt 0.1 kB
- .settings/.../org.eclipse.wst.validation.prefs.svn-base 2 kB
- .settings/.../org.eclipse.wst.validation.prefs.svn-work 0.1 kB
- .settings/org.eclipse.wst.validation.prefs 2 kB
- .svn/dir-wcprops 0.1 kB
- .svn/empty-file 0.0 kB
- .svn/entries 1 kB
- .svn/format 0.0 kB
- .svn/README.txt 0.1 kB
- .svn/text-base/.classpath.svn-base 4 kB
- .svn/text-base/.project.svn-base 0.5 kB
- .svn/text-base/LICENSE.txt.svn-base 0.6 kB
- .svn/text-base/pom.xml.svn-base 2 kB
- .svn/wcprops/.classpath.svn-work 0.1 kB
- .svn/wcprops/.project.svn-work 0.1 kB
- .svn/wcprops/LICENSE.txt.svn-work 0.1 kB
- .svn/wcprops/pom.xml.svn-work 0.1 kB
- src/.svn/dir-wcprops 0.1 kB
- src/.svn/empty-file 0.0 kB
- src/.svn/entries 0.4 kB
- src/.svn/format 0.0 kB
- src/.svn/README.txt 0.1 kB
- src/main/.svn/dir-wcprops 0.1 kB
- src/main/.svn/empty-file 0.0 kB
- src/main/.svn/entries 0.4 kB
Activity
After building both the plug-in and the anttasks I'm getting the following when used during an ejbDeploy:
[INFO] org/codehaus/mojo/wasanttasks/ListToPathTask (Unsupported major.minor version 49.0)
[INFO] ------------------------------------------------------------------------
[INFO] Trace
java.lang.UnsupportedClassVersionError: org/codehaus/mojo/wasanttasks/ListToPathTask (Unsupported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:147)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:474)
at java.net.URLClassLoader.access$500(URLClassLoader.java(Inlined Compiled Code))
at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java(Compiled Code))
at java.security.AccessController.doPrivileged1(Native Method)
at java.security.AccessController.doPrivileged(AccessController.java(Compiled Code))
at java.net.URLClassLoader.findClass(URLClassLoader.java(Inlined Compiled Code))
at java.lang.ClassLoader.loadClass(ClassLoader.java(Inlined Compiled Code))
at org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java(Inlined Compiled Code))
at org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java(Compiled Code))
at org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214)
at java.lang.ClassLoader.loadClass(ClassLoader.java(Compiled Code))
at org.apache.tools.ant.AntClassLoader.findBaseClass(AntClassLoader.java:1197)
at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:973)
at java.lang.ClassLoader.loadClass(ClassLoader.java(Compiled Code))
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:260)
at org.apache.tools.ant.taskdefs.Definer.addDefinition(Definer.java:457)
at org.apache.tools.ant.taskdefs.Definer.execute(Definer.java:183)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
at org.apache.tools.ant.Task.perform(Task.java:364)
at org.apache.tools.ant.Target.execute(Target.java:341)
at org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:142)
at org.codehaus.plexus.component.factory.ant.AntScriptInvoker.invoke(AntScriptInvoker.java:194)
at org.apache.maven.script.ant.AntMojoWrapper.execute(AntMojoWrapper.java:33)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:412)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:534)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:475)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:454)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:306)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:273)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:140)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:256)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
at java.lang.reflect.Method.invoke(Method.java:391)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 24 seconds
[INFO] Finished at: Tue Jun 06 13:40:24 EDT 2006
[INFO] Final Memory: 9M/32M
[INFO] ------------------------------------------------------------------------
C:\testcode\m2tests\DistributionService>
This was a simple fix - somehow there was a class file for "org/codehaus/mojo/wasanttasks/ListToPathTask" already in the src tree... removed that and recompiled an it was fine...
Maike sure to clean before you build though ![]()
My recommendation is always mvn -clean........ ![]()
Hermod
PS. Please ignore the typos in the the documentation (reads codehause instead of codehaus in 3 files)
Fixed problem with 1010 character limitation on EJBDeploy. This is actually a problem with Java's ProcessExec.
Is there a possibility to use the WA5-plugin also for WAS6?
After building the plugin and the anttasks I execute mvn to get a simple ServerStatus with the following error-message:
[INFO] [was5:ServerStatus
{execution: show server status}]
initWasHome:
initConnType:
initHelp:
initPassword:
initUsername:
initStatusport:
initTimeout:
initDontWait:
initServer:
initTrace:
initNode:
initCell:
initReplaceLog:
initScript:
initserverprops:
ServerStatus:
[echo] Status for server1 at C:/Program Files/IBM/Rational/SDP/6.0/runtimes/base_v6
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to execute: Executing Ant script: /was5.build.xml [ServerStatus]: Failed to execute.
C:\my-app\$
\lib not found.
[INFO] ------------------------------------------------------------------------
Do you know perhaps a solution to use integrate WAS6 and Maven2?
Thx!
Matthias
No, it will not work with WAS6 as of now (as far as I know) - I am planning on making another plugin that supports WAS6 later this year (this is related to work)
By the way : please use -DwasHome=<path to was6> as in the documentation. (If on windows, you should be able to do -DwasHome=%WAS_HOME%)
Hermod
Created workaraound where property defined in pom is not available to ant except inside a task.
Hermod: which of these archives should be added to the repository?
Hi Trygve,
I installed/built all three, the plugin-anttasks, the mojo and the was-plugin itself which uses them.
Matthias
The anttasks from attachment 1, and the .zip file from attachement 6.
Hemod
I don't get it, I should not add attachment nr 2 which seems to be the mojo with the source code. Attachment 6 containes just a jar with a build.xml.
r2110 | trygvis | 2006-07-13 12:56:53 +0200 (Thu, 13 Jul 2006) | 8 lines
Fixing MOJO-392: "WebSphere 5 plugin for Maven2"
Submitted by Hermod Opstvedt.
Changes from the zips:
o Applied Mojo code style.
o Setting the correct year and copyright holder of the code.
Changed the LICENSE.txt to contain the license in the source files, the file
contained the ASL v2 license vs the code has the standard Codehaus license.
Last attachement was the wrong file. This is the correct one.
It was me who did not realize that the ordering of the attachements are not incremental. The correct are attachement 1 & 2.
Hermod
Where's the source???
attachment 1. contains a .jar with som pom-stuff, no source...
attachment #2 contains mainly .svn files - which really should not be included...
Have anybody imported this into svn - so I can start adding patches?
Also by usage (an version in our own repo) it seems that dependencies are not added to the classpath, so classes not contained within the application will not be found during the EJBdeploy goal.
Altso it seems like not all sourcedirectories are available during the same goal (generated-sources).
The source code is in the sandbox: http://svn.codehaus.org/mojo/trunk/mojo/mojo-sandbox/mojo-was/
Please fix the following errors:
plugin.xml:
InstallApplication and ListApplications: Missing wasNode and wasCell parameters
was5.build.xml:
initTargetDirectory: Remove trailing /
InstallApplication: Depends on initTargetDirectory
UninstallApplication: $
should be $
{wasHome}/bin
InstallApplication and UninstallApplication: $
should be $
{wasnode}ps.
When will the binaries for this project be available on http://snapshots.repository.codehaus.org ?
The wasNode and wasCell parameters are not missing - They have simply been omitted and defaults to the local servers machinename. The cause for that is that according to the documentation from IBM the WAS Ant tasks can not be used to deploy on a remote server. I admit that this statement is odd, because the parameters are there. I have added the parameters so please go ahead and try if remote deploy works.
Regarding the was5.build.xml:
initTargetDirectory: Remove trailing / : This must come from your usage because the plugin does not set anything at all
InstallApplication: Depends on initTargetDirectory : FIxed
UninstallApplication: $
should be $
{wasHome}/bin : Fxed, but could just as well hav been current directory - Where you stand when uninstalling really does not matter.
InstallApplication and UninstallApplication: $
in these. There is however $
{wasNode}Hermod
[quote]
The wasNode and wasCell parameters are not missing - They have simply been omitted and defaults to the local servers machinename. The cause for that is that according to the documentation from IBM the WAS Ant tasks can not be used to deploy on a remote server. I admit that this statement is odd, because the parameters are there. I have added the parameters so please go ahead and try if remote deploy works.
[/quote]
I am deploying on a local WebSphere 5.1 Express server and the node and cell are both named DefaultNode and not $
{env.COMPUTERNAME}[quote]
initTargetDirectory: Remove trailing / : This must come from your usage because the plugin does not set anything at all
[/quote]
<target name="initTargetDirectory" if="targetDirectory">
<var name="trgdir" value="$
/" /> <!-- <<< I mean THIS trailing slash -->
<echo>$
</target>
[quote]
UninstallApplication: ${trgdir}
should be $
{wasHome}/bin : Fxed, but could just as well hav been current directory - Where you stand when uninstalling really does not matter.
[/quote]
I am doing my functional testing in a POM project, so the $
{basedir}/target directory doesn't exist (and initTargetDirectory is not called, so I can't set a different directory).
[quote]
InstallApplication and UninstallApplication: $
in these. There is however $
{wasNode}[/quote]
Oops... My mistake. I meant StartApplication and StopApplication:
<arg value='$AdminControl invoke [$AdminControl queryNames \"WebSphere:*,type=ApplicationManager,process=$
{server},node=${node}\"] startApplication ${ear}' />and
<arg value='$AdminControl invoke [$AdminControl queryNames \"WebSphere:*,type=ApplicationManager,process=${server}
,node=$
{node}\"] stopApplication $
{ear}' />
Good catch - Trailing slash removed from trgdir and srcdir, and node replaced with wasnode for StartApplication and StopApplication. Thnx.
Please get latest src from http://svn.codehaus.org/mojo/trunk/mojo/mojo-sandbox/mojo-was/ and rebuild it to get the changes.
Hermod
Hermod: you should be able to deploy new snapshots yourself by executing: $ mvn deploy. That way it will be a bit easier to test your code.
Hi
Nothing would please me more. I recently mailed Jason about aquiring the info for the repo to deploy to, but have not heard anything yet. If I try to deploy now I get:
[INFO] Failed to configure plugin parameters for: org.apache.maven.plugins:maven
-deploy-plugin:2.2.1
check that the following section of the pom.xml is present and correct:
<distributionManagement>
<!-- use the following if you're not using a snapshot version. -->
<repository>
<id>repo</id>
<name>Repository Name</name>
<url>scp://host/path/to/repo</url>
</repository>
<!-- use the following if you ARE using a snapshot version. -->
<snapshotRepository>
<id>repo</id>
<name>Repository Name</name>
<url>scp://host/path/to/repo</url>
</snapshotRepository>
</distributionManagement>
Hi,
I noticed you finally got the packages in the snapshot repository (thanks) !
There is however a problem with the package versioning.
Most people will have their snapshot repository access setup according to:
http://maven.apache.org/guides/development/guide-plugin-snapshot-repositories.html
This means that only SNAPSHOT plugins will be downloaded from snapshots.codehaus.org, but the was-plugin-anttasks package has version 1.0 instead of 1.0-SNAPSHOT.
Could you please change the was-plugin-anttasks version to a SNAPSHOT ?
This is an update to the plugin. This version fixes some *nix specific issues. It should now run on any OS.