From 2ad1acc6a405415f6456c5547ad6ec2a87438fec Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sat, 28 Feb 2009 11:13:26 +0000 Subject: [PATCH] Adapt to OSGi on the server side git-svn-id: https://svn.argeo.org/slc/trunk@2204 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- demo/org.argeo.slc.demo.manager/pom.xml | 2 +- org.argeo.slc.detached.launcher/pom.xml | 11 +- .../org/argeo/slc/detached/launcher/Main.java | 35 ++- org.argeo.slc/pom.xml | 22 +- runtime/org.argeo.slc.server/pom.xml | 4 +- .../org.argeo.slc.support.activemq/pom.xml | 15 +- .../bundles/context.xml | 23 ++ .../bundles/logging/META-INF/MANIFEST.MF | 4 + .../bundles/logging/log4j.properties | 21 ++ .../META-INF/MANIFEST.MF | 15 + .../META-INF/spring/activemq.xml | 30 ++ .../activemq-conf.xml | 23 ++ .../META-INF/MANIFEST.MF | 14 + .../META-INF/spring/db-osgi.xml | 23 ++ .../META-INF/spring/db.xml | 176 ++++++++++++ .../META-INF/MANIFEST.MF | 47 ++++ .../WEB-INF/applicationContext.xml | 98 +++++++ .../WEB-INF/classes/log4j.properties | 35 +++ .../WEB-INF/doc-servlet.xml | 10 + .../org.argeo.slc.webapp.war/WEB-INF/osgi.xml | 23 ++ .../WEB-INF/slc-service-servlet.xml | 9 + .../WEB-INF/slc-ws-servlet.xml | 7 + .../org.argeo.slc.webapp.war/WEB-INF/web.xml | 140 ++++++++++ .../WEB-INF/xslt-servlet.xml | 29 ++ .../WEB-INF/xslt/resultView.xsl | 51 ++++ .../WEB-INF/xslt/viewXml.xsl | 10 + .../org.argeo.slc.webapp.war/index.jsp | 5 + .../org.argeo.slc.webapp.war/style.css | 174 ++++++++++++ .../simple-webapp.war/META-INF/MANIFEST.MF | 19 ++ .../WEB-INF/classes/log4j.properties | 9 + .../servlet/HelloOsgiWorldServlet.class | Bin 0 -> 1984 bytes .../servlet/HelloOsgiWorldServlet.java | 58 ++++ .../servlet/ResourceServingServlet.class | Bin 0 -> 4292 bytes .../servlet/ResourceServingServlet.java | 131 +++++++++ .../bundles/simple-webapp.war/WEB-INF/web.xml | 38 +++ .../simple-webapp.war/hello-osgi-world.jsp | 52 ++++ .../simple-webapp.war/images/bullet.gif | Bin 0 -> 2954 bytes .../images/springsource-logo.png | Bin 0 -> 4974 bytes .../images/springsource_banner.png | Bin 0 -> 41165 bytes .../bundles/simple-webapp.war/index.html | 110 ++++++++ .../simple-webapp.war/jsp-tag-osgi-world.jsp | 52 ++++ .../simple-webapp.war/styles/springsource.css | 154 ++++++++++ server/org.argeo.slc.siteserver/pom.xml | 262 +++++++++++++++++- 43 files changed, 1897 insertions(+), 44 deletions(-) create mode 100644 server/org.argeo.slc.siteserver/bundles/context.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/logging/META-INF/MANIFEST.MF create mode 100644 server/org.argeo.slc.siteserver/bundles/logging/log4j.properties create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/META-INF/MANIFEST.MF create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/META-INF/spring/activemq.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/activemq-conf.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/MANIFEST.MF create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/spring/db-osgi.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/spring/db.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/META-INF/MANIFEST.MF create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/applicationContext.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/classes/log4j.properties create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/doc-servlet.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/osgi.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-ws-servlet.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/web.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt-servlet.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt/resultView.xsl create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt/viewXml.xsl create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/index.jsp create mode 100644 server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/style.css create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/META-INF/MANIFEST.MF create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/log4j.properties create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/org/springframework/osgi/samples/simplewebapp/servlet/HelloOsgiWorldServlet.class create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/org/springframework/osgi/samples/simplewebapp/servlet/HelloOsgiWorldServlet.java create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/org/springframework/osgi/samples/simplewebapp/servlet/ResourceServingServlet.class create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/org/springframework/osgi/samples/simplewebapp/servlet/ResourceServingServlet.java create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/web.xml create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/hello-osgi-world.jsp create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/images/bullet.gif create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/images/springsource-logo.png create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/images/springsource_banner.png create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/index.html create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/jsp-tag-osgi-world.jsp create mode 100644 server/org.argeo.slc.siteserver/bundles/simple-webapp.war/styles/springsource.css diff --git a/demo/org.argeo.slc.demo.manager/pom.xml b/demo/org.argeo.slc.demo.manager/pom.xml index a4caecfc9..dfb9204e7 100644 --- a/demo/org.argeo.slc.demo.manager/pom.xml +++ b/demo/org.argeo.slc.demo.manager/pom.xml @@ -21,7 +21,7 @@ org.apache.commons.logging,org.springframework.beans.factory.config - org.springframework.jms,com.springsource.org.castor,com.springsource.org.apache.xbean.spring,com.springsource.org.apache.activemq,org.argeo.slc.support.equinox,org.argeo.slc.support.activemq,org.argeo.slc.specs,org.argeo.slc.support.simple,org.springframework.aop,org.springframework.oxm,com.springsource.net.sf.cglib,com.springsource.org.aopalliance + org.springframework.jms,com.springsource.org.castor,org.argeo.dep.osgi.activemq,org.argeo.slc.support.equinox,org.argeo.slc.support.activemq,org.argeo.slc.specs,org.argeo.slc.support.simple,org.springframework.aop,org.springframework.oxm,com.springsource.net.sf.cglib,com.springsource.org.aopalliance conf/* diff --git a/org.argeo.slc.detached.launcher/pom.xml b/org.argeo.slc.detached.launcher/pom.xml index 813a0cc1b..b101f93dc 100644 --- a/org.argeo.slc.detached.launcher/pom.xml +++ b/org.argeo.slc.detached.launcher/pom.xml @@ -77,12 +77,12 @@ org.eclipse.osgi org.eclipse.osgi - + - + + - + + - + --> + org.apache.camel com.springsource.org.apache.camel - 1.3.0 + 1.3.0 diff --git a/runtime/org.argeo.slc.server/pom.xml b/runtime/org.argeo.slc.server/pom.xml index e1d686aa3..4e2fcf708 100644 --- a/runtime/org.argeo.slc.server/pom.xml +++ b/runtime/org.argeo.slc.server/pom.xml @@ -112,11 +112,11 @@ com.springsource.javax.wsdl - + diff --git a/runtime/org.argeo.slc.support.activemq/pom.xml b/runtime/org.argeo.slc.support.activemq/pom.xml index 97da097ad..e1894a788 100644 --- a/runtime/org.argeo.slc.support.activemq/pom.xml +++ b/runtime/org.argeo.slc.support.activemq/pom.xml @@ -105,7 +105,7 @@ com.springsource.javax.management.j2ee - + + + + org.argeo.dep.osgi + org.argeo.dep.osgi.activemq + 5.2.0 + + + + WEB-INF/web.xml + + + + + + diff --git a/server/org.argeo.slc.siteserver/bundles/logging/META-INF/MANIFEST.MF b/server/org.argeo.slc.siteserver/bundles/logging/META-INF/MANIFEST.MF new file mode 100644 index 000000000..35ccf4646 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/logging/META-INF/MANIFEST.MF @@ -0,0 +1,4 @@ +Bundle-Name: Log4j configuration bundle +Bundle-SymbolicName: server.logging +Fragment-Host: com.springsource.org.apache.log4j + diff --git a/server/org.argeo.slc.siteserver/bundles/logging/log4j.properties b/server/org.argeo.slc.siteserver/bundles/logging/log4j.properties new file mode 100644 index 000000000..0c8ac58f9 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/logging/log4j.properties @@ -0,0 +1,21 @@ +log4j.rootLogger=WARN, console + +## Levels +log4j.logger.org.argeo=DEBUG +log4j.logger.org.argeo.slc.execution.ExecutionParameterPostProcessor=TRACE +log4j.logger.org.argeo.slc.execution.ExecutionContext=DEBUG +log4j.logger.org.argeo.slc.execution.SimpleExecutionSpec=DEBUG + +log4j.logger.org.springframework=WARN + +log4j.logger.org.apache.catalina=INFO + +## Appenders +# console is set to be a ConsoleAppender. +log4j.appender.console=org.apache.log4j.ConsoleAppender + +# console uses PatternLayout. +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c%n + +testCase=002 \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/META-INF/MANIFEST.MF b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/META-INF/MANIFEST.MF new file mode 100644 index 000000000..b3b78be1a --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/META-INF/MANIFEST.MF @@ -0,0 +1,15 @@ +Bundle-SymbolicName: org.argeo.slc.server.activemq +Bundle-Version: 0.1.0 +Import-Package: javax.jms, + javax.management.j2ee.statistics, + org.apache.commons.logging +Require-Bundle: org.argeo.slc.server, + org.argeo.slc.support.activemq, + org.springframework.core, + org.springframework.context, + org.springframework.beans, + org.springframework.oxm, + org.springframework.jms, + com.springsource.org.castor, + org.argeo.dep.osgi.activemq +Spring-Context: *;create-asynchronously:=false diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/META-INF/spring/activemq.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/META-INF/spring/activemq.xml new file mode 100644 index 000000000..c8c8846ed --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/META-INF/spring/activemq.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/activemq-conf.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/activemq-conf.xml new file mode 100644 index 000000000..9ed5ed1cb --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/activemq-conf.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/MANIFEST.MF b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/MANIFEST.MF new file mode 100644 index 000000000..f79d00353 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/MANIFEST.MF @@ -0,0 +1,14 @@ +Bundle-SymbolicName: org.argeo.slc.server.hibernate +Bundle-Version: 0.1.0 +Require-Bundle: org.argeo.slc.server, + org.argeo.slc.specs, + org.argeo.slc.support.simple, + org.springframework.orm, + org.springframework.jdbc, + org.springframework.context, + org.springframework.context.support, + com.springsource.net.sf.ehcache, + com.springsource.org.hsqldb, + com.springsource.org.hibernate +Spring-Context: *;create-asynchronously:=false + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/spring/db-osgi.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/spring/db-osgi.xml new file mode 100644 index 000000000..e04286679 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/spring/db-osgi.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/spring/db.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/spring/db.xml new file mode 100644 index 000000000..5e098a61f --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/spring/db.xml @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org/argeo/slc/hibernate/structure/SimpleSElement.hbm.xml + + + org/argeo/slc/hibernate/test/SimpleResultPart.hbm.xml + + + org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml + + + org/argeo/slc/hibernate/test/tree/TreeTestResultCollection.hbm.xml + + + org/argeo/slc/hibernate/test/tree/PartSubList.hbm.xml + + + org/argeo/slc/hibernate/test/TestRunDescriptor.hbm.xml + + + org/argeo/slc/hibernate/process/SlcExecution.hbm.xml + + + org/argeo/slc/hibernate/process/SlcExecutionStep.hbm.xml + + + org/argeo/slc/hibernate/process/SlcExecutionSpec.hbm.xml + + + org/argeo/slc/hibernate/runtime/SlcAgentDescriptor.hbm.xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/META-INF/MANIFEST.MF b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/META-INF/MANIFEST.MF new file mode 100644 index 000000000..dd0b9fbd5 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/META-INF/MANIFEST.MF @@ -0,0 +1,47 @@ +Web-ContextPath: org.argeo.slc.webapp +Bundle-Name: SLC Webapp +Bundle-SymbolicName: org.argeo.slc.webapp +Bundle-Version: 1.0.0 +Bundle-ClassPath: WEB-INF/classes +Import-Package: javax.servlet, + javax.servlet.http, + javax.servlet.resources, + javax.servlet.jsp, + javax.servlet.jsp.jstl.core, + javax.servlet.jsp.jstl.fmt, + javax.servlet.jsp.jstl.tlv, + org.apache.taglibs.standard.resources, + org.apache.taglibs.standard.tag.common.core, + org.apache.taglibs.standard.tag.rt.core, + org.apache.taglibs.standard.tei, + org.apache.taglibs.standard.tlv, + org.aopalliance.aop, + org.springframework.aop, + org.springframework.aop.framework, + org.springframework.osgi.web.context.support, + org.springframework.web.context, + org.springframework.web.util, + org.apache.naming.java, + com.sun.xml.messaging.saaj.soap +Require-Bundle: org.argeo.slc.server, + org.argeo.slc.specs, + org.argeo.slc.support.simple, + org.argeo.slc.support.activemq, + org.springframework.web, + org.springframework.web.servlet, + org.springframework.orm, + org.springframework.jms, + org.springframework.oxm, + org.springframework.ws, + org.springframework.xml, + org.springframework.jdbc, + org.springframework.context, + org.springframework.context.support, + com.springsource.org.castor, + com.springsource.net.sf.ehcache, + com.springsource.org.hsqldb, + com.springsource.org.hibernate, + org.argeo.dep.osgi.activemq, + com.springsource.org.apache.camel, + com.springsource.org.mortbay.util + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/applicationContext.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/applicationContext.xml new file mode 100644 index 000000000..61b8a81c0 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/applicationContext.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + slcServerDefault.sessionFactory.HSQL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/classes/log4j.properties b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/classes/log4j.properties new file mode 100644 index 000000000..34f682a8a --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/classes/log4j.properties @@ -0,0 +1,35 @@ +# Set root logger level to DEBUG and its only appender to A1. +log4j.rootLogger=WARN, console + +## Levels +# Slc +log4j.logger.org.argeo.slc=DEBUG + +# Spring +log4j.logger.org.springframework=INFO +log4j.logger.org.springframework.transaction=WARN +log4j.logger.org.springframework.orm.hibernate3=WARN +log4j.logger.org.springframework.orm.hibernate3.HibernateTransactionManager=WARN + +# Hibernate +log4j.logger.org.hibernate=WARN +log4j.logger.org.hibernate.stat=INFO +log4j.logger.org.hibernate.SQL=WARN +log4j.logger.org.hibernate.transaction=WARN +#log4j.logger.org.hibernate.tool.hbm2ddl=TRACE +#log4j.logger.org.hibernate.type=TRACE + +# Active MQ +log4j.logger.org.apache.activemq.web.MessageListenerServlet=WARN + +# EhCache +log4j.logger.net.sf.ehcache=WARN + +## Appenders +# A1 is set to be a ConsoleAppender. +log4j.appender.console=org.apache.log4j.ConsoleAppender + +# A1 uses PatternLayout. +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c%n + diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/doc-servlet.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/doc-servlet.xml new file mode 100644 index 000000000..3b1714fcc --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/doc-servlet.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/osgi.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/osgi.xml new file mode 100644 index 000000000..6426dc9b7 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/osgi.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml new file mode 100644 index 000000000..11ae5380d --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-ws-servlet.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-ws-servlet.xml new file mode 100644 index 000000000..18dce9a8a --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-ws-servlet.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/web.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/web.xml new file mode 100644 index 000000000..ef74dca19 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/web.xml @@ -0,0 +1,140 @@ + + + + SLC Web Application + + + + slc-service + org.springframework.web.servlet.DispatcherServlet + + contextClass + org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext + + + + + slc-service + *.service + + + + + slc-ws + + org.springframework.ws.transport.http.MessageDispatcherServlet + + contextClass + org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext + + + + + slc-ws + /slcService/* + + + + + xslt + org.springframework.web.servlet.DispatcherServlet + + contextClass + org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext + + + + + xslt + *.xslt + + + + + doc + org.springframework.web.servlet.DispatcherServlet + + contextClass + org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext + + + + + doc + *.xls + + + doc + *.pdf + + + + + contextConfigLocation + /WEB-INF/applicationContext.xml + + + + Spring Context + org.springframework.web.context.ContextLoaderListener + + + contextClass + org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext + + + + + + + Log4j + org.springframework.web.util.Log4jConfigListener + + + log4jConfigLocation + /WEB-INF/classes/log4j.properties + + + log4jRefreshInterval + 5000 + + + + + + org.apache.activemq.brokerURL + vm://localhost + + + + org.apache.activemq.embeddedBroker + false + + + + MessageListenerServlet + org.apache.activemq.web.MessageListenerServlet + 1 + + + + MessageListenerServlet + /amq/* + + + + session + org.apache.activemq.web.SessionFilter + + + + session + /amq/* + + diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt-servlet.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt-servlet.xml new file mode 100644 index 000000000..ddfd925ce --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt-servlet.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt/resultView.xsl b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt/resultView.xsl new file mode 100644 index 000000000..e9989bdbe --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt/resultView.xsl @@ -0,0 +1,51 @@ + + + + + + + + + + Result + + +

+ Result + +

+ +

+ +

+ + + + + + + + + + + + + +
+ + + +
+
+ + +
+
\ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt/viewXml.xsl b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt/viewXml.xsl new file mode 100644 index 000000000..87d63716f --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/xslt/viewXml.xsl @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/index.jsp b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/index.jsp new file mode 100644 index 000000000..1c9726909 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/index.jsp @@ -0,0 +1,5 @@ + +<%@ page language="java" contentType="text/html"%> +<% +response.sendRedirect("argeo-ria/index.html"); +%> diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/style.css b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/style.css new file mode 100644 index 000000000..102b4eea1 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/style.css @@ -0,0 +1,174 @@ +/* Generic Selectors */ +body { + font-family: sans-serif; + font-size: 12px; + color: black; + background-color: white; +} + +li { + list-style-type: none; +} + +h1 { + font-family: sans-serif; + font-size: 16px; + font-weight: bold; + color: #000000; + padding: 0px 0px 5px 0px; + margin: 0px; +} + +h2 { + font-family: sans-serif; + font-size: 14px; + font-weight: bold; + color: #000000; + padding: 5px 0px 5px 0px; + margin: 0px; + margin-top: 5px; +} + +/* Special titles */ +h3.executionStep{ + font-family: sans-serif; + font-size: 10px; + font-style: italic; + color: #000000; + padding: 5px 0px 5px 0px; + margin: 0px; + margin-top: 5px; +} + +table,form { + margin: 0px; +} + +img { + border: none; +} + +div { + font-size: 100%; +} + +tr.list:hover { + background-color: lightgrey; +} + +td.list { + border-top: 1px solid lighgrey; + padding: 2px 20px 2px 2px; + padding-right: 15px; +} + +th { + font-size: 12px; + padding: 2px 20px 2px 2px; + vertical-align: top; + text-align: left; +} + +td { + font-size: 12px; + padding: 1px; + vertical-align: middle; + text-align: left; +} + +.passed { + color: green; +} + +.failed { + color: red; +} + +.error { + color: purple; +} + +/**************** Navigation ****************/ +td.nav1 { + padding: 5px 0px 0px 0px; + font-size: 12px; + font-weight: bold; +} + +td.nav2 { + padding: 0px 0px 0px 5px; + font-size: 12px; +} + +/**************** Forms ****************/ +input.submit { + border: solid 1px grey; + background-color: lightgrey; + align: right; +} + +input.submit:hover { + border: solid 1px #3399FF; + background-color: white; + color: #3399FF; +} + +input.std { + border: solid 1px lightgrey; + padding: 1px; + margin: 2px; +} + +.formError { + color: red; + padding: 1px; + margin: 2px; + font-weight: bold; +} + +/**************** Pseudo classes ****************/ +a:link { + color: #0066CC; + text-decoration: none; +} + +a:visited { + color: #0066CC; + text-decoration: none; +} + +a:hover { + color: #3399FF; + text-decoration: none; +} + +/************************* ID's *************************/ +#main { + position: absolute; + margin-left: 120px; + padding-top: 110px; +} + +#navigation { + position: absolute; + width: 100px; + height: 800px; + border-right: 1px solid #0066CC; + font-weight: normal; + margin-top: 110px; + margin-left: 10px; +} + +#banner { + position: absolute; + width: 400px; + height: 100px; +} + +#upperRight { + position: absolute; + top: 0; + right: 0; + margin-top: 20px; + margin-right: 10px; +} \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/META-INF/MANIFEST.MF b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/META-INF/MANIFEST.MF new file mode 100644 index 000000000..a6623f905 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/META-INF/MANIFEST.MF @@ -0,0 +1,19 @@ +Manifest-Version: 1.0 +Archiver-Version: Plexus Archiver +Created-By: Apache Maven +Built-By: mbaudier +Build-Jdk: 1.6.0_0 +Web-ContextPath: simple-web-app +Bundle-ManifestVersion: 2 +Bundle-Name: Simple OSGi War +Bundle-SymbolicName: org.springframework.osgi.samples.simplewebapp +Bundle-ClassPath: WEB-INF/classes +Import-Package: javax.servlet,javax.servlet.http, + javax.servlet.resources,javax.servlet.jsp, + javax.servlet.jsp.jstl.core,javax.ser + vlet.jsp.jstl.fmt,javax.servlet.jsp.jstl.tlv, + org.apache.taglibs.standard.resources,org.apa + che.taglibs.standard.tag.common.core,org.apache.tagli + bs.standard.tag.rt.core,org.apache.taglibs.standard.t + ei,org.apache.taglibs.standard.tlv + diff --git a/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/log4j.properties b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/log4j.properties new file mode 100644 index 000000000..92f4b2541 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/log4j.properties @@ -0,0 +1,9 @@ +log4j.rootCategory=WARN, stdout +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout.ConversionPattern=%t %p [%c{2}] - %m%n +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.threshold=TRACE + + +log4j.logger.org.springframework.osgi=INFO +#log4j.logger.org.springframework=TRACE diff --git a/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/org/springframework/osgi/samples/simplewebapp/servlet/HelloOsgiWorldServlet.class b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/org/springframework/osgi/samples/simplewebapp/servlet/HelloOsgiWorldServlet.class new file mode 100644 index 0000000000000000000000000000000000000000..47bb073482a5db2d2bf1843c5aa2f4a7c0f2a79a GIT binary patch literal 1984 zcmb_d?NZxD6g_JjB#eO6iIbAHsYwDgU?Ony(Zq_=h9-Q(-~&~_nv$9?E25Ye)|K!JYM8cM0FV7;$|Kfa7)K+ z9e0ND9qy`dPe&~e3-@)@bv)4Vy@nt17(rFXLp3hy_)(3IbUfCuq+yw1&~klO))}(p z=`DubqHs9FSi|-Cdat|9!%chJqnScO?AYFx9lGi{oy^IO8!@akMA$Z?AawoqZfJM; zTM_Dv$VQeH?V~=?XqRYg=kLkWq9&G9uS5r zpFR~Q0I9Htwq!UT_vi|9rP((-`RTmrX`}ri6R)KvnmTLE2iuKCTrLV*==LFF_eC(cIV0&=}B zMRH6rL6>lmZf0NrEfy?yUNC5Z(U(!;#jPsNdY??>q{Tih>w?Xu-68ak92Wh-cD{`3n zS9Qu%XZkGE#!Wtp"); + out.println("Hello Osgi World"); + out.println(""); + out.println("

Hello OSGi World

"); + out.println("

http method used:" + method + "

"); + out.println(""); + } +} diff --git a/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/org/springframework/osgi/samples/simplewebapp/servlet/ResourceServingServlet.class b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/WEB-INF/classes/org/springframework/osgi/samples/simplewebapp/servlet/ResourceServingServlet.class new file mode 100644 index 0000000000000000000000000000000000000000..54b53127921422f7b65e359cdb2ae42520bf72b1 GIT binary patch literal 4292 zcmb_f`Fk5z6+I(M8daWnQMM{+9A)z=TPaN`b&SC=iR0qf#&(=0A%w9smM4{Gl$nv^ z(iYOPgf(o1lClKK;!*-MP~@tChP8#VmF17%SN;LQc{8KMjzbC`pFhv?<}T-+d*8iJ zul?(#mjUd>-=j!jE{Y!L5uB;VL&!yNydLu~qG*LFF8K(~Mq$AgVon4FvA7`PToesL zw*iad^04^)zIr@@Mj%f+OK{G?K#u44nMho*Znl+`)pTD5fX?k@(NIo*~pI$~Pc zl${qoXDxMJJ7-!CrA#}kr)+gTpVRD=t&96PZAQ)KQ?_O;eMd znW#eOlx^Zr%M@MmGL#woH55un;|u1HOB`(Y|NSxHnexFnK+wlXk~_I zGi@4%mKH`O-05i;iVq*- zSi#8`9F~)&&eMQGH8*9W%(8?{Io);!7F0bailPjb718yE*%BFv=#FNoj%kq%4|2iL zbE#o}m3|v-({i*-jfch>!AZAhHfD4?Z7yimAv2fJEVANg1|!?;VM)0*g{Y@lyH8vY z<~s zTwKAifFkMqA7;^bTuazkk*zgA0Y|l1PfSEbV1+T3&7_;IL%P_*Tg&{3958vkJb8=M=mP6XYPJ;Cr~j@K$%W1BKaH z%~J4v{6N7E1%~HwRmP7L{1`7V>Pi47CER~1VVF*0)+`wRHJqO)C}LU0iwa73Nx?NN zDflUVrr>4a^tyohbNoWVdvIF8FL5s`#l`9t+mxlTw>b)q;X#6Ov_&VC&#Ag0<5vnM z@oO2sQSb_0Rq$KOa-su_X_@iKPvbWuE_Yag4eMm<1Y&SDp34Qc>KS1UkNP& z#jRWJO#*(WsPsGu>)kj+xsTPXw*F_kOqt)18d=h{Wh`Nj-y^H2)^1OGZs)@9ehNK| zt71~I#YkxNH|UC%aC4X7DBxI~=eEmfMpkTn&P;C89V@-A0gatk3`Zx&-o0@xXWaBr zj%mxWkLkkjnnEY&nd6fkMnZBeD>p&*wh8-Z#4)`i0qe6mfZR^D$o7%A6~Dd&E!?$c zkQEE{v|8SD5_aAiojkyv zlg^o9%C2*xEzcmfw6ezPQ5UNUR>zM#r`n@zA8yI94uXdJvhwUOHgkpt1Trh4Ehl4~ zGm1Ryx^+g%n5bB%W>{M*iqALNL8lQ`o?oBU9bO%1?nz0d{suRKRfCO8oU=IRd7sS{ z>^bbr5@G`|}X-sHY1e7~pWJ%k9qaX9h%W=f=Zmv|3#EEa!4)Wtni+V?-WkZ=%(2tY*9&AXtWE>`zEZvj*ZxUYtQIv;&NOm#|8 zRZ251nL4Fp2|=FRyJDdd!U6OKDy^8kkvfzfYU~Ho&T{XKm9x7r}Z#W*V zD`Imp9xmd}65;{4k6TLE8bGI5y{mf}+q#Qrsiy1!#282)!|6veld_X(X=hsYlBZsV zJkD&N!aFg85&kwif(u-^$b-d`n80OD-{&xe7dV<<#DgwrhiT~|e{3D5UYMH4@Bp<# zf~-mzlxWKXInrn_rKTH9Kizk*LmVg3A*^SoIN^siR0(ScCmD>`AVYXJ + + + Simple Osgi WebApp Bundle + Simple OSGi War + + + index.html + + + + HelloOsgiWorldServlet + + org.springframework.osgi.samples.simplewebapp.servlet.HelloOsgiWorldServlet + + + + + ResourceServlet + + org.springframework.osgi.samples.simplewebapp.servlet.ResourceServingServlet + + + + + HelloOsgiWorldServlet + /helloWorldServlet + + + + ResourceServlet + /resourceServlet + + + diff --git a/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/hello-osgi-world.jsp b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/hello-osgi-world.jsp new file mode 100644 index 000000000..10f396e16 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/hello-osgi-world.jsp @@ -0,0 +1,52 @@ +<%@ page info="a hello world example" %> +<%@ page import="java.util.*,java.text.*"%> + + + + + + Hello OSGi World + + + +
+

Hello <%=request.getRemoteAddr()%>, from OSGi World!

+

This JSP page (if properly compiled), should display various information about the current HTTP session. + +

HTTP Session info

+ + <% + Format formatter = DateFormat.getDateTimeInstance(); + %> + + + + + +
Id: <%=session.getId()%>
Creation Date:<%=formatter.format(new Date(session.getCreationTime()))%>
MaxInactiveInterval:<%=session.getMaxInactiveInterval()%> sec
+

Session Attributes

+ + + + <% + for (Enumeration attributeNames = session.getAttributeNames(); attributeNames.hasMoreElements();) { + String attributeName = (String) attributeNames.nextElement(); + Object attributeValue = session.getAttribute(attributeName); + %> + + + <% + } + %> +
NameValue
<%=attributeName%><%=attributeValue%>
+ + + + + + + + +
+ + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/images/bullet.gif b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/images/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..5909c25b397bb899de0dc010cb1b564b90175893 GIT binary patch literal 2954 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
uTn$C2QX$lHQP1j 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 literal 0 HcmV?d00001 diff --git a/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/index.html b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/index.html new file mode 100644 index 000000000..b34144cb4 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/index.html @@ -0,0 +1,110 @@ +Spring-DM Samples: Simple WebApp + + +Hello OSGi World + + + + + +
+

+ Spring-DM Simple OSGi Web Application +

+ +

Introduction

+ This application demonstrates the use of web applications (WARs) + inside OSGi through Spring Dynamic Modules. + You can view static resources (like this page), servlets and + JSPs. The next section describes the dynamic pages available in this WAR. + +

Sample content

+ +

You can select one of the following links to interact with the servlets and JSPs + available in this sample. +

+ +

Servlets

+ + The application contains two servlets: +
+ +

Java Server Pages

+ The sample application provides two types of Java Server Pages: +
    +
  • A bare-bone page that accesses the session
  • +
  • A tag-based page that uses the standard taglib
  • +
+ + +

+ While the servlets/pages are simplistic, they show the main functionality working inside an OSGi platform. + +

Sources

+ To view the Servlet and JSP sources directly from the browser, use one of the links above. The content itself + is served through a Servlet (the Content Servlet below) that sends to the browser the content of the files + found in its bundle classpath. + + + +

Requirements

+ + This sample requires: +
    +
  • an OSGi 4.0+ platform
  • +
  • Spring-DM 1.1 + dependencies
  • +
  • Apache Tomcat 5.5.x+
  • +
  • Apache Jasper 2 Engine
  • +
+ + Note that all the dependencies are automatically downloaded when running the sample. + + + + + + + + +
+ + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/jsp-tag-osgi-world.jsp b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/jsp-tag-osgi-world.jsp new file mode 100644 index 000000000..cf27a1478 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/jsp-tag-osgi-world.jsp @@ -0,0 +1,52 @@ +<%@ page info="an OSGi JSP page with taglibs" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + + + + Hello OSGi World + + + +
+

JSP taglibs page

+ +

This JSP page uses the standard JSTL core taglib to display +the information about the user request. Since the WAR is deployed as an OSGi bundle, the taglib does not have to +be nested inside the WAR and can be deployed, as a stand alone bundle which is then imported. + +

Browser Information

+ + +

Header info:

+ + + + + + + + + + + + + + +
NameValue
+ +
+ + + + + + + + + +
+ + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/styles/springsource.css b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/styles/springsource.css new file mode 100644 index 000000000..1757cdba2 --- /dev/null +++ b/server/org.argeo.slc.siteserver/bundles/simple-webapp.war/styles/springsource.css @@ -0,0 +1,154 @@ +body, div, td { + font-family:Arial, Helvetica, sans-serif; + font-size:12px; + color:#666; +} + +body { + background-color: #fff; + background-image: url(../images/springsource_banner.png); + background-position: top center; + background-repeat: no-repeat; + text-align:center; + min-width:600px; + margin-left: auto; + margin-right: auto; +} + +h1{ + font-family:Helvetica, sans-serif; + color:#7db223; + font-size:20px; + line-height:40px; +} + +h2{ + font-family:Helvetica, sans-serif; + color:#7db223; + font-size:18px; + line-height:36px; +} + +h3{ + font-family:Helvetica, sans-serif; + color:#7db223; + font-size:15px; + line-height:32px; +} + +a:link{color:#7db223; text-decoration:underline; font-size:13px;} +a:hover{color:#456314; text-decoration:underline; font-size:13px;} +a:active{color:#7db223; text-decoration:underline; font-size:13px;} +a:visited{color:#7db223; text-decoration:underline; font-size:13px;} + +ul { + list-style: disc url(../images/bullet.gif); +} + +li { + padding-top:5px; +} + +li ul { + list-style: square url(images/sub-bullet.gif); +} + +li ul li ul { + list-style: circle none; +} + +#main_wrapper { + margin:0 auto; + position:relative; + top: 85px; + left:20px; + width:600px; + text-align:left; +} + +table { + background:#e0e7d3; + margin: 0; + border: 4px solid #e0e7d3; + border-collapse: collapse; +} + +table table { + margin: -5px 0; + border: 0px solid #e0e7d3; + width:100%; +} + +table td, table th { + padding:8px; +} + +table th { + font-size:12px; + text-align: left; + font-weight: bold; +} + +table thead { + font-weight:bold; + font-style:italic; + background-color:#c9d3b8; +} + +caption { + caption-side: top; + width: auto; + text-align: left; + font-size:12px; + color:#848f73; + padding-bottom:4px; +} + + +fieldset { + background:#e0e7d3; + padding:8px; + padding-bottom:22px; + border: none; + width:560px; +} + +fieldset label { + width:70px; + float:left; + margin-top:1.7em; + margin-left:20px; +} + +fieldset textfield { + margin:3px; + height:20px; + background:#e4eadb; +} + +fieldset textarea { + margin:3px; + height:165px; + background:#e4eadb; +} + +fieldset input { + margin:3px; + height:20px; + background:#e4eadb; +} + +fieldset table{width:100%;} +fieldset th{padding-left:25px;} + +.footer { + background:#fff; + border:none; + margin-top:20px; + border-top:1px solid #999999; + width:100%; +} + +.footer td {color:#999999;} + +.footer a:link {color: #7db223;} \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/pom.xml b/server/org.argeo.slc.siteserver/pom.xml index 0d0a10979..28e3c033c 100644 --- a/server/org.argeo.slc.siteserver/pom.xml +++ b/server/org.argeo.slc.siteserver/pom.xml @@ -10,6 +10,10 @@ org.argeo.slc.siteserver pom Argeo SLC Site server + + 1.1.3 + 2.5.5 + @@ -45,18 +49,264 @@ + + + maven-antrun-plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - org.argeo.slc - org.argeo.slc.webapp - war + org.argeo.slc.runtime + org.argeo.slc.server + + + + + org.hsqldb + com.springsource.org.hsqldb + + + + + org.eclipse.osgi + org.eclipse.osgi + + + + javax.annotation + com.springsource.javax.annotation + + + javax.persistence + com.springsource.javax.persistence + + + javax.xml.ws + com.springsource.javax.xml.ws + + + javax.xml.bind + com.springsource.javax.xml.bind + + + + + + + + org.apache.commons + com.springsource.org.apache.commons.logging + + + org.apache.log4j + + com.springsource.org.apache.log4j + + + + + org.springframework.osgi + catalina.osgi + 5.5.23-SNAPSHOT + + + + org.springframework.osgi + catalina.start.osgi + 1.0.0 + + + org.springframework.osgi + jasper.osgi + 5.5.23-SNAPSHOT + + + + org.springframework.osgi + commons-el.osgi + 1.0-SNAPSHOT + + + + org.springframework.osgi + jstl.osgi + 1.1.2-SNAPSHOT + + + org.springframework.osgi + servlet-api.osgi + 2.5-SNAPSHOT + jar + + + org.springframework.osgi + jsp-api.osgi + 2.0-SNAPSHOT + jar + + + + org.springframework.osgi + spring-osgi-web + ${spring-osgi.version} + + + + org.springframework.osgi + spring-osgi-web-extender + ${spring-osgi.version} + + + + org.springframework.osgi + spring-osgi-extender + ${spring-osgi.version} + + + + org.aopalliance + com.springsource.org.aopalliance + 1.0.0 + + + + org.springframework + spring-web + ${spring.version} - org.apache.archiva - archiva-webapp - war + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-webmvc + ${spring.version} + + + + + + com.sun.xml + + com.springsource.com.sun.xml.messaging.saaj + + + + + + org.mortbay.jetty + com.springsource.org.mortbay.util + 6.1.9 + + + + + org.argeo.slc + org.argeo.slc.detached.launcher + ${project.version} + + + + + + spring-osgified-artifacts + + true + + Springframework Maven OSGified Artifacts Repository + http://maven.springframework.org/osgi + + \ No newline at end of file -- 2.39.2