gatein SVN: r651 - tools/packager/tags.
by do-not-reply@jboss.org
Author: dbaeli
Date: 2009-11-18 12:34:29 -0500 (Wed, 18 Nov 2009)
New Revision: 651
Added:
tools/packager/tags/1.0.0-Beta01/
Log:
1.0.0-Beta01 release
Copied: tools/packager/tags/1.0.0-Beta01 (from rev 650, tools/packager/trunk)
16 years, 5 months
gatein SVN: r649 - portal/branches.
by do-not-reply@jboss.org
Author: chris.laprun(a)jboss.com
Date: 2009-11-18 11:21:00 -0500 (Wed, 18 Nov 2009)
New Revision: 649
Added:
portal/branches/wsrp-integration/
Log:
Recreating wsrp-integration branch from revision 648.
Copied: portal/branches/wsrp-integration (from rev 648, portal/trunk)
16 years, 5 months
gatein SVN: r648 - portal/branches.
by do-not-reply@jboss.org
Author: chris.laprun(a)jboss.com
Date: 2009-11-18 11:17:28 -0500 (Wed, 18 Nov 2009)
New Revision: 648
Removed:
portal/branches/wsrp-integration/
Log:
Removing obsolete branch version to prepare for new branch.
16 years, 5 months
gatein SVN: r645 - in components/wsrp/trunk/consumer: src/main/java/org/gatein/wsrp and 6 other directories.
by do-not-reply@jboss.org
Author: chris.laprun(a)jboss.com
Date: 2009-11-18 10:37:08 -0500 (Wed, 18 Nov 2009)
New Revision: 645
Added:
components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/InMemoryConsumerRegistry.java
Modified:
components/wsrp/trunk/consumer/pom.xml
components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/WSRPConsumer.java
components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/ProducerInfo.java
components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/WSRPConsumerImpl.java
components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/AbstractConsumerRegistry.java
components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/ConsumerRegistry.java
components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/xml/XMLConsumerRegistry.java
components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/xml/XMLWSRPConsumerFactory.java
components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/ProducerInfoTestCase.java
components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/registry/ConsumerRegistryTestCase.java
components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/test/support/MockConsumerRegistry.java
components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/test/support/MockWSRPConsumer.java
Log:
- Significantly rewrote AbstractConsumerRegistry to better support different persistence scenarii.
- Updated ConsumerRegistryTestCase, added more tests and activated it.
- Made ProducerInfo key a String instead of a Long for better interoperability between persistence modalities.
- Added equals and hashCode methods on ProducerInfo and WSRPConsumerImpl.
- Remove WSRPConsumer.setProducerInfo method.
- Added ConsumerRegistry.getProducerInfoByKey method.
- Added InMemoryConsumerRegistry implementation.
Modified: components/wsrp/trunk/consumer/pom.xml
===================================================================
--- components/wsrp/trunk/consumer/pom.xml 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/pom.xml 2009-11-18 15:37:08 UTC (rev 645)
@@ -109,7 +109,6 @@
<configuration>
<excludes>
<exclude>org/gatein/wsrp/protocol/v1/*</exclude>
- <exclude>org/gatein/wsrp/consumer/registry/ConsumerRegistryTestCase*</exclude>
</excludes>
</configuration>
</plugin>
Modified: components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/WSRPConsumer.java
===================================================================
--- components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/WSRPConsumer.java 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/WSRPConsumer.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -73,12 +73,6 @@
ProducerInfo getProducerInfo();
/**
- * @param producerInfo
- * @since 2.6
- */
- void setProducerInfo(ProducerInfo producerInfo);
-
- /**
* @throws PortletInvokerException
* @since 2.6
*/
Modified: components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/ProducerInfo.java
===================================================================
--- components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/ProducerInfo.java 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/ProducerInfo.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -74,8 +74,8 @@
// Persistent information
- /** DB primary key */
- private Long key;
+ /** persistence key */
+ private String key;
/** Configuration of the remote WS endpoints */
private EndpointConfigurationInfo persistentEndpointInfo;
@@ -130,6 +130,51 @@
persistentRegistrationInfo = RegistrationInfo.createUndeterminedRegistration(this);
}
+ @Override
+ public boolean equals(Object o)
+ {
+ if (this == o)
+ {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass())
+ {
+ return false;
+ }
+
+ ProducerInfo that = (ProducerInfo)o;
+
+ if (key != null ? !key.equals(that.key) : that.key != null)
+ {
+ return false;
+ }
+ if (!persistentId.equals(that.persistentId))
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int result = key != null ? key.hashCode() : 0;
+ result = 31 * result + persistentId.hashCode();
+ return result;
+ }
+
+ @Override
+ public String toString()
+ {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("ProducerInfo");
+ sb.append("{key='").append(key).append('\'');
+ sb.append(", id='").append(persistentId).append('\'');
+ sb.append('}');
+ return sb.toString();
+ }
+
public ConsumerRegistry getRegistry()
{
return registry;
@@ -140,12 +185,12 @@
this.registry = registry;
}
- public Long getKey()
+ public String getKey()
{
return key;
}
- public void setKey(Long key)
+ public void setKey(String key)
{
this.key = key;
}
@@ -251,6 +296,7 @@
}
// FIX-ME: remove when a better dirty management is in place at property level
+
public void setModifyRegistrationRequired(boolean modifyRegistrationRequired)
{
this.isModifyRegistrationRequired = modifyRegistrationRequired;
@@ -832,6 +878,7 @@
}
// make package only after package reorg
+
public PortletPropertyDescriptionResponse getPropertyDescriptionsFor(String portletHandle)
{
ParameterValidation.throwIllegalArgExceptionIfNullOrEmpty(portletHandle, "portlet handle", null);
Modified: components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/WSRPConsumerImpl.java
===================================================================
--- components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/WSRPConsumerImpl.java 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/WSRPConsumerImpl.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -135,11 +135,6 @@
return producerInfo;
}
- public void setProducerInfo(ProducerInfo producerInfo)
- {
- this.producerInfo = producerInfo;
- }
-
// PortletInvoker implementation ************************************************************************************
public Set getPortlets() throws InvokerUnavailableException
@@ -622,6 +617,7 @@
}
// fix-me!
+
org.oasis.wsrp.v1.UserContext getUserContextFrom(PortletInvocation invocation, RuntimeContext runtimeContext) throws PortletInvokerException
{
// first decide if we need to pass the user context...
@@ -676,4 +672,28 @@
{
sessionHandler.onSessionEvent(event);
}
+
+ @Override
+ public boolean equals(Object o)
+ {
+ if (this == o)
+ {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass())
+ {
+ return false;
+ }
+
+ WSRPConsumerImpl that = (WSRPConsumerImpl)o;
+
+ return producerInfo.equals(that.producerInfo);
+
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return producerInfo.hashCode();
+ }
}
Modified: components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/AbstractConsumerRegistry.java
===================================================================
--- components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/AbstractConsumerRegistry.java 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/AbstractConsumerRegistry.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -37,8 +37,12 @@
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
@@ -52,7 +56,8 @@
/** Gives access to the Portal's portlet invokers */
private FederatingPortletInvoker federatingPortletInvoker;
- protected SortedMap<String, WSRPConsumer> consumers;
+ private SortedMap<String, WSRPConsumer> consumers;
+ private Map<String, String> keysToIds;
private SessionEventBroadcaster sessionEventBroadcaster;
@@ -61,6 +66,11 @@
private static final Logger log = LoggerFactory.getLogger(AbstractConsumerRegistry.class);
+ protected AbstractConsumerRegistry()
+ {
+ initConsumers(null);
+ }
+
public FederatingPortletInvoker getFederatingPortletInvoker()
{
return federatingPortletInvoker;
@@ -117,7 +127,7 @@
}
deactivateConsumer(consumer);
- consumers.remove(id);
+ remove(consumer);
delete(info);
}
@@ -145,10 +155,23 @@
this.federatingPortletInvoker = federatingPortletInvoker;
}
+ public ProducerInfo getProducerInfoByKey(String key)
+ {
+ String id = keysToIds.get(key);
+ if (id != null)
+ {
+ return getConsumer(id).getProducerInfo();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
private WSRPConsumer createConsumerFrom(ProducerInfo producerInfo)
{
WSRPConsumer consumer = new WSRPConsumerImpl(producerInfo);
- consumers.put(producerInfo.getId(), consumer);
+ add(consumer);
return consumer;
}
@@ -212,11 +235,11 @@
String oldId = update(producerInfo);
- // if we updated and oldId is not null, we need to update the local consumers map
+ // if we updated and oldId is not null, we need to update the local information
if (oldId != null)
{
- WSRPConsumer consumer = consumers.remove(oldId);
- consumers.put(producerInfo.getId(), consumer);
+ remove(getConsumer(oldId));
+ createConsumerFrom(producerInfo);
}
}
@@ -228,7 +251,7 @@
public void reloadConsumers()
{
// load the configured consumers
- consumers = new TreeMap<String, WSRPConsumer>();
+ initConsumers(null);
Iterator<ProducerInfo> producerInfos = getProducerInfosFromStorage();
@@ -262,7 +285,7 @@
public void stop() throws Exception
{
- for (WSRPConsumer consumer : consumers.values())
+ for (WSRPConsumer consumer : getConsumers())
{
// if producer is not active, it shouldn't be registered with the federating portlet invoker, hence do not
// unregister it.
@@ -281,13 +304,12 @@
}
}
- consumers.clear();
- consumers = null;
+ clearConsumers();
}
public List<WSRPConsumer> getConfiguredConsumers()
{
- return new ArrayList<WSRPConsumer>(consumers.values());
+ return new ArrayList<WSRPConsumer>(getConsumers());
}
public WSRPConsumer getConsumer(String id)
@@ -384,4 +406,74 @@
protected abstract String update(ProducerInfo producerInfo);
protected abstract Iterator<ProducerInfo> getProducerInfosFromStorage();
+
+ // internal management methods
+
+ private void add(WSRPConsumer consumer)
+ {
+ String id = consumer.getProducerId();
+ consumers.put(id, consumer);
+ ProducerInfo info = consumer.getProducerInfo();
+ keysToIds.put(info.getKey(), id);
+ }
+
+ protected WSRPConsumer remove(WSRPConsumer consumer)
+ {
+ String id = keysToIds.remove(consumer.getProducerInfo().getKey());
+ return consumers.remove(id);
+ }
+
+ protected Collection<WSRPConsumer> getConsumers()
+ {
+ return consumers.values();
+ }
+
+ protected Map<String, String> getKeyMappings()
+ {
+ return Collections.unmodifiableMap(keysToIds);
+ }
+
+ protected void initConsumers(SortedMap<String, WSRPConsumer> consumers)
+ {
+ if (!ParameterValidation.existsAndIsNotEmpty(consumers))
+ {
+ consumers = new TreeMap<String, WSRPConsumer>();
+ }
+ this.consumers = consumers;
+ int size = consumers.size();
+ keysToIds = size == 0 ? new HashMap<String, String>() : new HashMap<String, String>(size);
+ }
+
+ private void clearConsumers()
+ {
+ consumers.clear();
+ keysToIds.clear();
+ consumers = null;
+ keysToIds = null;
+ }
+
+ protected class ProducerInfoIterator implements Iterator<ProducerInfo>
+ {
+ private Iterator<WSRPConsumer> consumers;
+
+ public ProducerInfoIterator(Iterator<WSRPConsumer> consumers)
+ {
+ this.consumers = consumers;
+ }
+
+ public boolean hasNext()
+ {
+ return consumers.hasNext();
+ }
+
+ public ProducerInfo next()
+ {
+ return consumers.next().getProducerInfo();
+ }
+
+ public void remove()
+ {
+ throw new UnsupportedOperationException("remove not supported on this iterator implementation");
+ }
+ }
}
Modified: components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/ConsumerRegistry.java
===================================================================
--- components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/ConsumerRegistry.java 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/ConsumerRegistry.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -74,4 +74,6 @@
void setSessionEventBroadcaster(SessionEventBroadcaster sessionEventBroadcaster);
void setFederatingPortletInvoker(FederatingPortletInvoker federatingPortletInvoker);
+
+ ProducerInfo getProducerInfoByKey(String key);
}
\ No newline at end of file
Added: components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/InMemoryConsumerRegistry.java
===================================================================
--- components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/InMemoryConsumerRegistry.java (rev 0)
+++ components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/InMemoryConsumerRegistry.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -0,0 +1,61 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2008, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+package org.gatein.wsrp.consumer.registry;
+
+import org.gatein.wsrp.consumer.ProducerInfo;
+
+import java.util.Iterator;
+import java.util.UUID;
+
+/**
+ * @author <a href="mailto:chris.laprun@jboss.com">Chris Laprun</a>
+ * @version $Revision$
+ */
+public class InMemoryConsumerRegistry extends AbstractConsumerRegistry
+{
+ @Override
+ protected void save(ProducerInfo info, String messageOnError)
+ {
+ // generate a UUID for ProducerInfo
+ info.setKey(UUID.randomUUID().toString());
+ }
+
+ @Override
+ protected void delete(ProducerInfo info)
+ {
+ // nothing to do here
+ }
+
+ @Override
+ protected String update(ProducerInfo producerInfo)
+ {
+ String key = producerInfo.getKey();
+ return getKeyMappings().get(key);
+ }
+
+ @Override
+ protected Iterator<ProducerInfo> getProducerInfosFromStorage()
+ {
+ return new ProducerInfoIterator(getConsumers().iterator());
+ }
+}
Modified: components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/xml/XMLConsumerRegistry.java
===================================================================
--- components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/xml/XMLConsumerRegistry.java 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/xml/XMLConsumerRegistry.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -39,7 +39,6 @@
import java.net.URL;
import java.util.Iterator;
import java.util.SortedMap;
-import java.util.TreeMap;
/**
* @author <a href="mailto:chris.laprun@jboss.com">Chris Laprun</a>
@@ -54,11 +53,6 @@
private EntityResolver entityResolver;
- public XMLConsumerRegistry()
- {
- consumers = new TreeMap<String, WSRPConsumer>();
- }
-
public EntityResolver getEntityResolver()
{
return entityResolver;
@@ -94,14 +88,14 @@
try
{
unmarshaller.setEntityResolver(entityResolver);
- consumers = (SortedMap<String, WSRPConsumer>)unmarshaller.unmarshal(inputStream, factory, null);
+ initConsumers((SortedMap<String, WSRPConsumer>)unmarshaller.unmarshal(inputStream, factory, null));
}
catch (JBossXBException e)
{
throw new RuntimeException("Couldn't set unmarshall WSRP Consumers configuration", e);
}
- for (WSRPConsumer consumer : consumers.values())
+ for (WSRPConsumer consumer : getConsumers())
{
ProducerInfo producerInfo = consumer.getProducerInfo();
@@ -125,7 +119,7 @@
@Override
public void stop() throws Exception
{
- for (WSRPConsumer consumer : consumers.values())
+ for (WSRPConsumer consumer : getConsumers())
{
consumer.stop();
}
@@ -152,36 +146,6 @@
@Override
protected Iterator<ProducerInfo> getProducerInfosFromStorage()
{
- return new ProducerInfoIterator(consumers.values().iterator());
+ return new ProducerInfoIterator(getConsumers().iterator());
}
-
- SortedMap<String, WSRPConsumer> getConsumers()
- {
- return consumers;
- }
-
- class ProducerInfoIterator implements Iterator<ProducerInfo>
- {
- private Iterator<WSRPConsumer> consumers;
-
- ProducerInfoIterator(Iterator<WSRPConsumer> consumers)
- {
- this.consumers = consumers;
- }
-
- public boolean hasNext()
- {
- return consumers.hasNext();
- }
-
- public ProducerInfo next()
- {
- return consumers.next().getProducerInfo();
- }
-
- public void remove()
- {
- throw new UnsupportedOperationException("remove not supported on this iterator implementation");
- }
- }
}
Modified: components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/xml/XMLWSRPConsumerFactory.java
===================================================================
--- components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/xml/XMLWSRPConsumerFactory.java 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/consumer/registry/xml/XMLWSRPConsumerFactory.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -69,12 +69,6 @@
public Object newRoot(Object root, UnmarshallingContext nav, String nsURI, String localName, Attributes attrs)
{
- if (consumerRegistry instanceof XMLConsumerRegistry)
- {
- XMLConsumerRegistry registry = (XMLConsumerRegistry)consumerRegistry;
- return registry.getConsumers();
- }
-
return new TreeMap<String, WSRPConsumer>();
}
Modified: components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/ProducerInfoTestCase.java
===================================================================
--- components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/ProducerInfoTestCase.java 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/ProducerInfoTestCase.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -68,6 +68,7 @@
{
info = new ProducerInfo();
info.setId("test");
+ info.setKey("key");
serviceFactory = new BehaviorBackedServiceFactory();
EndpointConfigurationInfo eci = new EndpointConfigurationInfo(serviceFactory);
Modified: components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/registry/ConsumerRegistryTestCase.java
===================================================================
--- components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/registry/ConsumerRegistryTestCase.java 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/registry/ConsumerRegistryTestCase.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -24,13 +24,12 @@
package org.gatein.wsrp.consumer.registry;
import junit.framework.TestCase;
+import org.gatein.pc.federation.impl.FederatingPortletInvokerService;
import org.gatein.wsrp.WSRPConsumer;
import org.gatein.wsrp.consumer.ConsumerException;
import org.gatein.wsrp.consumer.EndpointConfigurationInfo;
import org.gatein.wsrp.consumer.ProducerInfo;
import org.gatein.wsrp.consumer.RegistrationInfo;
-import org.gatein.wsrp.consumer.registry.xml.XMLConsumerRegistry;
-import org.jboss.unit.api.pojo.annotations.Test;
import java.util.Collection;
@@ -39,24 +38,19 @@
* @version $Revision: 12686 $
* @since 2.6
*/
-@Test
public class ConsumerRegistryTestCase extends TestCase
{
- private ConsumerRegistry registry = new XMLConsumerRegistry();
+ private ConsumerRegistry registry;
- public ConsumerRegistry getRegistry()
+ @Override
+ protected void setUp() throws Exception
{
- return registry;
+ registry = new InMemoryConsumerRegistry();
+ registry.setFederatingPortletInvoker(new FederatingPortletInvokerService());
}
- public void setRegistry(ConsumerRegistry registry)
+ public void testCreateAndGet()
{
- this.registry = registry;
- }
-
- public void testCRUD()
- {
-// TransactionAssert.beginTransaction();
String id = "test";
WSRPConsumer consumer = registry.createConsumer(id, null);
assertNotNull(consumer);
@@ -68,9 +62,48 @@
assertNotNull(endpoint);
RegistrationInfo regInfo = info.getRegistrationInfo();
assertTrue(regInfo.isUndetermined());
-// TransactionAssert.commitTransaction();
-// TransactionAssert.beginTransaction();
+ WSRPConsumer fromRegistry = registry.getConsumer(id);
+ assertNotNull(fromRegistry);
+ assertEquals(consumer.getProducerId(), fromRegistry.getProducerId());
+ ProducerInfo fromRegistryInfo = fromRegistry.getProducerInfo();
+ assertNotNull(fromRegistryInfo);
+ assertEquals(fromRegistry.getProducerId(), fromRegistryInfo.getId());
+ assertNotNull(fromRegistryInfo.getEndpointConfigurationInfo());
+ assertTrue(fromRegistryInfo.getRegistrationInfo().isUndetermined());
+
+ assertEquals(info.getId(), fromRegistryInfo.getId());
+ assertEquals(info.getEndpointConfigurationInfo(), fromRegistryInfo.getEndpointConfigurationInfo());
+ assertEquals(info.getRegistrationInfo(), fromRegistryInfo.getRegistrationInfo());
+
+ Collection consumers = registry.getConfiguredConsumers();
+ assertNotNull(consumers);
+ assertEquals(1, consumers.size());
+ assertTrue(consumers.contains(consumer));
+ }
+
+ public void testGetConsumer()
+ {
+ assertNull(registry.getConsumer("inexistent"));
+ }
+
+ public void testGetProducerInfoByKey()
+ {
+ WSRPConsumer consumer = registry.createConsumer("id", null);
+ ProducerInfo info = consumer.getProducerInfo();
+
+ String key = info.getKey();
+ assertNotNull(key);
+
+ assertEquals(info, registry.getProducerInfoByKey(key));
+ }
+
+ public void testDoubleRegistrationOfConsumerWithSameId()
+ {
+ String id = "foo";
+
+ registry.createConsumer(id, null);
+
try
{
registry.createConsumer(id, null);
@@ -78,45 +111,39 @@
}
catch (ConsumerException expected)
{
- // transaction should have been rolled back
-// TransactionAssert.rollbackTransaction();
}
+ }
-// TransactionAssert.beginTransaction();
- consumer = registry.getConsumer(id);
- assertNotNull(consumer);
- assertEquals(id, consumer.getProducerId());
- info = consumer.getProducerInfo();
- assertNotNull(info);
- assertEquals(consumer.getProducerId(), info.getId());
- endpoint = info.getEndpointConfigurationInfo();
- assertNotNull(endpoint);
- assertTrue(info.getRegistrationInfo().isUndetermined());
+ public void testDelete()
+ {
+ String id = "id";
- assertNull(registry.getConsumer("inexistent"));
- Collection consumers = registry.getConfiguredConsumers();
- assertNotNull(consumers);
- assertEquals(1, consumers.size());
- assertTrue(consumers.contains(consumer));
-// TransactionAssert.commitTransaction();
+ WSRPConsumer consumer = registry.createConsumer(id, null);
+ assertEquals(consumer, registry.getConsumer(id));
+
+ String key = consumer.getProducerInfo().getKey();
+
+ registry.destroyConsumer(id);
+
+ assertNull(registry.getConsumer(id));
+ assertNull(registry.getProducerInfoByKey(key));
}
public void testUpdateProducerInfo()
{
// create a foo consumer
-// TransactionAssert.beginTransaction();
String id = "foo";
WSRPConsumer consumer = registry.createConsumer(id, null);
ProducerInfo info = consumer.getProducerInfo();
-// TransactionAssert.commitTransaction();
+ String key = info.getKey();
-// TransactionAssert.beginTransaction();
// change the id on the consumer's producer info and save it
info.setId("bar");
registry.updateProducerInfo(info);
assertNull(registry.getConsumer(id));
+ assertEquals(info, consumer.getProducerInfo());
+ assertEquals(info, registry.getProducerInfoByKey(key));
assertEquals(consumer, registry.getConsumer("bar"));
-// TransactionAssert.commitTransaction();
}
}
Modified: components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/test/support/MockConsumerRegistry.java
===================================================================
--- components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/test/support/MockConsumerRegistry.java 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/test/support/MockConsumerRegistry.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -143,4 +143,9 @@
{
//To change body of implemented methods use File | Settings | File Templates.
}
+
+ public ProducerInfo getProducerInfoByKey(String key)
+ {
+ throw new UnsupportedOperationException();
+ }
}
Modified: components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/test/support/MockWSRPConsumer.java
===================================================================
--- components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/test/support/MockWSRPConsumer.java 2009-11-18 15:36:13 UTC (rev 644)
+++ components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/test/support/MockWSRPConsumer.java 2009-11-18 15:37:08 UTC (rev 645)
@@ -81,10 +81,6 @@
return producerInfo;
}
- public void setProducerInfo(ProducerInfo producerInfo)
- {
- }
-
public void refreshProducerInfo() throws PortletInvokerException
{
}
16 years, 5 months
gatein SVN: r644 - in portal/trunk: component/portal/src/test/java/conf/portal and 26 other directories.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2009-11-18 10:36:13 -0500 (Wed, 18 Nov 2009)
New Revision: 644
Added:
portal/trunk/sample/portal/ear/src/
portal/trunk/sample/portal/ear/src/main/
portal/trunk/sample/portal/ear/src/main/application/
portal/trunk/sample/portal/ear/src/main/application/META-INF/
portal/trunk/sample/portal/ear/src/main/application/META-INF/gatein-jboss-beans.xml
portal/trunk/server/jboss/patch-ear/src/main/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml
Removed:
portal/trunk/server/jboss/patch-ear/src/main/jboss/server/default/conf/login-config.xml
Modified:
portal/trunk/component/application-registry/src/test/java/conf/portal/repository-configuration.xml
portal/trunk/component/portal/src/test/java/conf/portal/repository-configuration.xml
portal/trunk/component/resources/src/test/java/conf/portal/testjcr/test-jcr-config.xml
portal/trunk/docs/user-guide/en/modules/security/Use_Spring_Security.xml
portal/trunk/packaging/exopackage/src/main/javascript/eXo/server/Tomcat.js
portal/trunk/sample/extension/README.txt
portal/trunk/sample/extension/config/src/main/java/conf/configuration.xml
portal/trunk/sample/extension/war/src/main/webapp/WEB-INF/conf/sample-ext/jcr/repository-configuration.xml
portal/trunk/sample/extension/war/src/main/webapp/WEB-INF/jboss-web.xml
portal/trunk/sample/portal/README.txt
portal/trunk/sample/portal/config/src/main/java/conf/configuration.xml
portal/trunk/sample/portal/rest-war/src/main/webapp/WEB-INF/jboss-web.xml
portal/trunk/sample/portal/rest-war/src/main/webapp/WEB-INF/web.xml
portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/conf/sample-portal/jcr/repository-configuration.xml
portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/jboss-web.xml
portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/web.xml
portal/trunk/server/jboss/patch/src/main/jboss/server/default/deploy/exoplatform.sar/META-INF/login-config.xml
portal/trunk/server/tomcat/patch/src/main/tomcat/conf/Catalina/localhost/portal.xml
portal/trunk/server/tomcat/patch/src/main/tomcat/conf/Catalina/localhost/rest.xml
portal/trunk/server/tomcat/patch/src/main/tomcat/conf/jaas.conf
portal/trunk/web/portal/src/main/resources/tomcat/portal.xml
portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/jcr/repository-configuration.tmpl.xml
portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/jcr/repository-configuration.xml
portal/trunk/web/portal/src/main/webapp/WEB-INF/jboss-web.xml
portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml
portal/trunk/web/rest/src/main/webapp/WEB-INF/jboss-web.xml
portal/trunk/web/rest/src/main/webapp/WEB-INF/web.xml
Log:
GTNPORTAL-255: Do not Configure application policy inside server/default/conf/login-config.xml
Also included the security domain of portal-samples in its ear.
GTNPORTAL-268: Rename exo-domain -> gatein-domain
Modified: portal/trunk/component/application-registry/src/test/java/conf/portal/repository-configuration.xml
===================================================================
--- portal/trunk/component/application-registry/src/test/java/conf/portal/repository-configuration.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/component/application-registry/src/test/java/conf/portal/repository-configuration.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -23,7 +23,7 @@
<repositories>
<repository name="repository" system-workspace="system" default-workspace="collaboration">
- <security-domain>exo-domain</security-domain>
+ <security-domain>gatein-domain</security-domain>
<access-control>optional</access-control>
<!-- config for replication IPv4 -->
Modified: portal/trunk/component/portal/src/test/java/conf/portal/repository-configuration.xml
===================================================================
--- portal/trunk/component/portal/src/test/java/conf/portal/repository-configuration.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/component/portal/src/test/java/conf/portal/repository-configuration.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -22,7 +22,7 @@
<repository-service default-repository="repository">
<repositories>
<repository name="repository" system-workspace="system" default-workspace="portal-system">
- <security-domain>exo-domain</security-domain>
+ <security-domain>gatein-domain</security-domain>
<access-control>optional</access-control>
<authentication-policy>org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator</authentication-policy>
<workspaces>
@@ -170,4 +170,4 @@
</workspaces>
</repository>
</repositories>
-</repository-service>
\ No newline at end of file
+</repository-service>
Modified: portal/trunk/component/resources/src/test/java/conf/portal/testjcr/test-jcr-config.xml
===================================================================
--- portal/trunk/component/resources/src/test/java/conf/portal/testjcr/test-jcr-config.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/component/resources/src/test/java/conf/portal/testjcr/test-jcr-config.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -22,7 +22,7 @@
<repository-service default-repository="repository">
<repositories>
<repository name="repository" system-workspace="system" default-workspace="collaboration">
- <security-domain>exo-domain</security-domain>
+ <security-domain>gatein-domain</security-domain>
<access-control>enable</access-control>
<authentication-policy>org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator</authentication-policy>
<workspaces>
Modified: portal/trunk/docs/user-guide/en/modules/security/Use_Spring_Security.xml
===================================================================
--- portal/trunk/docs/user-guide/en/modules/security/Use_Spring_Security.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/docs/user-guide/en/modules/security/Use_Spring_Security.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -77,7 +77,7 @@
<login-config>
<auth-method>FORM</auth-method>
- <realm-name>exo-domain</realm-name>
+ <realm-name>gatein-domain</realm-name>
<form-login-config>
<form-login-page>/login/jsp/login.jsp</form-login-page>
<form-error-page>/login/jsp/login.jsp</form-error-page>
@@ -367,4 +367,4 @@
</programlisting>
<section><title>Conclusion</title></section>
<para>We are done! Now we know how to integrate the spring security framework in the GateIn portal. Thanks to the the great integration capabilities of both GateIn portal and Spring framework. You can have a look to the attachment section on this page and get the source code of this tutorial.</para>
-</section>
\ No newline at end of file
+</section>
Modified: portal/trunk/packaging/exopackage/src/main/javascript/eXo/server/Tomcat.js
===================================================================
--- portal/trunk/packaging/exopackage/src/main/javascript/eXo/server/Tomcat.js 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/packaging/exopackage/src/main/javascript/eXo/server/Tomcat.js 2009-11-18 15:36:13 UTC (rev 644)
@@ -100,7 +100,7 @@
// " <Manager className='org.apache.catalina.session.PersistentManager'
// saveOnRestart='false'/> \n" +
// " <Realm className='org.apache.catalina.realm.JAASRealm' \n" +
- // " appName='exo-domain' \n" +
+ // " appName='gatein-domain' \n" +
// " userClassNames='org.exoplatform.services.security.jaas.UserPrincipal'
// \n" +
// " roleClassNames='org.exoplatform.services.security.jaas.RolePrincipal'
Modified: portal/trunk/sample/extension/README.txt
===================================================================
--- portal/trunk/sample/extension/README.txt 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/sample/extension/README.txt 2009-11-18 15:36:13 UTC (rev 644)
@@ -25,8 +25,8 @@
# On JBoss (tested on JBoss 5.1.0.GA)
########################################
-We assume that you have a clean JBoss version of GateIn: ie We assume that you have already the file exoplatform.ear in the deploy directory
-of jboss and you have the retlated application policy "exo-domain" in your conf/login-config.xml
+We assume that you have a clean JBoss version of GateIn: ie We assume that you have already the file gatein.ear in the deploy directory
+of jboss
You need to:
@@ -41,7 +41,7 @@
########################################
We assume that you have a clean Tomcat version of GateIn: ie We assume that you have already all the jar files of GateIn and their dependencies
-into tomcat/lib and you have the related relam name "exo-domain" defined in the file tomcat/conf/jaas.conf
+into tomcat/lib and you have the related relam name "gatein-domain" defined in the file tomcat/conf/jaas.conf
1. Add the file sample-ext.war from sample/extension/war/target/ to the tomcat/webapps directory
2. Add the folder starter from starter/war/target/ to the tomcat/webapps directory
Modified: portal/trunk/sample/extension/config/src/main/java/conf/configuration.xml
===================================================================
--- portal/trunk/sample/extension/config/src/main/java/conf/configuration.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/sample/extension/config/src/main/java/conf/configuration.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -41,7 +41,7 @@
<!-- The name of the context name of the rest web application -->
<field name="restContextName"><string>rest</string></field>
<!-- The name of the realm -->
- <field name="realmName"><string>exo-domain</string></field>
+ <field name="realmName"><string>gatein-domain</string></field>
<!-- All the dependencies of the portal container ordered by loading priority -->
<field name="dependencies">
<collection type="java.util.ArrayList">
Modified: portal/trunk/sample/extension/war/src/main/webapp/WEB-INF/conf/sample-ext/jcr/repository-configuration.xml
===================================================================
--- portal/trunk/sample/extension/war/src/main/webapp/WEB-INF/conf/sample-ext/jcr/repository-configuration.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/sample/extension/war/src/main/webapp/WEB-INF/conf/sample-ext/jcr/repository-configuration.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -22,7 +22,7 @@
<repository-service default-repository="repository">
<repositories>
<repository name="repository" system-workspace="system" default-workspace="portal-system">
- <security-domain>exo-domain</security-domain>
+ <security-domain>gatein-domain</security-domain>
<access-control>optional</access-control>
<authentication-policy>org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator</authentication-policy>
<workspaces>
Modified: portal/trunk/sample/extension/war/src/main/webapp/WEB-INF/jboss-web.xml
===================================================================
--- portal/trunk/sample/extension/war/src/main/webapp/WEB-INF/jboss-web.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/sample/extension/war/src/main/webapp/WEB-INF/jboss-web.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -21,5 +21,5 @@
-->
<jboss-web>
- <security-domain>java:/jaas/exo-domain</security-domain>
+ <security-domain>java:/jaas/gatein-domain</security-domain>
</jboss-web>
Modified: portal/trunk/sample/portal/README.txt
===================================================================
--- portal/trunk/sample/portal/README.txt 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/sample/portal/README.txt 2009-11-18 15:36:13 UTC (rev 644)
@@ -25,41 +25,23 @@
# On JBoss (tested on JBoss 5.1.0.GA)
########################################
-We assume that you have a clean JBoss version of GateIn: ie We assume that you have already the file exoplatform.ear in the deploy directory
-of jboss and you have the retlated application policy in your conf/login-config.xml
+We assume that you have a clean JBoss version of GateIn: ie We assume that you have already the file gatein.ear in the deploy directory
+of jboss
You need to:
1. Add the file sample-portal.ear from sample/portal/ear/target/ to the deploy directory of jboss
2. Add the file starter.ear from starter/ear/target/ to the deploy directory of jboss
-3. Define the related application policy in your file conf/login-config.xml, as below:
-
- <application-policy name="exo-domain-sample-portal">
- <authentication>
- <login-module code="org.exoplatform.web.security.PortalLoginModule" flag="required">
- <module-option name="portalContainerName">sample-portal</module-option>
- <module-option name="realmName">exo-domain-sample-portal</module-option>
- </login-module>
- <login-module code="org.exoplatform.services.security.jaas.SharedStateLoginModule" flag="required">
- <module-option name="portalContainerName">sample-portal</module-option>
- <module-option name="realmName">exo-domain-sample-portal</module-option>
- </login-module>
- <login-module code="org.exoplatform.services.security.j2ee.JbossLoginModule" flag="required">
- <module-option name="portalContainerName">sample-portal</module-option>
- <module-option name="realmName">exo-domain-sample-portal</module-option>
- </login-module>
- </authentication>
- </application-policy>
WARNING: This can only work if a Unified ClassLoader has been configured on your JBoss (default behavior) and
-the load order is first the exoplatform.ear then the sample-portal.ear and finally the starter.ear
+the load order is first the gatein.ear then the sample-portal.ear and finally the starter.ear
########################################
# On Tomcat (tested on Tomcat 6.0.20)
########################################
We assume that you have a clean Tomcat version of GateIn: ie We assume that you have already all the jar files of GateIn and their dependencies
-into tomcat/lib and you have the related relam name "exo-domain" defined in the file tomcat/conf/jaas.conf
+into tomcat/lib and you have the related relam name "gatein-domain" defined in the file tomcat/conf/jaas.conf
1. Add the file sample-portal.war from sample/portal/war/target/ to the tomcat/webapps directory
2. Add the file rest-sample-portal.war from sample/portal/rest-war/target/ to the tomcat/webapps directory
@@ -69,16 +51,16 @@
6. Add the jar file exo.portal.sample.portal.jar-X.Y.Z.jar from sample/portal/jar/target/ to the tomcat/lib directory
7. Define the related realm in your file tomcat/conf/jaas.conf, as below:
-exo-domain-sample-portal {
+gatein-domain-sample-portal {
org.exoplatform.web.security.PortalLoginModule required
portalContainerName="sample-portal"
- realmName="exo-domain-sample-portal";
+ realmName="gatein-domain-sample-portal";
org.exoplatform.services.security.jaas.SharedStateLoginModule required
portalContainerName="sample-portal"
- realmName="exo-domain-sample-portal";
+ realmName="gatein-domain-sample-portal";
org.exoplatform.services.security.j2ee.TomcatLoginModule required
portalContainerName="sample-portal"
- realmName="exo-domain-sample-portal";
+ realmName="gatein-domain-sample-portal";
};
8. Define the context of sample-portal by creating a file called "sample-portal.xml" in tomcat/conf/Catalina/localhost/ with the following content
@@ -87,7 +69,7 @@
prefix='localhost_portal_log.' suffix='.txt' timestamp='true'/>
<Manager className='org.apache.catalina.session.PersistentManager' saveOnRestart='false'/>
<Realm className='org.apache.catalina.realm.JAASRealm'
- appName='exo-domain-sample-portal'
+ appName='gatein-domain-sample-portal'
userClassNames='org.exoplatform.services.security.jaas.UserPrincipal'
roleClassNames='org.exoplatform.services.security.jaas.RolePrincipal'
debug='0' cache='false'/>
@@ -101,7 +83,7 @@
prefix='localhost_portal_log.' suffix='.txt' timestamp='true'/>
<Manager className='org.apache.catalina.session.PersistentManager' saveOnRestart='false'/>
<Realm className='org.apache.catalina.realm.JAASRealm'
- appName='exo-domain-sample-portal'
+ appName='gatein-domain-sample-portal'
userClassNames="org.exoplatform.services.security.jaas.UserPrincipal"
roleClassNames="org.exoplatform.services.security.jaas.RolePrincipal"
debug='0' cache='false'/>
Modified: portal/trunk/sample/portal/config/src/main/java/conf/configuration.xml
===================================================================
--- portal/trunk/sample/portal/config/src/main/java/conf/configuration.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/sample/portal/config/src/main/java/conf/configuration.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -41,7 +41,7 @@
<!-- The name of the context name of the rest web application -->
<field name="restContextName"><string>rest-sample-portal</string></field>
<!-- The name of the realm -->
- <field name="realmName"><string>exo-domain-sample-portal</string></field>
+ <field name="realmName"><string>gatein-domain-sample-portal</string></field>
<!-- All the dependencies of the portal container ordered by loading priority -->
<field name="dependencies">
<collection type="java.util.ArrayList">
Added: portal/trunk/sample/portal/ear/src/main/application/META-INF/gatein-jboss-beans.xml
===================================================================
--- portal/trunk/sample/portal/ear/src/main/application/META-INF/gatein-jboss-beans.xml (rev 0)
+++ portal/trunk/sample/portal/ear/src/main/application/META-INF/gatein-jboss-beans.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -0,0 +1,20 @@
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+ <application-policy xmlns="urn:jboss:security-beans:1.0" name="gatein-domain-sample-portal">
+ <authentication>
+ <login-module code="org.exoplatform.web.security.PortalLoginModule" flag="required">
+ <module-option name="portalContainerName">sample-portal</module-option>
+ <module-option name="realmName">gatein-domain-sample-portal</module-option>
+ </login-module>
+ <login-module code="org.exoplatform.services.security.jaas.SharedStateLoginModule" flag="required">
+ <module-option name="portalContainerName">sample-portal</module-option>
+ <module-option name="realmName">gatein-domain-sample-portal</module-option>
+ </login-module>
+ <login-module code="org.exoplatform.services.security.j2ee.JbossLoginModule" flag="required">
+ <module-option name="portalContainerName">sample-portal</module-option>
+ <module-option name="realmName">gatein-domain-sample-portal</module-option>
+ </login-module>
+ </authentication>
+ </application-policy>
+
+</deployment>
Modified: portal/trunk/sample/portal/rest-war/src/main/webapp/WEB-INF/jboss-web.xml
===================================================================
--- portal/trunk/sample/portal/rest-war/src/main/webapp/WEB-INF/jboss-web.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/sample/portal/rest-war/src/main/webapp/WEB-INF/jboss-web.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -21,5 +21,5 @@
-->
<jboss-web>
- <security-domain>java:/jaas/exo-domain-sample-portal</security-domain>
+ <security-domain>java:/jaas/gatein-domain-sample-portal</security-domain>
</jboss-web>
Modified: portal/trunk/sample/portal/rest-war/src/main/webapp/WEB-INF/web.xml
===================================================================
--- portal/trunk/sample/portal/rest-war/src/main/webapp/WEB-INF/web.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/sample/portal/rest-war/src/main/webapp/WEB-INF/web.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -89,7 +89,7 @@
<login-config>
<auth-method>BASIC</auth-method>
- <realm-name>exo-domain-sample-portal</realm-name>
+ <realm-name>gatein-domain-sample-portal</realm-name>
</login-config>
<security-role>
Modified: portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/conf/sample-portal/jcr/repository-configuration.xml
===================================================================
--- portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/conf/sample-portal/jcr/repository-configuration.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/conf/sample-portal/jcr/repository-configuration.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -22,7 +22,7 @@
<repository-service default-repository="repository">
<repositories>
<repository name="repository" system-workspace="system" default-workspace="portal-system">
- <security-domain>exo-domain</security-domain>
+ <security-domain>gatein-domain</security-domain>
<access-control>optional</access-control>
<authentication-policy>org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator</authentication-policy>
<workspaces>
Modified: portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/jboss-web.xml
===================================================================
--- portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/jboss-web.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/jboss-web.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -21,5 +21,5 @@
-->
<jboss-web>
- <security-domain>java:/jaas/exo-domain-sample-portal</security-domain>
+ <security-domain>java:/jaas/gatein-domain-sample-portal</security-domain>
</jboss-web>
Modified: portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/web.xml
===================================================================
--- portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/web.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/sample/portal/war/src/main/webapp/WEB-INF/web.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -278,7 +278,7 @@
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
- <realm-name>exo-domain-sample-portal</realm-name>
+ <realm-name>gatein-domain-sample-portal</realm-name>
<form-login-config>
<form-login-page>/initiatelogin</form-login-page>
<form-error-page>/errorlogin</form-error-page>
@@ -292,4 +292,4 @@
<description>the admin role</description>
<role-name>admin</role-name>
</security-role>
-</web-app>
\ No newline at end of file
+</web-app>
Modified: portal/trunk/server/jboss/patch/src/main/jboss/server/default/deploy/exoplatform.sar/META-INF/login-config.xml
===================================================================
--- portal/trunk/server/jboss/patch/src/main/jboss/server/default/deploy/exoplatform.sar/META-INF/login-config.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/server/jboss/patch/src/main/jboss/server/default/deploy/exoplatform.sar/META-INF/login-config.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -23,7 +23,7 @@
<!DOCTYPE policy PUBLIC "-//JBoss//DTD JBOSS Security Config 3.0//EN"
"http://www.jboss.org/j2ee/dtd/security_config.dtd">
<policy>
- <application-policy name="exo-domain">
+ <application-policy name="gatein-domain">
<authentication>
<login-module code="org.exoplatform.services.security.j2ee.JbossLoginModule" flag="required"></login-module>
</authentication>
Deleted: portal/trunk/server/jboss/patch-ear/src/main/jboss/server/default/conf/login-config.xml
===================================================================
--- portal/trunk/server/jboss/patch-ear/src/main/jboss/server/default/conf/login-config.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/server/jboss/patch-ear/src/main/jboss/server/default/conf/login-config.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -1,205 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- Copyright (C) 2009 eXo Platform SAS.
-
- This is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of
- the License, or (at your option) any later version.
-
- This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this software; if not, write to the Free
- Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-
--->
-
-<!DOCTYPE policy PUBLIC
- "-//JBoss//DTD JBOSS Security Config 3.0//EN"
- "http://www.jboss.org/j2ee/dtd/security_config.dtd">
-
-<!-- The XML based JAAS login configuration read by the
-org.jboss.security.auth.login.XMLLoginConfig mbean. Add
-an application-policy element for each security domain.
-
-The outline of the application-policy is:
-<application-policy name="security-domain-name">
- <authentication>
- <login-module code="login.module1.class.name" flag="control_flag">
- <module-option name = "option1-name">option1-value</module-option>
- <module-option name = "option2-name">option2-value</module-option>
- ...
- </login-module>
-
- <login-module code="login.module2.class.name" flag="control_flag">
- ...
- </login-module>
- ...
- </authentication>
-</application-policy>
-
-$Revision: 64598 $
--->
-
-<policy>
- <!-- Used by clients within the application server VM such as
- mbeans and servlets that access EJBs.
- -->
- <application-policy name = "client-login">
- <authentication>
- <login-module code = "org.jboss.security.ClientLoginModule"
- flag = "required">
- <!-- Any existing security context will be restored on logout -->
- <module-option name="restore-login-identity">true</module-option>
- </login-module>
- </authentication>
- </application-policy>
-
- <!-- Security domain for JBossMQ -->
- <application-policy name = "jbossmq">
- <authentication>
- <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule"
- flag = "required">
- <module-option name = "unauthenticatedIdentity">guest</module-option>
- <module-option name = "dsJndiName">java:/DefaultDS</module-option>
- <module-option name = "principalsQuery">SELECT PASSWD FROM JMS_USERS WHERE USERID=?</module-option>
- <module-option name = "rolesQuery">SELECT ROLEID, 'Roles' FROM JMS_ROLES WHERE USERID=?</module-option>
- </login-module>
- </authentication>
- </application-policy>
-
- <!-- Security domain for JBossMQ when using file-state-service.xml
- <application-policy name = "jbossmq">
- <authentication>
- <login-module code = "org.jboss.mq.sm.file.DynamicLoginModule"
- flag = "required">
- <module-option name = "unauthenticatedIdentity">guest</module-option>
- <module-option name = "sm.objectname">jboss.mq:service=StateManager</module-option>
- </login-module>
- </authentication>
- </application-policy>
- -->
-
- <!-- Security domains for testing new jca framework -->
- <application-policy name = "HsqlDbRealm">
- <authentication>
- <login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule"
- flag = "required">
- <module-option name = "principal">sa</module-option>
- <module-option name = "userName">sa</module-option>
- <module-option name = "password"></module-option>
- <module-option name = "managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=DefaultDS</module-option>
- </login-module>
- </authentication>
- </application-policy>
-
- <application-policy name = "JmsXARealm">
- <authentication>
- <login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule"
- flag = "required">
- <module-option name = "principal">guest</module-option>
- <module-option name = "userName">guest</module-option>
- <module-option name = "password">guest</module-option>
- <module-option name = "managedConnectionFactoryName">jboss.jca:service=TxCM,name=JmsXA</module-option>
- </login-module>
- </authentication>
- </application-policy>
-
- <!-- A template configuration for the jmx-console web application. This
- defaults to the UsersRolesLoginModule the same as other and should be
- changed to a stronger authentication mechanism as required.
- -->
- <application-policy name = "jmx-console">
- <authentication>
- <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
- flag = "required">
- <module-option name="usersProperties">props/jmx-console-users.properties</module-option>
- <module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
- </login-module>
- </authentication>
- </application-policy>
-
- <!-- A template configuration for the web-console web application. This
- defaults to the UsersRolesLoginModule the same as other and should be
- changed to a stronger authentication mechanism as required.
- -->
- <application-policy name = "web-console">
- <authentication>
- <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
- flag = "required">
- <module-option name="usersProperties">web-console-users.properties</module-option>
- <module-option name="rolesProperties">web-console-roles.properties</module-option>
- </login-module>
- </authentication>
- </application-policy>
-
- <!--
- A template configuration for the JBossWS security domain.
- This defaults to the UsersRolesLoginModule the same as other and should be
- changed to a stronger authentication mechanism as required.
- -->
- <application-policy name="JBossWS">
- <authentication>
- <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
- flag="required">
- <module-option name="usersProperties">props/jbossws-users.properties</module-option>
- <module-option name="rolesProperties">props/jbossws-roles.properties</module-option>
- <module-option name="unauthenticatedIdentity">anonymous</module-option>
- </login-module>
- </authentication>
- </application-policy>
-
- <!-- The default login configuration used by any security domain that
- does not have a application-policy entry with a matching name
- -->
- <application-policy name = "other">
- <!-- A simple server login module, which can be used when the number
- of users is relatively small. It uses two properties files:
- users.properties, which holds users (key) and their password (value).
- roles.properties, which holds users (key) and a comma-separated list of
- their roles (value).
- The unauthenticatedIdentity property defines the name of the principal
- that will be used when a null username and password are presented as is
- the case for an unuathenticated web client or MDB. If you want to
- allow such users to be authenticated add the property, e.g.,
- unauthenticatedIdentity="nobody"
- -->
- <authentication>
- <login-module code = "org.jboss.security.auth.spi.UsersRolesLoginModule"
- flag = "required" />
- </authentication>
- </application-policy>
-
- <application-policy name="exo-domain">
- <authentication>
- <login-module code="org.exoplatform.web.security.PortalLoginModule" flag="required"></login-module>
- <login-module code="org.exoplatform.services.security.jaas.SharedStateLoginModule" flag="required"></login-module>
- <login-module code="org.exoplatform.services.security.j2ee.JbossLoginModule" flag="required"></login-module>
- </authentication>
- </application-policy>
-
- <application-policy name="exo-domain-sample-portal">
- <authentication>
- <login-module code="org.exoplatform.web.security.PortalLoginModule" flag="required">
- <module-option name="portalContainerName">sample-portal</module-option>
- <module-option name="realmName">exo-domain-sample-portal</module-option>
- </login-module>
- <login-module code="org.exoplatform.services.security.jaas.SharedStateLoginModule" flag="required">
- <module-option name="portalContainerName">sample-portal</module-option>
- <module-option name="realmName">exo-domain-sample-portal</module-option>
- </login-module>
- <login-module code="org.exoplatform.services.security.j2ee.JbossLoginModule" flag="required">
- <module-option name="portalContainerName">sample-portal</module-option>
- <module-option name="realmName">exo-domain-sample-portal</module-option>
- </login-module>
- </authentication>
- </application-policy>
-
-</policy>
-
Added: portal/trunk/server/jboss/patch-ear/src/main/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml
===================================================================
--- portal/trunk/server/jboss/patch-ear/src/main/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml (rev 0)
+++ portal/trunk/server/jboss/patch-ear/src/main/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -0,0 +1,20 @@
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+ <application-policy xmlns="urn:jboss:security-beans:1.0" name="gatein-domain">
+ <authentication>
+ <login-module code="org.exoplatform.web.security.PortalLoginModule" flag="required">
+ <module-option name="portalContainerName">portal</module-option>
+ <module-option name="realmName">gatein-domain</module-option>
+ </login-module>
+ <login-module code="org.exoplatform.services.security.jaas.SharedStateLoginModule" flag="required">
+ <module-option name="portalContainerName">portal</module-option>
+ <module-option name="realmName">gatein-domain</module-option>
+ </login-module>
+ <login-module code="org.exoplatform.services.security.j2ee.JbossLoginModule" flag="required">
+ <module-option name="portalContainerName">portal</module-option>
+ <module-option name="realmName">gatein-domain</module-option>
+ </login-module>
+ </authentication>
+ </application-policy>
+
+</deployment>
Modified: portal/trunk/server/tomcat/patch/src/main/tomcat/conf/Catalina/localhost/portal.xml
===================================================================
--- portal/trunk/server/tomcat/patch/src/main/tomcat/conf/Catalina/localhost/portal.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/server/tomcat/patch/src/main/tomcat/conf/Catalina/localhost/portal.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -24,7 +24,7 @@
prefix='localhost_portal_log.' suffix='.txt' timestamp='true'/>
<Manager className='org.apache.catalina.session.PersistentManager' saveOnRestart='false'/>
<Realm className='org.apache.catalina.realm.JAASRealm'
- appName='exo-domain'
+ appName='gatein-domain'
userClassNames='org.exoplatform.services.security.jaas.UserPrincipal'
roleClassNames='org.exoplatform.services.security.jaas.RolePrincipal'
debug='0' cache='false'/>
Modified: portal/trunk/server/tomcat/patch/src/main/tomcat/conf/Catalina/localhost/rest.xml
===================================================================
--- portal/trunk/server/tomcat/patch/src/main/tomcat/conf/Catalina/localhost/rest.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/server/tomcat/patch/src/main/tomcat/conf/Catalina/localhost/rest.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -25,7 +25,7 @@
prefix='localhost_portal_log.' suffix='.txt' timestamp='true'/>
<Manager className='org.apache.catalina.session.PersistentManager' saveOnRestart='false'/>
<Realm className='org.apache.catalina.realm.JAASRealm'
- appName='exo-domain'
+ appName='gatein-domain'
userClassNames="org.exoplatform.services.security.jaas.UserPrincipal"
roleClassNames="org.exoplatform.services.security.jaas.RolePrincipal"
debug='0' cache='false'/>
Modified: portal/trunk/server/tomcat/patch/src/main/tomcat/conf/jaas.conf
===================================================================
--- portal/trunk/server/tomcat/patch/src/main/tomcat/conf/jaas.conf 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/server/tomcat/patch/src/main/tomcat/conf/jaas.conf 2009-11-18 15:36:13 UTC (rev 644)
@@ -1,4 +1,4 @@
-exo-domain {
+gatein-domain {
org.exoplatform.web.security.PortalLoginModule required;
org.exoplatform.services.security.jaas.SharedStateLoginModule required;
org.exoplatform.services.security.j2ee.TomcatLoginModule required;
Modified: portal/trunk/web/portal/src/main/resources/tomcat/portal.xml
===================================================================
--- portal/trunk/web/portal/src/main/resources/tomcat/portal.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/web/portal/src/main/resources/tomcat/portal.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -28,7 +28,7 @@
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false"/>
<Realm className="org.apache.catalina.realm.JAASRealm"
- appName="exo-domain"
+ appName="gatein-domain"
userClassNames="org.exoplatform.services.security.jaas.UserPrincipal"
roleClassNames="org.exoplatform.services.security.jaas.RolePrincipal"
debug="0" cache="false"/>
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/jcr/repository-configuration.tmpl.xml
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/jcr/repository-configuration.tmpl.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/jcr/repository-configuration.tmpl.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -22,7 +22,7 @@
<repository-service default-repository="repository">
<repositories>
<repository name="repository" system-workspace="system" default-workspace="portal-system">
- <security-domain>exo-domain</security-domain>
+ <security-domain>gatein-domain</security-domain>
<access-control>optional</access-control>
<authentication-policy>org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator</authentication-policy>
<workspaces>
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/jcr/repository-configuration.xml
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/jcr/repository-configuration.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/jcr/repository-configuration.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -22,7 +22,7 @@
<repository-service default-repository="repository">
<repositories>
<repository name="repository" system-workspace="system" default-workspace="portal-system">
- <security-domain>exo-domain</security-domain>
+ <security-domain>gatein-domain</security-domain>
<access-control>optional</access-control>
<authentication-policy>org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator</authentication-policy>
<workspaces>
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/jboss-web.xml
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/jboss-web.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/jboss-web.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -21,5 +21,5 @@
-->
<jboss-web>
- <security-domain>java:/jaas/exo-domain</security-domain>
+ <security-domain>java:/jaas/gatein-domain</security-domain>
</jboss-web>
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -278,7 +278,7 @@
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
- <realm-name>exo-domain</realm-name>
+ <realm-name>gatein-domain</realm-name>
<form-login-config>
<form-login-page>/initiatelogin</form-login-page>
<form-error-page>/errorlogin</form-error-page>
@@ -292,4 +292,4 @@
<description>the admin role</description>
<role-name>admin</role-name>
</security-role>
-</web-app>
\ No newline at end of file
+</web-app>
Modified: portal/trunk/web/rest/src/main/webapp/WEB-INF/jboss-web.xml
===================================================================
--- portal/trunk/web/rest/src/main/webapp/WEB-INF/jboss-web.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/web/rest/src/main/webapp/WEB-INF/jboss-web.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -21,5 +21,5 @@
-->
<jboss-web>
- <security-domain>java:/jaas/exo-domain</security-domain>
+ <security-domain>java:/jaas/gatein-domain</security-domain>
</jboss-web>
Modified: portal/trunk/web/rest/src/main/webapp/WEB-INF/web.xml
===================================================================
--- portal/trunk/web/rest/src/main/webapp/WEB-INF/web.xml 2009-11-18 14:51:28 UTC (rev 643)
+++ portal/trunk/web/rest/src/main/webapp/WEB-INF/web.xml 2009-11-18 15:36:13 UTC (rev 644)
@@ -89,7 +89,7 @@
<login-config>
<auth-method>BASIC</auth-method>
- <realm-name>exo-domain</realm-name>
+ <realm-name>gatein-domain</realm-name>
</login-config>
<security-role>
16 years, 5 months
gatein SVN: r643 - in tools: packager and 11 other directories.
by do-not-reply@jboss.org
Author: dbaeli
Date: 2009-11-18 09:51:28 -0500 (Wed, 18 Nov 2009)
New Revision: 643
Added:
tools/packager/
tools/packager/branches/
tools/packager/tags/
tools/packager/trunk/
tools/packager/trunk/README.txt
tools/packager/trunk/pom.xml
tools/packager/trunk/src/
tools/packager/trunk/src/assemble/
tools/packager/trunk/src/assemble/exopackage-zip.xml
tools/packager/trunk/src/main/
tools/packager/trunk/src/main/javascript/
tools/packager/trunk/src/main/javascript/eXo/
tools/packager/trunk/src/main/javascript/eXo/System.js
tools/packager/trunk/src/main/javascript/eXo/command/
tools/packager/trunk/src/main/javascript/eXo/command/exobuild.js
tools/packager/trunk/src/main/javascript/eXo/command/exoproject.js
tools/packager/trunk/src/main/javascript/eXo/command/exosvn.js
tools/packager/trunk/src/main/javascript/eXo/command/maven.js
tools/packager/trunk/src/main/javascript/eXo/command/svn.js
tools/packager/trunk/src/main/javascript/eXo/core/
tools/packager/trunk/src/main/javascript/eXo/core/IOUtil.js
tools/packager/trunk/src/main/javascript/eXo/core/TaskDescriptor.js
tools/packager/trunk/src/main/javascript/eXo/core/Util.js
tools/packager/trunk/src/main/javascript/eXo/eXo.js
tools/packager/trunk/src/main/javascript/eXo/projects/
tools/packager/trunk/src/main/javascript/eXo/projects/Module.js
tools/packager/trunk/src/main/javascript/eXo/projects/Product.js
tools/packager/trunk/src/main/javascript/eXo/projects/Project.js
tools/packager/trunk/src/main/javascript/eXo/projects/Workflow.js
tools/packager/trunk/src/main/javascript/eXo/projects/WorkflowBackup.js
tools/packager/trunk/src/main/javascript/eXo/server/
tools/packager/trunk/src/main/javascript/eXo/server/Database.js
tools/packager/trunk/src/main/javascript/eXo/server/Ear.js
tools/packager/trunk/src/main/javascript/eXo/server/Jboss.js
tools/packager/trunk/src/main/javascript/eXo/server/JbossEar.js
tools/packager/trunk/src/main/javascript/eXo/server/Jonas.js
tools/packager/trunk/src/main/javascript/eXo/server/ServerUtil.js
tools/packager/trunk/src/main/javascript/eXo/server/Tomcat.js
tools/packager/trunk/src/main/javascript/eXo/server/WorkflowConfig.js
tools/packager/trunk/src/main/lib/
tools/packager/trunk/src/main/lib/js.jar
Log:
MVNTOOLS-?? : Create gatein packager from exopackage
* Firs step before a rework of GateIn packaging
Added: tools/packager/trunk/README.txt
===================================================================
--- tools/packager/trunk/README.txt (rev 0)
+++ tools/packager/trunk/README.txt 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,22 @@
+* exopackage : scripting to build GateIn ear and to assemble the gatein distribution.
+
+Status:
+As explain in the GateIn main README file, this tooling is aimed to be replaced.
+So this artifact is here for a short time to let the team work on replacing this way to package the
+Please see http://jira.jboss.org/jira/browse/GTNPORTAL-256 for the main Jira about it.
+
+Description:
+* .js files represent the scripts executed to package GateIn and its extensions.
+* exobuild is the packager :
+** creates the ear or not according to the target AS
+** setup the DB configuration
+** copy the binary to the target AS
+
+Goal:
+* Replace this scripting by a maven plugin and some maven projects (ear for jboss packaging for example)
+
+Tasks:
+* Describe the features (jboss, tomcat packaging, ...)
+* Clean-up non needed code (svn update, dependency download, ...)
+* Study what maven built-in functions can be used
+* Write a dedicate maven plugin if needed
\ No newline at end of file
Added: tools/packager/trunk/pom.xml
===================================================================
--- tools/packager/trunk/pom.xml (rev 0)
+++ tools/packager/trunk/pom.xml 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,110 @@
+<!--
+
+ Copyright (C) 2009 eXo Platform SAS.
+
+ This is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of
+ the License, or (at your option) any later version.
+
+ This software is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this software; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>org.gatein</groupId>
+ <artifactId>gatein-parent</artifactId>
+ <version>1.0.0-Beta03</version>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.gatein.tools</groupId>
+ <artifactId>packager</artifactId>
+ <version>1.0.0-Beta01-SNAPSHOT</version>
+ <name>GateIn Packager</name>
+ <packaging>pom</packaging>
+ <scm>
+ <connection>scm:svn:http://anonsvn.jboss.org/repos/gatein/tools/packager/trunk/</connection>
+ <developerConnection>scm:svn:https://svn.jboss.org/repos/gatein/tools/packager/trunk/</developerConnection>
+ <url>http://fisheye.jboss.org/browse/gatein/tools/packager/trunk/</url>
+ </scm>
+
+ <!-- **************** -->
+ <!-- Build Definition -->
+ <!-- **************** -->
+
+ <repositories>
+ <repository>
+ <id>repository.jboss.org</id>
+ <name>JBoss Repository</name>
+ <layout>default</layout>
+ <url>http://repository.jboss.org/maven2/</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>snapshots.jboss.org</id>
+ <name>JBoss Snapshots Repository</name>
+ <layout>default</layout>
+ <url>http://snapshots.jboss.org/maven2/</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ </repositories>
+
+ <build>
+ <plugins>
+ <!-- exobuild packaging -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals><goal>assembly</goal></goals>
+ </execution>
+ </executions>
+ <configuration>
+ <descriptors><descriptor>src/assemble/exopackage-zip.xml</descriptor></descriptors>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.4</version>
+ <executions>
+ <execution>
+ <id>attach-artifacts</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>target/${project.artifactId}-${project.version}.zip</file>
+ <type>zip</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+
+</project>
Added: tools/packager/trunk/src/assemble/exopackage-zip.xml
===================================================================
--- tools/packager/trunk/src/assemble/exopackage-zip.xml (rev 0)
+++ tools/packager/trunk/src/assemble/exopackage-zip.xml 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,25 @@
+<assembly>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>src/main</directory>
+ <outputDirectory></outputDirectory>
+ <includes><include>**</include></includes>
+ <excludes>
+ <exclude>**/*.sh</exclude>
+ <exclude>conf/**</exclude>
+ </excludes>
+ <useDefaultExcludes>true</useDefaultExcludes>
+ </fileSet>
+ <fileSet>
+ <directory>src/main</directory>
+ <outputDirectory></outputDirectory>
+ <includes><include>**/*.sh</include></includes>
+ <useDefaultExcludes>true</useDefaultExcludes>
+ <fileMode>0755</fileMode>
+ </fileSet>
+ </fileSets>
+</assembly>
\ No newline at end of file
Added: tools/packager/trunk/src/main/javascript/eXo/System.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/System.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/System.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,94 @@
+eXo.System = {
+ verbose :false,
+
+ addSystemClasspath : function(url) {
+ var sysClassLoader = java.lang.ClassLoader.getSystemClassLoader();
+ var argTypes = [ java.net.URL.getClass() ];
+ method = java.net.URLClassLoader.getClass().getDeclaredMethod("addURL", argTypes);
+ method.setAccessible(true);
+ for (i = 0; i < url.length; i++) {
+ var args = new Array();
+ args[0] = url[i];
+ method.invoke(sysClassLoader, args);
+ }
+ },
+
+ info : function(tag, message) {
+ if (message == null) {
+ message = tag;
+ tag = "INFO";
+ }
+ java.lang.System.out.print("[" + tag + "]");
+ for ( var i = tag.length + 2; i < 10; i++)
+ java.lang.System.out.print(" ");
+
+ java.lang.System.out.println(message);
+// var tmp = message.split("\n");
+// java.lang.System.out.println(tmp[0]);
+// for ( var j = 1; j < tmp.length; j++) {
+// java.lang.System.out.println(" " + tmp[j]);
+// }
+ },
+
+ error : function(message) {
+ this.info("ERROR", message);
+ },
+
+ vinfo : function(tag, message) {
+ if (this.verbose)
+ this.info(tag, message);
+ },
+
+ print : function(message) {
+ java.lang.System.out.print(message);
+ },
+
+ vprint : function(message) {
+ if (this.verbose)
+ java.lang.System.out.print(message);
+ },
+
+ printIndentation : function() {
+ print(" ");
+ },
+
+ vprintIndentation : function() {
+ if (this.verbose)
+ print(" ");
+ },
+
+ run : function(args, printResult, printError) {
+ var proc = java.lang.Runtime.getRuntime().exec(args);
+ var din = new java.io.DataInputStream(proc.getInputStream());
+ var b = new java.lang.StringBuilder();
+ var line = null;
+ while ((line = din.readLine()) != null) {
+ b.append(line).append('\n');
+ if (printResult)
+ print(line);
+ }
+
+ if (printError) {
+ var errStream = new java.io.DataInputStream(proc.getErrorStream());
+ while ((line = errStream.readLine()) != null)
+ print(line);
+ }
+
+ return b.toString();
+ },
+
+ readInput : function(message) {
+ java.lang.System.out.print(message + ": ");
+ var b = new java.lang.StringBuilder();
+ var systemin = java.lang.System['in'];
+ while (true) {
+ var val = systemin.read();
+ if (val == 13)
+ continue;
+ if (val == 10)
+ break;
+ b.appendCodePoint(val);
+ }
+ return b.toString();
+ }
+}
Added: tools/packager/trunk/src/main/javascript/eXo/command/exobuild.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/command/exobuild.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/command/exobuild.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,391 @@
+eXo.require("eXo.server.Tomcat");
+eXo.require("eXo.server.Jboss");
+eXo.require("eXo.server.JbossEar");
+eXo.require("eXo.server.Ear");
+eXo.require("eXo.server.Jonas");
+eXo.require("eXo.server.Database");
+eXo.require("eXo.server.WorkflowConfig");
+eXo.require("eXo.core.TaskDescriptor");
+eXo.require("eXo.command.maven");
+eXo.require("eXo.command.svn");
+eXo.require("eXo.core.IOUtil");
+eXo.require("eXo.projects.Workflow");
+eXo.require("eXo.projects.WorkflowBackup");
+eXo.require("eXo.projects.Product");
+
+// initialize possible database setups
+var databaseMap = new java.util.HashMap();
+databaseMap.put("hsqldb", eXo.server.Database.HsqlDB("hsqldb"));
+databaseMap.put("mysql", eXo.server.Database.MysqlDB("mysql"));
+databaseMap.put("oracle", eXo.server.Database.OracleDB("oracle"));
+databaseMap.put("postgresql", eXo.server.Database.PostgresDB("postgresql"));
+databaseMap.put("db2", eXo.server.Database.DB2ExpressDB("db2"));
+databaseMap.put("db2v8", eXo.server.Database.DB2V8DB("db2v8"));
+databaseMap.put("derby", eXo.server.Database.DerbyDB("derby"));
+databaseMap.put("sqlserver", eXo.server.Database.SqlServerDB("sqlserver"));
+
+// initialize possible server setups
+var serverMap = new java.util.HashMap();
+serverMap.put("tomcat", new Tomcat(eXo.env.workingDir + "/tomcat"));
+serverMap.put("jboss", new Jboss(eXo.env.workingDir + "/jboss"));
+serverMap.put("jbossear", new JbossEar(eXo.env.workingDir + "/jboss"));
+serverMap.put("jonas", new Jonas(eXo.env.workingDir + "/jonas"));
+serverMap.put("ear", new Ear(eXo.env.workingDir + "/ear"));
+
+// TODO autodetect !!
+var modules = [ "all", "pc", "jcr", "ws", "tools", "ecm", "cs", "ks", "portal", "liveroom", "dms", "workflow" ];
+// TODO autodetect !!
+var products = [ "cs", "ks", "ecm", "portal", "ultimate", "wcm", "webos", "liveroom", "dms", "workflow" ];
+
+function exobuildInstructions() {
+ print("\n" + "Use of the exobuild command: \n\n" + " exobuild --product=name\n" + " [--version=version]\n"
+ + " [--update]\n" + " [--build]\n" + " [--exclude=modules]\n"
+ + " [--deploy[=server]]\n" + " [--release[=server]]\n"
+ + " [--workflow[=jbpm|bonita]]\n" + " [--enable-workflow[=bonita|jbpm]]\n"
+ + " [--clean-mvn-repo]\n" + " [--database[=dialect]]\n" + " [--dbsetup=option]\n"
+ + "\n\n" + "Options: \n" + " * --product=name Name of the product you want to build.\n"
+ + " The possible names are "
+ + products
+ + ", ...\n"
+ + " Default is portal.\n"
+ + " * --version=number Allows to specify which version of the product\n"
+ + " to build such as trunk, tags/2.0, branches/2.0,.... \n"
+ + " Default is trunk.\n"
+ + " * --update Run a svn update before it builds.\n"
+ + " * --build Compile and install the sub projects of the product,\n"
+ + " * --exclude Exclude the given modules (comma separated) from compilation and fetch jars from repository\n"
+ + " You can specify any module name in "
+ + modules
+ + ".\n"
+ + " Use this to avoid full build or when a module breaks the build\n"
+ + " * --deploy=server Deploy to a given application server. Possible values are: 'all', "
+ + serverMap.keySet()
+ + ".\n"
+ + " Default is tomcat.\n"
+ + " * --release=server Release for the target application server. Produce a zip named after the current SVN revision.\n"
+ + " Possible values are: 'all', "
+ + serverMap.keySet()
+ + ".\n"
+ + " Default is tomcat\n"
+ + " * --clean-mvn-repo Clean your local repository of eXo artifacts before building.\n"
+ + " * --database=dialect Specify target database dialect. The possible values are "
+ + databaseMap.keySet()
+ + ".\n"
+ + " This will configure the appropriate JCR dialects and deploy the JDBC driver.\n"
+ + " Used with --dbsetup=file option, exobuild tries to get database settings in a file named\n"
+ + " database-configuration.{dialect}.xml\n"
+ + " Default is hsqldb.\n"
+ + " * --dbsetup=option Use this option with --database option to specify the database setup behaviour.\n"
+ + " dbsetup=file will use the database and jcr files you provided.\n"
+ + " dbsetup=ask allow you to enter the connection url , username and password of the database server.\n"
+ + " dbsetup=defaults is the default option if dbsetup is not specified and will override settings by those defined in Database.js\n"
+ + " * --workflow=engine (For the old verions of ECM from 2.0 to 2.2.x) Specify the workflow engine to bundle with the product. The possible values are bonita or jbpm.\n"
+ + " This option is only used for products that use workflow. Default engine is jbpm\n"
+ + " * --enable-workflow=engine + .\n"
+ + " (Since DMS 2.3) Specify the workflow engine to bundle with the product. The possible values are bonita or jbpm.\n"
+ + " This option is only used for products that use workflow. Default engine is bonita\n"
+ + " * --help To print this help. Also you can use option: '-help' or 'help' or '?' \n");
+}
+
+function errExobuild(cause, value) {
+ eXo.System.info("ERR", cause + ": " + value);
+ exobuildInstructions();
+ java.lang.System.exit(1);
+}
+
+// name is "=NAME_SERVER" or "=all" or "" as default for tomcat
+// cycle is "deploy" or "release"
+function storeServers(name, cycle) {
+ if (name == "") {
+ eXo.System.info("INFO", " add server = " + "tomcat");
+ deployServers.add(serverMap.get("tomcat"));
+ } else if (name.match("=")) {
+ var serverName = name.substring("=".length);
+ if (serverName == "all") {
+ eXo.System.info("INFO", " add servers = " + serverMap.keySet());
+ deployServers = serverMap.values();
+ } else {
+ if (serverMap.get(serverName) == null)
+ errExobuild("UNKNOWN server in " + cycle + " for deploy", serverName);
+ eXo.System.info("INFO", " add server = " + serverName);
+ deployServers.add(serverMap.get(serverName));
+ }
+ } else
+ errExobuild("UNKNOWN server in " + cycle, serverName);
+}
+
+function ReleaseTask(server, product, version) {
+ var descriptor = new TaskDescriptor("Release Task", server.serverHome);
+ descriptor.execute = function() {
+ var versionInfo = "unknown";
+ if (!noInternet && "trunk" == version) {
+ var commands = [ "svn", "info", eXo.env.eXoProjectsDir + "/" + product.codeRepo ];
+ eXo.System.info("RELEASE", "Getting product revision from SVN.");
+ var result = eXo.System.run(commands);
+ var line = result.split("\n");
+ for ( var i = 0; i < line.length; i++) {
+ if (line[i].match("vision")) {
+ eXo.System.info("RELEASE", line[i]);
+ versionInfo = "r" + line[i].substring(line[i].lastIndexOf(":") + 1, line[i].length()).trim();
+ }
+ }
+ } else {
+ versionInfo = version;
+ }
+ var zipName = "exo-" + product.name + "-" + versionInfo + "-" + server.name;
+ eXo.System.info("RELEASE", "Building zip: " + zipName + ".zip" + " in " + eXo.env.workingDir);
+ eXo.core.IOUtil.zip(server.serverHome, eXo.env.workingDir, zipName);
+ }
+ return descriptor;
+}
+
+function EarTask(server, product, version) {
+ var descriptor = new TaskDescriptor("Ear Task", server.serverHome);
+ descriptor.execute = function() {
+ var versionInfo = "unknown";
+ if (!noInternet && "trunk" == version) {
+ var commands = [ "svn", "info", eXo.env.eXoProjectsDir + "/" + product.codeRepo ];
+ eXo.System.info("EAR", "Getting product revision from SVN.");
+ var result = eXo.System.run(commands);
+ var line = result.split("\n");
+ for ( var i = 0; i < line.length; i++) {
+ if (line[i].match("vision")) {
+ eXo.System.info("EAR", line[i]);
+ versionInfo = "r" + line[i].substring(line[i].lastIndexOf(":") + 1, line[i].length()).trim();
+ }
+ }
+ } else {
+ versionInfo = version;
+ }
+ var earName = product.name + "-" + versionInfo;
+ var dest = eXo.env.workingDir + "/" + earName + ".ear"; // =
+ // server.earFile;
+ eXo.System.info("EAR", "Building ear: " + dest);
+ eXo.core.IOUtil.ear(server.serverHome, dest);
+ eXo.core.IOUtil.remove(server.serverHome);
+ }
+ return descriptor;
+}
+
+var build_ = false;
+var update_ = false;
+var ask = false;
+var exclude_ = null;
+var release_ = false;
+var cleanMVNRepo_ = false;
+var dbsetup = "defaults";
+var maven = new eXo.command.maven();
+var exosvn = null;
+var server = null;
+var deployServers = new java.util.HashSet();
+var productName = "portal";
+var product = null;
+var dialect = "hsqldb";
+var database = databaseMap.get(dialect);
+var version = "trunk";
+var workflow = new Workflow("bonita", version);
+var workflowBackup = new WorkflowBackup("jbpm", version);
+var useWorkflowPlg = false;
+var enableWorkflow = false;
+var tasks = new java.util.ArrayList();
+var noInternet = false;
+
+var args = arguments;
+
+if (args.length == 0)
+ errExobuild("NO ARGUMENT PASSED", "");
+
+for ( var i = 0; i < args.length; i++) {
+ var arg = args[i];
+ if ("--update" == arg) {
+ update_ = true;
+ } else if (arg.match("--version")) {
+ if (arg.match("--version="))
+ version = arg.substring("--version=".length);
+ } else if ("--build" == arg) {
+ build_ = true;
+ } else if (arg.match("--dbsetup")) {
+ if (arg.match("--dbsetup="))
+ dbsetup = arg.substring("--dbsetup=".length);
+ } else if ("--clean-mvn-repo" == arg) {
+ cleanMVNRepo_ = true;
+ } else if (arg.match("--release")) {
+ storeServers(arg.substring("--release".length), "release");
+ release_ = true;
+ } else if (arg.match("--exclude=")) {
+ exclude_ = arg.substring("--exclude=".length);
+ } else if (arg.match("--deploy")) {
+ storeServers(arg.substring("--deploy".length), "deploy");
+ } else if (arg.match("--database")) {
+ if (arg.match("--database=")) {
+ dialect = arg.substring("--database=".length);
+ var database = databaseMap.get(dialect);
+ if (database == null)
+ errExobuild("UNKNOWN dialect", dialect);
+ }
+ } else if (arg.match("--product")) {
+ if (arg.match("--product=")) {
+ productName = arg.substring("--product=".length);
+ }
+ } else if (arg.match("--workflow")) {
+ eXo.System
+ .info(
+ "INFO",
+ "This parameter was deprecated since ECM 2.3. If you are using DMS 2.3 please use --enable-workflow to replace the old one");
+ var workflowName = arg.substring("--workflow=".length);
+ if (workflowName != "") {
+ workflow.name = workflowName;
+ workflowBackup.name = workflowName;
+ java.lang.System.setProperty("workflow", workflowName);
+ }
+ useWorkflowPlg = true;
+ } else if (arg.match("--enable-workflow")) {
+ var workflowName = arg.substring("--enable-workflow=".length);
+ if ((workflowName == "bonita") || (workflowName == "jbpm")) {
+ workflow.name = workflowName;
+ java.lang.System.setProperty("workflow", workflowName);
+ } else {
+ eXo.System.info("ERR", "'--enable-workflow' only accepts 'bonita' or 'jbpm'");
+ java.lang.System.exit(1);
+ }
+ useWorkflowPlg = true;
+ enableWorkflow = true;
+ } else if (arg == "--nointernet") {
+ noInternet = true;
+ } else if (arg == "--help" || arg == "-help" || arg == "help" || arg == "?") {
+ exobuildInstructions();
+ java.lang.System.exit(1);
+ } else {
+ errExobuild("UNKNOWN ARGUMENT", arg);
+ }
+}
+
+if (productName == null || productName == "") {
+ errExobuild("NULL product", "");
+} else {
+ product = Product.GetProduct(productName, version);
+ if (productName == "workflow") {
+ enableWorkflow = true;
+ }
+
+}
+
+if (deployServers != null && !deployServers.isEmpty() && dbsetup == "ask") {
+ tasks.add(database.GetConfigTask());
+}
+
+if (update_) {
+ // exosvn = new eXo.command.exosvn();
+ exosvn = new eXo.command.svn();
+ if ("all" != exclude_) {
+ for ( var i = 0; i < product.dependencyModule.length; i++) {
+ var module = product.dependencyModule[i];
+ if (exclude_ == null || exclude_.indexOf(module.name) < 0) {
+ var moduleDir = eXo.env.eXoProjectsDir + "/" + module.relativeSRCRepo;
+ var directory = new java.io.File(moduleDir);
+ if (directory.exists())
+ tasks.add(exosvn.UpdateTask(moduleDir));
+ }
+ }
+ }
+ tasks.add(exosvn.UpdateTask(eXo.env.eXoProjectsDir + "/" + product.codeRepo));
+}
+
+if (build_) {
+ var mvnArgs;
+ // When you use --enable-workflow parameter, with DMS product,
+ // we need use Maven profiles function to build
+ // DMS with both component DMS-core and DMS-ext(including content
+ // validation)
+ if (enableWorkflow && (product.name == "eXoDMS")) {
+ mvnArgs = [ "clean", "install", "-P", "ext" ];
+ } else {
+ mvnArgs = [ "clean", "install" ];
+ }
+ for ( var i = 0; i < product.dependencyModule.length; i++) {
+ var module = product.dependencyModule[i];
+ if (cleanMVNRepo_) {
+ eXo.core.IOUtil.remove(eXo.env.dependenciesDir + "/repository/" + module.relativeMavenRepo);
+ }
+ if ("all" != exclude_) {
+ if (exclude_ == null || exclude_.indexOf(module.name) < 0) {
+ var moduleDir = eXo.env.eXoProjectsDir + "/" + module.relativeSRCRepo;
+ var directory = new java.io.File(moduleDir);
+ if (directory.exists())
+ tasks.add(maven.MavenTask(moduleDir, mvnArgs));
+ }
+ }
+ }
+ var moduleDir = eXo.env.eXoProjectsDir + "/" + product.codeRepo;
+ tasks.add(maven.MavenTask(moduleDir, mvnArgs));
+}
+
+if (deployServers != null && !deployServers.isEmpty()) {
+ if (product.useWorkflow || useWorkflowPlg || enableWorkflow) {
+ if (enableWorkflow) {
+ workflow.version = product.workflowVersion;
+ workflow.configWorkflow(product);
+ } else {
+ workflowBackup.version = product.workflowVersion;
+ workflowBackup.configWorkflow(product);
+ }
+ }
+
+ var serv = deployServers.iterator();
+ while (serv.hasNext()) {
+ server = serv.next();
+ server.pluginVersion = product.serverPluginVersion;
+ tasks.add(product.DeployTask(product, server, eXo.env.m2Repos));
+ if (database != null) {
+ tasks.add(database.DeployTask(product, server, eXo.env.m2Repos));
+ tasks.add(database.ConfigureTask(product, server, dbsetup));
+ }
+ if (product.name == "eXoWorkflow") {
+ var patchWorkflow = eXo.server.WorkflowConfig;
+ tasks.add(patchWorkflow.patchWarWorkflow(server, product));
+ }
+ if (product.name == "eXoDMS") {
+ if (product.useWorkflow || useWorkflowPlg || enableWorkflow) {
+ if (enableWorkflow) {
+ var patchWorkflow = eXo.server.WorkflowConfig;
+ tasks.add(patchWorkflow.patchWarWorkflow(server, product));
+ }
+ }
+ }
+ if (server.name == "ear") {
+ tasks.add(EarTask(server, product, version));
+ }
+
+ if (release_)
+ tasks.add(ReleaseTask(server, product, version));
+ }
+}
+/**
+ * Liveroom Deploys and configures Openfire Deploys a Red5 server automatically
+ * after deploying Liveroom
+ */
+if ((product.hasDependencyModule("liveroom") || productName == "liveroom") && deployServers != null) {
+ var liveroomModule = (product.module.name == "liveroom") ? product.module : product.getDependencyModule("liveroom");
+ liveroomModule.configure(tasks, deployServers, serverMap);
+}
+
+/**
+ * Deploy openfire for CS Chat application Deploys and configures Openfire
+ * Deploys a Red5 server automatically after deploying Liveroom
+ */
+if ((product.hasDependencyModule("cs") || productName == "cs") && deployServers != null) {
+ var csModule = (product.module.name == "cs") ? product.module : product.getDependencyModule("cs");
+ if (csModule.eXoApplication && csModule.eXoApplication.chat) {
+ csModule.configure(tasks, deployServers, serverMap);
+ }
+}
+
+for ( var i = 0; i < tasks.size(); i++) {
+ task = tasks.get(i);
+ var start = java.lang.System.currentTimeMillis();
+ task.banner();
+ task.execute();
+ task.executionTime = java.lang.System.currentTimeMillis() - start;
+ task.report();
+}
+java.lang.System.exit(0);
\ No newline at end of file
Added: tools/packager/trunk/src/main/javascript/eXo/command/exoproject.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/command/exoproject.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/command/exoproject.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,107 @@
+eXo.require("eXo.server") ;
+eXo.require("eXo.server.Tomcat") ;
+eXo.require("eXo.command.maven") ;
+
+function exoproject() {
+ server = new Tomcat(eXo.env.workingDir + "/tomcat") ;
+};
+
+exoproject.prototype.ModuleDeploy = function() {
+ var maven = new eXo.command.maven() ;
+ var mvnArgs = ["clean","install"] ;
+ maven.MavenTask(eXo.env.currentDir, mvnArgs).execute() ;
+
+ src = new java.io.File("target") ;
+ var child = src.listFiles();
+ for(i = 0; i < child.length; i++) {
+ var file = child[i] ;
+ if(file.getName().endsWith(".jar")) {
+ eXo.System.info("COPY", file.getName() + " to " + server.deployLibDir) ;
+ eXo.core.IOUtil.cp(file.getAbsolutePath(), server.deployLibDir + "/" + file.getName()) ;
+ } else if(file.getName().endsWith(".war")) {
+ eXo.System.info("COPY", file.getName() + " to " + server.deployWebappDir) ;
+ eXo.core.IOUtil.cp(file.getAbsolutePath(), server.deployWebappDir + "/" + file.getName()) ;
+ }
+ }
+}
+
+exoproject.prototype.QuickWarDeploy = function() {
+ var maven = new eXo.command.maven() ;
+ var mvnArgs = ["compile", "jar:jar"] ;
+ maven.MavenTask(eXo.env.currentDir, mvnArgs).execute() ;
+
+ var dest = new java.io.File("src/main/webapp/WEB-INF/lib") ;
+ if(!dest.exists()) dest.mkdir() ;
+ src = new java.io.File("target") ;
+ var child = src.listFiles();
+ for(var i = 0; i < child.length; i++) {
+ var file = child[i] ;
+ if(file.getName().endsWith(".jar")) {
+ eXo.System.info("COPY", file.getName() + " to " + server.deployLibDir) ;
+ eXo.core.IOUtil.cp(file.getAbsolutePath(), "src/main/webapp/WEB-INF/lib/" + file.getName()) ;
+ } else if(file.getName().endsWith(".war")) {
+ var jarDir = new java.io.File(file.getAbsolutePath().substring(0, file.getAbsolutePath().length() - 4) + "/WEB-INF/lib") ;
+ if(jarDir.exists()) {
+ var jarChild = jarDir.listFiles();
+ for(var j = 0; j < jarChild.length; j++) {
+ var jarFile = jarChild[j] ;
+ eXo.System.info("COPY", jarFile.getName() + " to " + server.deployLibDir) ;
+ eXo.core.IOUtil.cp(jarFile.getAbsolutePath(), "src/main/webapp/WEB-INF/lib/" + jarFile.getName()) ;
+ }
+ }
+ }
+ }
+}
+
+exoproject.prototype.ContextDeploy = function() {
+ var folder = new java.io.File("src/main/resources/tomcat") ;
+ var child = folder.listFiles();
+ var destination = server.serverHome + "/conf/Catalina/localhost" ;
+ for(var i = 0; i < child.length; i++) {
+ var file = child[i] ;
+ if(file.getName().endsWith(".xml")) {
+ eXo.System.info("COPY", file.getName() + " to " + destination) ;
+ eXo.core.IOUtil.cp(file.getAbsolutePath(), destination + "/" + file.getName()) ;
+ }
+ }
+}
+
+function printInstructions() {
+ print(
+ "\n\n" +
+ "Usage of exoproject command: \n\n" +
+ " exoproject --deploy=[context,module,quickwar] [--server=tomcat,jboss,jonas,ear,jbossear] \n\n" +
+ "Options: \n" +
+ " * --deploy is mandatory. Enables to deploy either a context, a module (jar) or a war.\n" +
+ " * --server is optional. Enables to specify the target application server.\n"
+ );
+ }
+
+var args = arguments;
+
+if(args.length == 0) {
+ printInstructions() ;
+ java.lang.System.exit(1);
+}
+
+exoproject = new exoproject() ;
+for(var i = 0; i < args.length; i++) {
+ var arg = args[i] ;
+ if("--server=jonas".equals(arg)) {
+ exoproject.server = Jonas(eXo.env.workingDir + "/jonas") ;
+ } else if("--server=jboss".equals(arg)) {
+ exoproject.server = Jboss(eXo.env.workingDir + "/jboss") ;
+ } else if("--server=jbossear".equals(arg)) {
+ exoproject.server = JbossEar(eXo.env.workingDir + "/jboss") ;
+ } else if("--server=ear".equals(arg)) {
+ exoproject.server = Ear(eXo.env.workingDir + "/ear") ;
+ } else if("--server=tomcat".equals(arg)) {
+ exoproject.server = Tomcat(eXo.env.workingDir + "/tomcat") ;
+ } else if("--deploy=context".equals(arg)) {
+ exoproject.ContextDeploy() ;
+ } else if("--deploy=module".equals(arg)) {
+ exoproject.ModuleDeploy() ;
+ } else if("--deploy=quickwar".equals(arg)) {
+ exoproject.QuickWarDeploy() ;
+ }
+}
Added: tools/packager/trunk/src/main/javascript/eXo/command/exosvn.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/command/exosvn.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/command/exosvn.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,152 @@
+eXo.require("eXo.core.TaskDescriptor") ;
+eXo.require("eXo.core.Util") ;
+
+function exosvn() {
+
+};
+
+function exosvnInstructions() {
+ print(
+ "\n" +
+ "Use of the exosvn command: \n\n" +
+ " exosvn \n" +
+ " [add]\n" +
+ " [rm]\n" +
+ "\n\n" +
+ "Options: \n" +
+ " * add looks for new files in the project and adds them in svn\n" +
+ " * rm looks for file to remove from svn\n"
+ );
+}
+
+exosvn.prototype.Param = function(args) {
+ var param = {} ;
+ for(var i = 0; i < args.length; i++ ) {
+ if(args[i].match("--include=")) {
+ param.include = args[i].substring("--include=".length()) ;
+ } else if(args[i].match("--exclude=")) {
+ param.exclude = args.substring("--exclude=".length()) ;
+ } else {
+ param.workingDir = args[i] ;
+ }
+ }
+ return param ;
+}
+
+exosvn.prototype.MatchFile = function (param) {
+ var matcher = {} ;
+ matcher.proc = java.lang.Runtime.getRuntime().exec("svn st " + param.workingDir) ;
+ matcher.files = new java.util.ArrayList() ;
+ var din = new java.io.DataInputStream(matcher.proc.getInputStream() );
+
+ while( (line=din.readLine()) != null ) {
+ if(line.matches(param.include) && !line.matches(param.exclude)) {
+ matcher.files.add(line) ;
+ print(line);
+ }
+ }
+ // waits for the process to end before returns
+ while (matcher.proc.waitFor() != 0) {}
+ return matcher ;
+}
+
+exosvn.prototype.AddTask = function(args) {
+ var descriptor = new TaskDescriptor("svn add", "") ;
+
+ descriptor.execute = function() {
+ param = exosvn.Param(args) ;
+ if(param.workingDir == null) param.workingDir = descriptor.workingDir ;
+ // includes all lines beginning with '?' and followed by any characters
+ if(param.include == null) param.include = "^\\?.*" ;
+ // excludes the 'target' directory and files created by eclipse (.classpath; .settings; .project; .wtpmodules)
+ if(param.exclude == null) param.exclude = ".*\.classpath$|.*\.settings$|.*\.project$|.*\.wtpmodules$|.*target$";
+ java.lang.System.setProperty("user.dir", param.workingDir) ;
+
+ matches = exosvn.MatchFile(param) ;
+ proc = matches.proc ;
+ var exitValue = proc.exitValue();
+ if(exitValue == 0 && matches.files.size() > 0) {
+ var input = eXo.System.readInput("Do you want to add the above files[yes] ?") ;
+ if("yes".equals(input)) {
+ var b = new java.lang.StringBuilder() ;
+ b.append("svn add ");
+ for(i = 0; i < matches.files.size();i++) {
+ b.append(matches.files.get(i).substring(6));
+ }
+ proc = java.lang.Runtime.getRuntime().exec(b.toString()) ;
+ }
+ } else {
+ print("Cannot perform the svn command, svn exit with the code " + exitValue);
+ }
+ errStream = new java.io.DataInputStream( proc.getInputStream() );
+ while( (line = errStream.readLine()) != null ) print(line) ;
+ }
+ return descriptor ;
+}
+
+//exosvn.prototype.UpdateTask = function(module) {
+//
+// var task = new TaskDescriptor("svn update", module) ;
+// task.description = "Run svn update again module " + module ;
+//
+// task.execute = function() {
+// java.lang.Runtime.getRuntime().exec("svn update " + module) ;
+// var args = ['svn', 'update', module] ;
+// print("Module: " + module) ;
+// var result = eXo.System.run(args, true, true) ;
+// }
+// return task;
+//}
+
+exosvn.prototype.RemoveTask = function(args) {
+ var descriptor = new TaskDescriptor("svn remove", "") ;
+
+ descriptor.execute = function() {
+ param = exosvn.Param(args) ;
+ if(param.workingDir == null) param.workingDir = descriptor.workingDir ;
+ if(param.include == null) param.include = "^\\!.*" ;
+ java.lang.System.setProperty("user.dir", param.workingDir) ;
+
+ matches = exosvn.MatchFile(param) ;
+ proc = matches.proc ;
+ var exitValue = proc.exitValue();
+ if(exitValue == 0 && matches.files.size() > 0) {
+ var input = eXo.System.readInput("Do you want to remove the above files[yes] ?") ;
+ if("yes".equals(input)) {
+ var b = new java.lang.StringBuilder() ;
+ b.append("svn rm ");
+ for(i = 0; i < matches.files.size();i++) {
+ b.append(matches.files.get(i).substring(6));
+ }
+ proc = java.lang.Runtime.getRuntime().exec(b.toString()) ;
+ }
+ } else {
+ print("Cannot perform the svn command, svn exit with the code " + exitValue);
+ }
+ errStream = new java.io.DataInputStream( proc.getInputStream() );
+ while( (line = errStream.readLine()) != null ) print(line) ;
+ }
+
+ return descriptor ;
+}
+
+eXo.command.exosvn = exosvn.prototype.constructor ;
+
+
+var args = arguments;
+
+if(args.length == 0) {
+ exosvnInstructions() ;
+ java.lang.System.exit(1);
+} else {
+ exosvn = new exosvn();
+
+ var svncommand = args[0] ;
+ args = eXo.core.Util.shift(args) ;
+
+ if ("add".equals(svncommand)) {
+ exosvn.AddTask(args).execute() ;
+ } else if ("rm".equals(svncommand)) {
+ exosvn.RemoveTask(args).execute() ;
+ }
+}
\ No newline at end of file
Added: tools/packager/trunk/src/main/javascript/eXo/command/maven.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/command/maven.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/command/maven.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,38 @@
+eXo.require("eXo.core.TaskDescriptor");
+
+function maven() {
+
+}
+maven.prototype.MavenTask = function(projectDir, args) {
+ var descriptor = new TaskDescriptor("Maven Task", projectDir) ;
+ descriptor.description = "Run mvn " + args + " against module " + projectDir ;
+ descriptor.projectDir = projectDir;
+ descriptor.mavenArgs = args;
+
+ descriptor.execute = function() {
+ var m2Home= eXo.env.m2Home ;
+ java.lang.System.setProperty("maven.home", m2Home) ;
+ java.lang.System.setProperty("classworlds.conf", m2Home + "/bin/m2.conf") ;
+
+ java.lang.System.setProperty("user.dir", this.workingDir) ;
+ print("path: " + m2Home) ;
+ var mvnClasspath = [
+ new java.net.URL("file:" + m2Home + "/core/boot/classworlds-1.1.jar"),
+ new java.net.URL("file:" + m2Home + "/boot/classworlds-1.1.jar")
+ ] ;
+
+ var contextLoader= java.lang.Thread.currentThread().getContextClassLoader();
+ var mvnLoader = new java.net.URLClassLoader(mvnClasspath, contextLoader);
+ java.lang.Thread.currentThread().setContextClassLoader(mvnLoader);
+ var type = mvnLoader.loadClass("org.codehaus.classworlds.Launcher") ;
+ var exitCode = type.newInstance().mainWithExitCode(this.mavenArgs);
+ java.lang.System.gc() ;
+ if(exitCode != 0) {
+ throw new java.lang.Exception("BUILD MODULE :" + this.workingDir + " FAILED");
+ }
+ java.lang.Thread.currentThread().setContextClassLoader(contextLoader);
+ }
+ return descriptor ;
+}
+
+eXo.command.maven = maven.prototype.constructor ;
Added: tools/packager/trunk/src/main/javascript/eXo/command/svn.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/command/svn.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/command/svn.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,23 @@
+eXo.require("eXo.core.TaskDescriptor") ;
+eXo.require("eXo.core.Util") ;
+
+function svn() {
+
+};
+
+
+svn.prototype.UpdateTask = function(module) {
+
+ var task = new TaskDescriptor("svn update", module) ;
+ task.description = "Run svn update on module " + module ;
+
+ task.execute = function() {
+ var args = ['svn', 'update', module] ;
+ print("Module: " + module) ;
+ // Runs the command
+ var result = eXo.System.run(args, true, true) ;
+ }
+ return task;
+}
+
+eXo.command.svn = svn.prototype.constructor ;
\ No newline at end of file
Added: tools/packager/trunk/src/main/javascript/eXo/core/IOUtil.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/core/IOUtil.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/core/IOUtil.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,338 @@
+function IOUtil() {
+}
+
+IOUtil.prototype.shift = function(args) {
+ if(args.length == 0) return args ;
+ var newargs = new Array() ;
+ for(var i = 0; i < args.length - 1; i++) newargs[i] = args[i + 1] ;
+ return newargs ;
+}
+
+
+IOUtil.prototype.emptyFolder = function(folder) {
+ if(typeof(folder) == 'string') {
+ this.emptyFolder(new java.io.File(folder)) ;
+ } else {
+ if(folder.exists() && folder.isDirectory()) {
+ var child = folder.listFiles();
+ for(var i = 0; i < child.length; i++) {
+ var file = child[i]
+ if(file.isDirectory()) this.emptyFolder(file) ;
+ var method = file.getClass().getMethod('delete', null);
+ var result = method.invoke(file, null);
+ if(result) {
+ eXo.System.vinfo("[DELETE] " + file.getAbsolutePath());
+ } else {
+ print("[ERROR] Cannot delete " + file.getAbsolutePath());
+ }
+ }
+ }
+ }
+}
+
+IOUtil.prototype.remove = function(path) {
+ var file = path ;
+ if(typeof(path) == 'string') file = new java.io.File(path) ;
+
+ if(file.exists()) {
+ this.emptyFolder(file) ;
+ var method = file.getClass().getMethod('delete', null);
+ var result = method.invoke(file, null);
+ if(result) {
+ eXo.System.vinfo("[DELETE] " + file.getAbsolutePath());
+ } else {
+ print("[ERROR] Cannot delete " + file.getAbsolutePath());
+ }
+ } else {
+ print("[ERROR] Cannot find " + path);
+ }
+}
+
+IOUtil.prototype.createByteArray = function(size) { // creates an array of 2^size bytes
+ var buff = new java.io.ByteArrayOutputStream(size) ;
+ buff.write(1) ;
+ for(var i = 0; i < size; i++) {
+ var innerBuff = buff.toByteArray() ;
+ buff.write(innerBuff, 0, innerBuff.length) ;
+ }
+ var bytes = buff.toByteArray() ;
+ return bytes ;
+}
+
+IOUtil.prototype.cp = function(src, dest) {
+ var srcFolder = new java.io.File(src) ;
+ if(!srcFolder.exists()) {
+ throw(src + " does not exist") ;
+ } else if(srcFolder.isFile()) {
+ var destFolder = new java.io.File(dest);
+ if (destFolder.isFile()) {
+ dest = destFolder.getParent();
+ }
+ if (destFolder.exists()) {
+ dest = dest + "/" + srcFolder.getName();
+ }
+ var input = new java.io.FileInputStream(srcFolder) ;
+ var output = new java.io.FileOutputStream(dest) ;
+ var buff = this.createByteArray(12) ;
+ var len = 0 ;
+ while ((len = input.read(buff)) > 0) {
+ output.write(buff, 0, len);
+ }
+ input.close();
+ output.close();
+ this.chmod(srcFolder,dest)
+ eXo.System.vinfo("COPY", "Copy file " + src) ;
+ } else {
+ var destFolder = new java.io.File(dest) ;
+ if(!destFolder.exists()) {
+ destFolder.mkdirs() ;
+ eXo.System.vinfo("MKDIR", "Create a directory " + dest) ;
+ }
+ var child = srcFolder.listFiles();
+ for(var i = 0; i < child.length; i++) {
+ var file = child[i] ;
+ if(file.isFile()) {
+ this.cp(file.getAbsolutePath(),
+ destFolder.getAbsolutePath() + "/" + file.getName());
+ } else {
+ this.cp(file.getAbsolutePath(),
+ destFolder.getAbsolutePath() + "/" + file.getName());
+ }
+ }
+ }
+}
+
+IOUtil.prototype.createFile = function(path, content) {
+ var tmp = new java.lang.String(content) ;
+ var bytes = tmp.getBytes() ;
+ var out = new java.io.FileOutputStream(path);
+ out.write(bytes, 0, bytes.length);
+ out.close();
+ eXo.System.vinfo("NEW", "Create file " + path) ;
+}
+
+IOUtil.prototype.createFolder = function(path) {
+ var folder = new java.io.File(path);
+ if(!folder.exists()) {
+ folder.mkdirs();
+ eXo.System.vinfo("MKDIR", "Create a directory " + path) ;
+ } else {
+ eXo.System.vinfo("INFO", "Directory is exists" ) ;
+ }
+}
+
+IOUtil.prototype.patchWar = function(warFile, properties, templateEntry, destEntry, mentries) {
+ print("[PATCH WAR]" + warFile.getName());
+ if (this.getJarEntryContent(warFile, templateEntry) != null) {
+ var configTmpl = this.getJarEntryAsText(warFile, templateEntry);
+ eXo.System.info("CONF", "Filtering war entry " + templateEntry + " > " + destEntry);
+ var config = eXo.core.Util.modifyText(configTmpl, properties) ;
+ mentries.put(destEntry, config.getBytes()) ;
+ } else {
+ eXo.System.info("CONF", "Failed to filer war entry " + templateEntry);
+ java.lang.System.exit(1);
+ }
+ return mentries;
+}
+
+IOUtil.prototype.getJarEntryContent = function(fileName, entryName) {
+ var file = new java.io.File(fileName);
+ if (!file.exists()) {
+ eXo.System.info("IO", "" + fileName + " file not found" ) ;
+ return null;
+ }
+ eXo.System.info("IO", "Opening " + file);
+ var jar = new java.util.jar.JarFile(file) ;
+ var entries = jar.entries() ;
+ while(entries.hasMoreElements()) {
+ var entry = entries.nextElement() ;
+ if(entry.getName() == entryName) {
+ var entryStream = jar.getInputStream(entry);
+ var buffer = this.createByteArray(12) ;
+ var bytesRead;
+ var out = new java.io.ByteArrayOutputStream();
+ while ((bytesRead = entryStream.read(buffer)) != -1) {
+ out.write(buffer, 0, bytesRead);
+ }
+ entryStream.close();
+ jar.close() ;
+ return out.toByteArray() ;
+ }
+ }
+ jar.close() ;
+ return null;
+}
+
+IOUtil.prototype.getJarEntryAsText = function(fileName, entryName) {
+ return new java.lang.String(this.getJarEntryContent(fileName, entryName));
+}
+
+IOUtil.prototype.modifyJarEntry = function(moduleFile, configEntry, properties) {
+ var file = new java.io.File(moduleFile) ;
+ if(!file.exists()) return ;
+ var content = this.getJarEntryAsText(moduleFile, configEntry) ;
+ var i = properties.entrySet().iterator();
+ while(i.hasNext()) {
+ var entry = i.next() ;
+ content = content.replace(entry.getKey(), entry.getValue()) ;
+ }
+
+ mentries = new java.util.HashMap() ;
+ mentries.put(configEntry, content.getBytes("UTF-8")) ;
+ eXo.core.IOUtil.modifyJar(moduleFile, mentries, null);
+}
+
+/**
+ * This method allow you to modify the content of one/multiple entries and the manifiest of
+ * a jar file.
+ *
+ * fileName: The absolute path to the jar file that you want to modify
+ * entries: A java.util.Map object. The key should be the entry name that you want to
+ * modify, and the value should be a java byte array (byte[])
+ */
+IOUtil.prototype.modifyJar = function(fileName, mentries, mattrs) {
+ print("[MODIFY JAR]" + fileName);
+ var file = new java.io.File(fileName);
+ var jar = new java.util.jar.JarFile(fileName) ;
+ var mf = jar.getManifest() ;
+ if(mattrs != null) {
+ var i = mattrs.entrySet().iterator();
+ while(i.hasNext()) {
+ var entry = i.next();
+ mf.getMainAttributes().putValue(entry.getKey(), entry.getValue()) ;
+ }
+ }
+ var tmpFile = new java.io.File(fileName + ".tmp") ;
+ var jos = new java.util.jar.JarOutputStream(new java.io.FileOutputStream(tmpFile), mf) ;
+ var entries = jar.entries() ;
+ var buffer = this.createByteArray(12) ;
+ var bytesRead;
+ while(entries.hasMoreElements()) {
+ var entry = entries.nextElement() ;
+ var entryName = entry.getName() ;
+ if(entryName.match("MANIFEST.MF")) {
+ } else if(mentries != null && mentries.containsKey(entryName)) {
+ entry = new java.util.jar.JarEntry(entryName) ;
+ jos.putNextEntry(entry) ;
+ var content = mentries.get(entryName) ;
+ jos.write(content, 0, content.length) ;
+ mentries.remove(entryName) ;
+ } else {
+ var entryStream = jar.getInputStream(entry);
+ jos.putNextEntry(entry) ;
+ while ((bytesRead = entryStream.read(buffer)) != -1) jos.write(buffer, 0, bytesRead);
+ }
+ }
+ jar.close() ;
+ jos.close() ;
+ this.remove(file) ;
+ tmpFile.renameTo(file) ;
+}
+
+IOUtil.prototype.addToArchive = function(zosStream, entryPath, file) {
+ eXo.System.info("ADDTOARCHIVE", entryPath + file.getName()) ;
+ if (entryPath != null && entryPath != "")
+ entryPath += "/";
+
+ if(file.isDirectory()) {
+ var children = file.listFiles() ;
+ for(var i = 0; i < children.length; i++) {
+ this.addToArchive(zosStream, entryPath + file.getName(), children[i]) ;
+ }
+ } else {
+ zosStream.putNextEntry(new java.util.zip.ZipEntry(entryPath + file.getName()));
+ if (this.log)
+ eXo.System.info("DEPLOY", entryPath + file.getName()) ;
+ var fis = new java.io.FileInputStream(file);
+ var buf = this.createByteArray(12) ;
+ var len = -1;
+ while((len = fis.read(buf)) > 0) {
+ zosStream.write(buf, 0, len);
+ }
+ fis.close();
+ }
+}
+
+IOUtil.prototype.zip = function(src, dest, zipName) {
+ var srcFile = new java.io.File(src) ;
+ if(!srcFile.exists()) {
+ eXo.System.vinfo("INFO", "File Not Exist " + srcFile.getAbsolutePath()) ;
+ java.lang.System.exit(1) ;
+ }
+ var destDir = new java.io.File(dest);
+ if(!destDir.exists()) destDir.mkdirs() ;
+ var destFile = new java.io.File(dest + "/" + zipName + ".zip");
+ this.remove(destFile) ;
+ var zos = new java.util.zip.ZipOutputStream(new java.io.FileOutputStream(destFile));
+ if(srcFile.isDirectory()) {
+ var children = srcFile.listFiles() ;
+ for(var i = 0; i < children.length; i++) {
+ this.addToArchive(zos, zipName, children[i]) ;
+ }
+ } else {
+ this.addToArchive(zos, zipName, srcFile) ;
+ }
+ zos.close() ;
+}
+
+IOUtil.prototype.ear = function(src, dest) {
+ this.log = true;
+ var srcFile = new java.io.File(src) ;
+ if(!srcFile.exists()) {
+ eXo.System.vinfo("INFO", "File Not Exist " + srcFile.getAbsolutePath()) ;
+ java.lang.System.exit(1) ;
+ }
+ var destDir = new java.io.File(dest.substring(0, dest.lastIndexOf("/")));
+ if(!destDir.exists()) destDir.mkdirs() ;
+ var destFile = new java.io.File(dest);
+ this.remove(destFile) ;
+ var zos = new java.util.zip.ZipOutputStream(new java.io.FileOutputStream(destFile));
+ if(srcFile.isDirectory()) {
+ var children = srcFile.listFiles() ;
+ for(var i = 0; i < children.length; i++) {
+ this.addToArchive(zos, "", children[i]) ;
+ }
+ } else {
+ this.addToArchive(zos, "", srcFile) ;
+ }
+ zos.close() ;
+ this.log = false;
+}
+
+IOUtil.prototype.chmod = function(srcFolder, dest) {
+ if (!java.lang.System.getProperty("os.name").startsWith("Windows")) {
+ try{
+ java.lang.Runtime.getRuntime().exec("chmod --reference=" + srcFolder + " " + dest );
+ } catch(error) {
+ }
+ }
+}
+
+IOUtil.prototype.chmodExecutable = function(dest) {
+ if (!java.lang.System.getProperty("os.name").startsWith("Windows")) {
+ try{
+ print("chmod +x on " + dest);
+ java.lang.Runtime.getRuntime().exec("chmod +x " + dest );
+ } catch(error) {
+ }
+ }
+}
+
+IOUtil.prototype.chmodExecutableInDir = function(dirName, extension) {
+ //Executable .sh
+ var binDir = new java.io.File(dirName);
+ if (binDir.isDirectory()){
+ var files = binDir.listFiles();
+ for (i = 0; i < files.length; i++) {
+ var fileChild = files[i];
+ if (fileChild.getName().endsWith(extension)){
+ eXo.core.IOUtil.chmodExecutable(fileChild);
+ }
+ }
+ }
+ }
+
+eXo.core.IOUtil = new IOUtil() ;
+
+//var test = eXo.core.IOUtil.getJarEntryContent("target/exo.tool.build-2.0.jar", "linux/exobuild.sh");
+//print (new java.lang.String(test));
Added: tools/packager/trunk/src/main/javascript/eXo/core/TaskDescriptor.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/core/TaskDescriptor.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/core/TaskDescriptor.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,47 @@
+TaskDescriptor = function (taskName, wd) {
+ this.name = taskName ;
+ this.description = "" ;
+ this.workingDir = wd ;
+ this.message = "" ;
+ this.executionTime = 0 ;
+
+ this.banner = function () {
+ print("--------------------------- RUNNING TASK ------------------------------------") ;
+ print("TASK : " + this.name) ;
+ print("DESCRIPTION : " + this.description) ;
+ print("WORKING DIR : " + this.workingDir) ;
+ print("-----------------------------------------------------------------------------") ;
+ }
+
+ this.execute = function () {
+ print("You Need to override this method") ;
+ }
+
+ this.report = function() {
+ print("-----------------------------------------------------------------------------") ;
+ print("TASK : " + this.name) ;
+ print("DESCRIPTION : " + this.description) ;
+ print("WORKING DIR : " + this.workingDir) ;
+ print("MESSAGE : " + this.message)
+ print("EXECUTION TIME : " + (this.executionTime/1000) + "s") ;
+ print("-----------------------------------------------------------------------------\n") ;
+ }
+}
+
+/*
+var task1 = new TaskDescriptor("task1", "target");
+var task2= new TaskDescriptor("task2", "target");
+
+task2.execute = function() {
+ print("execute task 2") ;
+}
+
+var tasks = [task1, task2] ;
+print("\n");
+
+for(var i = 0; i < tasks.length; i++) {
+ tasks[i].banner();
+ tasks[i].execute();
+ tasks[i].report();
+}
+*/
Added: tools/packager/trunk/src/main/javascript/eXo/core/Util.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/core/Util.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/core/Util.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,21 @@
+function Util() {
+
+}
+
+Util.prototype.shift = function(args) {
+ if(args.length == 0) return args ;
+ var newargs = new Array() ;
+ for(var i = 0; i < args.length - 1; i++) newargs[i] = args[i + 1] ;
+ return newargs ;
+}
+
+Util.prototype.modifyText = function(content, properties) {
+ var i = properties.entrySet().iterator();
+ while(i.hasNext()) {
+ var entry = i.next() ;
+ content = content.replace(entry.getKey(), entry.getValue()) ;
+ }
+ return content
+}
+
+eXo.core.Util = new Util() ;
Added: tools/packager/trunk/src/main/javascript/eXo/eXo.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/eXo.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/eXo.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,112 @@
+function Env() {
+
+ print("******************************************");
+ print("* eXo Package version embeeded in GateIn *");
+ print("******************************************");
+
+ this.eXoPackageHome = java.lang.System.getProperty("exo.package.home");
+ print("* eXoPackageHome : " + this.eXoPackageHome);
+
+ this.baseDir = java.lang.System.getProperty("exo.base.dir");
+ print("* BaseDir : " + this.baseDir);
+
+ this.workingDir = java.lang.System.getProperty("exo.working.dir");
+ if (this.workingDir == null || this.workingDir.equals("")) {
+ this.workingDir = this.baseDir + "/exo-working";
+ }
+ print("* workingDir : " + this.workingDir);
+
+ this.eXoConfDir = java.lang.System.getProperty("exo.conf.dir");
+ print("* eXoConfDir : " + this.eXoConfDir);
+
+ this.dependenciesDir = java.lang.System.getProperty("exo.dep.dir");
+ if (this.dependenciesDir == null || this.dependenciesDir.equals(""))
+ this.dependenciesDir = this.baseDir + "/exo-dependencies";
+ print("* dependenciesDir : " + this.dependenciesDir);
+
+ this.eXoProjectsDir = java.lang.System.getProperty("exo.src.dir");
+ if (this.eXoProjectsDir == null || this.eXoProjectsDir.equals(""))
+ this.eXoProjectsDir = this.baseDir + "/eXoProjects";
+ print("* eXoProjectsDir : " + this.eXoProjectsDir);
+
+ this.javaHome = java.lang.System.getProperty("java.home");
+ print("* javaHome : " + this.javaHome);
+ this.currentDir = java.lang.System.getProperty("exo.current.dir");
+ print("* currentDir : " + this.currentDir);
+
+ if (this.currentDir.startsWith("/cygdrive/")) {
+ this.currentDir = this.currentDir.substring("/cygdrive/".length);
+ this.currentDir = this.currentDir.replaceFirst("/", ":/");
+ }
+ print("* currentDir : " + this.currentDir);
+
+ this.m2Home = java.lang.System.getProperty("exo.m2.home");
+ if (this.m2Home == null || this.m2Home.equals(""))
+ this.m2Home = this.baseDir + "/maven2";
+ print("* m2Home : " + this.m2Home);
+
+ print("* m2Repos : " + java.lang.System.getProperty("exo.m2.repos"));
+ var m2Repos = java.lang.System.getProperty("exo.m2.repos").split(",");
+ this.m2Repos = new Array();
+ var j = 0;
+ for ( var i = 0; i < m2Repos.length; i++)
+ if (m2Repos[i].trim() != "")
+ this.m2Repos[j++] = m2Repos[i].trim();
+
+ this.cleanServer = java.lang.System.getProperty("clean.server");
+ print("* cleanServer : " + this.cleanServer);
+ print("********************************");
+
+}
+
+var eXo = {
+ core : {},
+ projects : {},
+ server : {},
+ command : {},
+
+ env :new Env(),
+
+ require : function(module, jsLocation) {
+ try {
+ if (eval(module + ' != null'))
+ return;
+ } catch (err) {
+ print("[ERROR] err : " + module);
+ java.lang.System.exit(1);
+ }
+ if (jsLocation == null) {
+ jsLocation = eXo.env.eXoPackageHome + '/javascript/';
+ }
+ var path = jsLocation + module.replace(/\./g, '/') + '.js';
+ try {
+ load(path);
+ } catch (err) {
+ print("[ERROR] Cannot load the javascript module " + module + " from " + jsLocation);
+ print(err);
+ }
+ },
+
+ load : function(relativePath, jsLocation) {
+ if (jsLocation == null) {
+ jsLocation = eXo.env.eXoPackageHome + '/javascript/';
+ }
+ var path = jsLocation + '/' + relativePath;
+ print("Loading path : " + path);
+ try {
+ load(path);
+ } catch (err) {
+ print("Cannot load the javascript module " + relativePath + " from " + jsLocation);
+ print(err);
+ }
+ }
+};
+
+eXo.require("eXo.System");
+eXo.require("eXo.core.Util");
+
+if (arguments.length > 0) {
+ var command = arguments[0];
+ arguments = eXo.core.Util.shift(arguments);
+ eXo.require("eXo.command." + command);
+}
Added: tools/packager/trunk/src/main/javascript/eXo/projects/Module.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/projects/Module.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/projects/Module.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,43 @@
+eXo.require("eXo.projects.Project");
+
+function Module() {
+ this.version = null;
+ this.relativeMavenRepo = null;
+ this.relativeSRCRepo = null;
+ this.name = null;
+}
+
+Module.GetModule = function(path, params) {
+ // Try to load the module descriptor corresponding to the specified name and
+ // version
+// var srcPath = "/modules/" + path + "/";
+// var srcConf = eXo.env.eXoConfDir + srcPath;
+// var srcLoc = eXo.env.currentDir + srcPath;
+//
+// // eXo.System.info("Opening " + src);
+// print("Loading module: " + srcPath);
+// if (new java.io.File(srcLoc+"module.js").exists()) {
+// // Local
+// eXo.load("module.js", srcLoc);
+// } else {
+// // Sinon configuration
+// eXo.load("module.js", srcConf);
+// }
+ var srcName = path + ".packaging.module.js";
+ var srcConf = eXo.env.eXoConfDir;
+
+ // eXo.System.info("Opening " + src);
+ print("Loading: " + srcName + " ( in " + srcConf + ")");
+ eXo.load(srcName, srcConf);
+
+
+ try {
+ // The function getModule() is defined in the loaded module descriptor
+ return getModule(params);
+ } catch (error) {
+ print("ERROR while loading module descriptor (name=\"" + name
+ + "\", version=\"" + version + "\"). Perhaps it is missing.");
+ java.lang.System.exit(1);
+ }
+ return null;
+}
Added: tools/packager/trunk/src/main/javascript/eXo/projects/Product.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/projects/Product.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/projects/Product.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,197 @@
+eXo.require("eXo.core.TaskDescriptor");
+
+function Product() {
+ this.name = null;
+ this.portalwar = null;
+ this.codeRepo = null;
+ this.dependenciesHolder = new java.util.HashMap();
+ this.serverPatches = new java.util.HashMap();
+
+ this.module = null;
+ this.useWorkflow = false;
+ this.useContentValidation = false;
+ this.dependencyModule = null;
+ this.serverPluginVersion = "trunk";
+}
+
+Product.prototype.getVersion = function() {
+
+};
+
+Product.GetProduct = function(name, version) {
+ // Try to load the product descriptor corresponding to the specified name
+ // and version
+
+ var srcName = name + ".packaging.product.js";
+ var srcConf = eXo.env.eXoConfDir;
+
+ // eXo.System.info("Opening " + src);
+ print("Loading: " + srcConf + "/" + srcName);
+ eXo.load(srcName, srcConf);
+
+// try {
+ // The function getProduct() is defined in the loaded product decriptor
+ var product = getProduct(version);
+
+ // Set the version on the product
+ product.version = version;
+
+ //
+ return product;
+// } catch (error) {
+// eXo.System.error("ERROR while loading product descriptor (name=\"" + name + "\").");
+// eXo.System.error(error);
+// throw error;
+// }
+}
+
+Product.prototype.addServerPatch = function(serverName, project) {
+ eXo.System.info("DEBUG", "Product.addServerPatch serverName = " + serverName);
+ var holders = this.serverPatches.get(serverName);
+ if (holders == null) {
+ holders = new java.util.ArrayList(3);
+ this.serverPatches.put(serverName, holders);
+ }
+ holders.add(project);
+}
+
+Product.prototype.getServerPatches = function(serverName) {
+ return this.serverPatches.get(serverName);
+}
+
+Product.prototype.addDependencies = function(project) {
+ try {
+ this.dependenciesHolder.put(project.relativePath, project);
+ if (project.hasDependency()) {
+ var list = project.dependencies;
+ for ( var i = 0; i < list.size(); i++) {
+ this.addDependencies(list.get(i));
+ }
+ }
+ } catch (error) {
+ print("Error while adding dependencies for project " + project);
+ throw error;
+ }
+}
+
+Product.prototype.getDependencies = function() {
+ return this.dependenciesHolder.values();
+}
+
+Product.prototype.getDependency = function(project) {
+ return this.dependenciesHolder.get(project.relativePath);
+}
+
+Product.prototype.getDependencyById = function(depId) {
+ var arrDep = this.getDependencies().toArray();
+ for ( var i = 0; i < arrDep.length; i++) {
+ var project = arrDep[i];
+ if (project.artifactId == depId) {
+ return project;
+ }
+ }
+ return null;
+}
+
+Product.prototype.hasDependency = function(project) {
+ return this.dependenciesHolder.containsKey(project.relativePath);
+}
+
+Product.prototype.removeDependency = function(project) {
+ eXo.System.info("DELETE", "Remove dependency " + project.artifactId);
+ this.dependenciesHolder.remove(project.relativePath);
+}
+
+Product.prototype.removeDependencyById = function(projectId) {
+ var project = this.getDependencyById(projectId);
+ if (project !== null) {
+ this.removeDependency(project);
+ } else {
+ eXo.System.info("ERROR", "Dependency " + projectId + " doesn't exist !");
+ }
+}
+
+Product.prototype.removeDependencyByGroupId = function(groupId) {
+ var dependencies = new java.util.ArrayList();
+ var arrDep = this.getDependencies().toArray();
+ for ( var i = 0; i < arrDep.length; i++) {
+ var project = arrDep[i];
+ if (project.groupId == groupId) {
+ this.removeDependency(project);
+ }
+ }
+};
+
+Product.prototype.hasDependencyModule = function(depName) {
+ var hasDep = false;
+ if (this.dependencyModule !== null) {
+ for ( var i = 0; i < this.dependencyModule.length && !hasDep; i++)
+ hasDep = (this.dependencyModule[i].name == depName);
+ }
+ return hasDep;
+};
+
+Product.prototype.getDependencyModule = function(depName) {
+ var mod = null;
+ if (this.hasDependencyModule(depName)) {
+ for ( var i = 0; i < this.dependencyModule.length && mod === null; i++) {
+ if (this.dependencyModule[i].name == depName)
+ mod = this.dependencyModule[i];
+ }
+ }
+ return mod;
+};
+
+/**
+ *
+ */
+Product.prototype.preDeploy = function() {
+ // TODO : to overwrite in your product definition
+ // like : product.cleanDependencies = function() { .. }
+};
+
+Product.prototype.DeployTask = function(product, server, repos) {
+ patches = product.getServerPatches(server.name);
+ eXo.System.info("INFO", "Add DeployTask for product '" + product.name
+ + "' version '" + product.codeRepo + "' on server '" + server.name
+ + "' with patches '" + patches + "'.");
+ if (patches == null) {
+ var msg = "The server " + server.name + " may not support this product: "
+ + product.name + ". Please try to use another server";
+ eXo.System.print("INFO", msg);
+ return;
+ }
+ var descriptor = new TaskDescriptor("Deploy Product", server.serverHome);
+ descriptor.execute = function() {
+ eXo.System.info("DELETE", "Delete " + server.serverHome);
+ eXo.core.IOUtil.remove(server.serverHome);
+ if (server.name != "ear") {
+ eXo.System.info("COPY", "Copy a clean server " + server.cleanServer);
+ eXo.core.IOUtil.cp(eXo.env.dependenciesDir + "/" + server.cleanServer,
+ server.serverHome);
+ }
+ server.preDeploy(product);
+ product.preDeploy();
+ for ( var i = 0; i < patches.size(); i++) {
+ project = patches.get(i);
+ var message = "Patch the server " + server.name + " with project "
+ + project.artifactId + " " + project.version;
+ eXo.System.info("INFO", message);
+ new java.io.File(server.patchDir).mkdirs();
+ project.extractTo(repos, server.patchDir, "META-INF/maven.*");
+ }
+
+ eXo.System.info("INFO", "Deploying dependencies");
+ var i = product.getDependencies().iterator();
+ counter = 0;
+ while (i.hasNext()) {
+ dep = i.next();
+ dep.deployTo(repos, server);
+ server.onDeploy(dep);
+ counter++;
+ }
+ eXo.System.info("INFO", "Deployed total " + counter + " files");
+ server.postDeploy(product);
+ }
+ return descriptor;
+}
Added: tools/packager/trunk/src/main/javascript/eXo/projects/Project.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/projects/Project.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/projects/Project.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,174 @@
+eXo.require("eXo.core.IOUtil") ;
+
+function Project(gid, id, ptype, version) {
+
+ // Uncomment for debugging
+ // print("Project.js: new Project(gid: " + gid + " id: " + id + " ptype: "+ ptype + " version: "+ version + " )");
+
+ this.groupId = gid ;
+ this.artifactId = id ;
+ this.version = version ;
+ this.type = ptype ;
+ this.deloyName = null ;
+
+ this.extension = ptype ;
+ if(ptype == "exo-portlet" || ptype == "exo-portal") this.extension = "war" ;
+ if(ptype == "exo-ear-jar") this.extension = "jar";
+ if(ptype == "exopc-war") this.extension = "exopc-war";
+ if(ptype == "exo-ear-rar") this.extension = "rar";
+ this.relativePath = gid.replace(/\./g, '/') + "/" + id + "/" + version + "/" +
+ id + "-" + version + "." + this.extension ;
+ this.artifact = gid + ":" + id + ":" + version + ":" + this.extension;
+ this.tomcatDependency = true ;
+ this.jbossDependency = true ;
+ this.jbossearDependency = true ;
+ this.earDependency = true ;
+ this.jonasDependency = true ;
+
+ this.dependencies = null ;
+}
+
+Project.prototype.setServerDependency = function (name, b) {
+ if("tomcat" == name) this.tomcatDependency = b ;
+ else if("jboss" == name) this.jbossDependency = b ;
+ else if("jbossear" == name) this.jbossearDependency = b ;
+ else if("ear" == name) this.earDependency = b ;
+ else if("jonas" == name) this.jonasDependency = b ;
+}
+
+Project.prototype.addDependency = function(project) {
+ if(this.dependencies == null) this.dependencies = new java.util.ArrayList() ;
+ this.dependencies.add(project) ;
+ return this ;
+}
+
+Project.prototype.hasDependency = function() {return this.dependencies != null ;}
+
+Project.prototype.extractTo = function(repository, dir, ignore) {
+ for( var i = 0; i < repository.length; i++) {
+ try {
+ var surl = repository[i] + "/" + this.relativePath;
+ var url = new java.net.URL(surl);
+ eXo.System.info("PATCH", "Fetching patch at " + repository[i] + "/" + this.relativePath);
+ var is = new java.util.jar.JarInputStream(url.openStream()) ;
+ var entry = is.getNextEntry() ;
+ while(entry != null) {
+ if(!entry.isDirectory()) {
+ var name = entry.getName() ;
+ if(ignore == null || !name.matches(ignore)) {
+ var file = new java.io.File(dir + "/" + name);
+ var parentFolder = new java.io.File(file.getParent()) ;
+ if(!parentFolder.exists()) parentFolder.mkdirs() ;
+ var out = new java.io.FileOutputStream(file) ;
+ var buf = new eXo.core.IOUtil.createByteArray(14) ;
+ var read = is.read(buf);
+ while(read != -1) {
+ out.write(buf, 0, read) ;
+ read = is.read(buf);
+ }
+ out.close();
+ if (file.getCanonicalPath().endsWith(".sh"))
+ IOUtil.prototype.chmodExecutable(file);
+ eXo.System.info("PATCH", dir + "/" + entry.getName()) ;
+ }
+ }
+ entry = is.getNextEntry() ;
+ }
+ is.close() ;
+ return ;
+ } catch(err) {
+ eXo.System.info(err.message);
+ if(i < (repository.length - 1)) eXo.System.info("Trying to download from the repo : " + repository[i+1]);
+ }
+
+ }
+ throw("Error while extracting the project : " + this.relativePath) ;
+}
+
+Project.prototype.deployTo = function(repository, server) {
+ for(var i = 0; i < repository.length; i++) {
+ try {
+ var surl = repository[i] + "/" + this.relativePath;
+ var url = new java.net.URL(surl);
+ //eXo.System.info("[DEPS] " + this.artifact);
+
+ var warName = null, fileName = null ;
+ if(this.deployName != null) {
+ warName = this.deployName;
+ } else {
+ warName = this.artifactId ;
+ var temp = warName.substring(warName.length - 7);
+ if(temp.match(".webapp")) {
+ warName = warName.substring(0, warName.lastIndexOf(".")) ;
+ }
+ warName = warName.substring(warName.lastIndexOf(".") + 1) ;
+ }
+
+ if(this.extension == "war") {
+ fileName = server.deployWebappDir + "/" + warName + ".war" ;
+ } else if(this.type == "exo-ear-jar") {
+ fileName = server.deployWebappDir + "/" + this.artifactId + ".jar" ;
+ } else if(this.type == "exo-ear-rar") {
+ fileName = server.deployWebappDir + "/" + this.artifactId + ".rar" ;
+ } else if(this.type == "ear") {
+ if (server.deployEarDir == null){
+ print("NO EAR DEPLOY DIR, by passing " + this.deployName);
+ return ;
+ }
+ fileName = server.deployEarDir + "/" + this.artifactId + ".ear" ;
+ } else if(this.type == "exopc-war") {
+ fileName = server.deployWebappDir + "/" + warName + ".war" ;
+ } else {
+ fileName = server.deployLibDir + "/" + this.artifactId + "-" +this.version + "." + this.type ;
+ }
+
+ var file = new java.io.File(fileName);
+ var parentFolder = new java.io.File(file.getParent()) ;
+ if(!parentFolder.exists()) parentFolder.mkdirs() ;
+ var out = new java.io.FileOutputStream(file) ;
+
+ //Check locally, download from maven if needed
+ var is = null ;
+ try {
+ is = url.openStream();
+ } catch (err1) {
+ eXo.System.info("Artifact " + this.artifact + " not found locally, searching in maven repos");
+ var mvnArgs = ["dependency:get", "-Dartifact=" + this.artifact, "-Dmaven.artifact.threads=1"] ;
+ maven.MavenTask(eXo.env.currentDir, mvnArgs).execute() ;
+ }
+
+ //Fetch the binary on the server
+ var is = url.openStream() ;
+ eXo.System.vprintIndentation() ;
+ eXo.System.vprint("[") ;
+ var buf = new eXo.core.IOUtil.createByteArray(14) ;
+ var read = 0, totalRead = 0, chunkOf100k = 0, chunkCount = 0 ;
+ while(read != -1) {
+ read = is.read(buf);
+ if(read > 0) {
+ out.write(buf, 0, read) ;
+ chunkOf100k += read ;
+ totalRead += read ;
+ if(chunkOf100k > 100000) {
+ chunkOf100k = chunkOf100k - 100000 ;
+ chunkCount++ ;
+ eXo.System.vprint(".");
+ }
+ }
+ }
+ for(i = chunkCount; i < 60; i++) eXo.System.vprint(" ") ;
+ eXo.System.vprint("] " + totalRead/1024 + "kb\n");
+ out.close();
+ is.close() ;
+ eXo.System.info("DEPLOY", fileName);
+ return ;
+ } catch(err) {
+ eXo.System.info(err.message);
+ if(i < (repository.length - 1)) {
+ eXo.System.info("Trying to download from the repo : " + repository[i+1]);
+ }
+ }
+ }
+ throw("Error while deploying the project : " + this.relativePath) ;
+}
+eXo.projects.Project = Project.prototype.constructor ;
Added: tools/packager/trunk/src/main/javascript/eXo/projects/Workflow.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/projects/Workflow.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/projects/Workflow.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,73 @@
+eXo.require("eXo.core.IOUtil") ;
+eXo.require("eXo.core.TaskDescriptor") ;
+eXo.require("eXo.projects.Project");
+
+function Workflow(workflowName, workflowVersion) {
+ this.name = workflowName;
+ this.version = workflowVersion;
+}
+
+Workflow.prototype.configWorkflow = function(product) {
+
+print("Workflow.js: Configuring workflow version: " + this.version + " name: "+this.name);
+
+ product.addDependencies(this.getPortlet());
+ if(this.name == "jbpm") {
+ print("Workflow.js: adding dependencies for jbpm");
+ product.addDependencies(new Project("org.exoplatform.ecm.workflow", "exo.ecm.workflow.component.workflow.impl.jbpm.facade", "jar", this.version));
+ product.addDependencies(new Project("org.exoplatform.ecm.workflow", "exo.ecm.workflow.component.workflow.impl.jbpm.engine", "jar", "3.0"));
+ product.addDependencies(new Project("org.exoplatform.ecm.workflow.bp", "exo.ecm.workflow.bp.jbpm.payraise", "jar", this.version));
+ product.addDependencies(new Project("org.exoplatform.ecm.workflow.bp", "exo.ecm.workflow.bp.jbpm.holiday", "jar", this.version));
+ if (product.useContentvalidation) {
+ product.addDependencies(new Project("org.exoplatform.ecm.dms.ext.contentvalidation", "exo.ecm.dms.ext.contentvalidation.component.jbpmconfig", "jar", product.contentvalidationVersion));
+ product.addDependencies(new Project("org.exoplatform.ecm.dms.ext.contentvalidation.bp", "exo.ecm.dms.ext.contentvalidation.bp.jbpm.content.publishing", "jar", product.contentvalidationVersion));
+ product.addDependencies(new Project("org.exoplatform.ecm.dms.ext.contentvalidation", "exo.ecm.dms.ext.contentvalidation.component.plugin", "jar", product.contentvalidationVersion));
+ product.addDependencies(new Project("org.exoplatform.ecm.dms.ext.contentvalidation", "exo.ecm.dms.ext.contentvalidation.component.workflowPublication", "jar", product.contentvalidationVersion));
+ product.addDependencies(new Project("org.exoplatform.ecm.dms.ext.contentvalidation", "exo.ecm.dms.ext.contentvalidation.component.webui", "jar", product.contentvalidationVersion));
+ }
+ } else if(this.name == "bonita") {
+ print("Workflow.js: adding dependencies for bonita");
+
+ product.addDependencies(new Project("org.exoplatform.ecm.workflow", "exo.ecm.workflow.component.workflow.impl.bonita", "jar", this.version));
+ product.addDependencies(new Project("org.exoplatform.ecm.workflow.bp", "exo.ecm.workflow.bp.bonita.holiday", "jar", this.version));
+ product.addDependencies(new Project("org.exoplatform.ecm.workflow.bp", "exo.ecm.workflow.bp.bonita.payraise", "jar", this.version));
+ if (product.useContentvalidation) {
+ product.addDependencies(new Project("org.exoplatform.ecm.dms.ext.contentvalidation", "exo.ecm.dms.ext.contentvalidation.component.plugin", "jar", product.contentvalidationVersion));
+ product.addDependencies(new Project("org.exoplatform.ecm.dms.ext.contentvalidation", "exo.ecm.dms.ext.contentvalidation.component.workflowPublication", "jar", product.contentvalidationVersion));
+ product.addDependencies(new Project("org.exoplatform.ecm.dms.ext.contentvalidation", "exo.ecm.dms.ext.contentvalidation.component.bonitaconfig", "jar", product.contentvalidationVersion));
+ product.addDependencies(new Project("org.exoplatform.ecm.dms.ext.contentvalidation.bp", "exo.ecm.dms.ext.contentvalidation.bp.bonita.content-publishing", "jar", product.contentvalidationVersion));
+ product.addDependencies(new Project("org.exoplatform.ecm.dms.ext.contentvalidation", "exo.ecm.dms.ext.contentvalidation.component.webui", "jar", product.contentvalidationVersion));
+ }
+
+ product.addDependencies(new Project("org.ow2.bonita", "bonita-api", "jar", "4.0"));
+ product.addDependencies(new Project("org.ow2.bonita", "bonita-core", "jar", "4.0"));
+ product.addDependencies(new Project("org.ow2.novabpm", "novaBpmIdentity", "jar", "1.0"));
+ product.addDependencies(new Project("org.ow2.novabpm", "novaBpmUtil", "jar", "1.0"));
+ product.addDependencies(new Project("org.jbpm", "pvm", "jar", "r2175"));
+
+ //Remove duplicate ehcache from Portal
+ product.removeDependency(new Project("net.sf.ehcache", "ehcache", "jar", "1.4.1"));
+
+ //Add external dependencies
+ product.addDependencies(new Project("bsh", "bsh", "jar", "2.0b1"));
+ product.addDependencies(new Project("net.sf.ehcache", "ehcache", "jar", "1.5.0"));
+ product.addDependencies(new Project("backport-util-concurrent", "backport-util-concurrent", "jar", "3.1"));
+ product.addDependencies(new Project("org.ow2.util.asm", "asm", "jar", "3.1"));
+ product.addServerPatch("jbossear",new Project("org.exoplatform.ecm.workflow", "exo.ecm.workflow.server.jboss.patch-ear", "jar", this.version));
+ product.addServerPatch("jboss",new Project("org.exoplatform.ecm.workflow", "exo.ecm.workflow.server.jboss.patch", "jar", this.version));
+ product.addServerPatch("tomcat",new Project("org.exoplatform.ecm.workflow", "exo.ecm.workflow.server.tomcat.patch", "jar", this.version));
+ }
+}
+
+Workflow.prototype.getPortlet = function() {
+ return new Project("org.exoplatform.ecm.workflow", "exo.ecm.workflow.portlet.workflow", "exo-portlet", this.version).
+ addDependency(new Project("org.exoplatform.ecm.workflow", "exo.ecm.workflow.component.workflow.api", "jar", this.version)).
+ addDependency(new Project("org.exoplatform.ecm.workflow", "exo.ecm.workflow.webui.workflow", "jar", this.version)).
+ addDependency(new Project("rome", "rome", "jar", "0.9")).
+ addDependency(new Project("com.totsp.feedpod", "itunes-com-podcast", "jar", "0.2")).
+ addDependency(new Project("jdom", "jdom", "jar", "1.0")).
+ addDependency(new Project("org.apache.ws.commons", "ws-commons-util", "jar", "1.0.1")).
+ addDependency(new Project("com.sun.xml.stream", "sjsxp", "jar", "1.0"));
+}
+
+eXo.projects.Workflow = Workflow.prototype.constructor ;
Added: tools/packager/trunk/src/main/javascript/eXo/projects/WorkflowBackup.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/projects/WorkflowBackup.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/projects/WorkflowBackup.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,34 @@
+eXo.require("eXo.core.IOUtil") ;
+eXo.require("eXo.core.TaskDescriptor") ;
+eXo.require("eXo.projects.Project");
+
+function WorkflowBackup(workflowName, workflowVersion) {
+ this.name = workflowName ;
+ this.version = workflowVersion;
+}
+
+WorkflowBackup.prototype.configWorkflow = function(product) {
+ if(this.name == "jbpm") {
+
+ print("WorkflowBackup.js: adding dependencies for jbpm");
+
+ product.addDependencies(new Project("org.exoplatform.ecm", "exo.ecm.component.workflow.impl.jbpm.facade", "jar", this.version)) ;
+ product.addDependencies(new Project("org.exoplatform.ecm", "exo.ecm.component.workflow.impl.jbpm.engine", "jar", "3.0")) ;
+ //For POC using 2.0, please use this
+ //product.addDependencies(new Project("org.exoplatform.ecm", "exo.ecm.component.workflow.impl.jbpm.facade", "jar", "2.0")) ;
+ // workflow version management has been fixed. Use "product.workflowVersion" variable in your JS product descriptor to set
+ // workflow version to use (avoid problem with trunk product using branche for workflow for example)
+ } else if(this.name = "bonita") {
+ print("WorkflowBackup.js: adding dependencies for bonita");
+ product.addDependencies(new Project("org.exoplatform.ecm", "exo.ecm.component.workflow.impl.bonita", "jar", this.version)) ;
+ product.addDependencies(new Project("org.objectweb.bonita", "bonita-client", "jar", "3.0"));
+ product.addDependencies(new Project("org.objectweb.bonita", "bonita", "exo-ear-jar", "3.0"));
+ product.addDependencies(new Project("org.objectweb.bonita", "config", "exo-ear-rar", "3.0"));
+ product.addDependencies(new Project("org.objectweb.bonita", "bonita_ws", "war", "3.0"));
+ product.addDependencies(new Project("org.objectweb.bonita", "jabber", "exo-ear-rar", "3.0"));
+ product.addDependencies(new Project("org.objectweb.bonita", "loadclass", "exo-ear-rar", "3.0"));
+ product.addServerPatch("jonas",new Project("org.exoplatform.ecm", "exo.ecm.server.jonas.patch", "jar", this.version));
+ }
+}
+
+eXo.projects.Workflow = Workflow.prototype.constructor ;
Added: tools/packager/trunk/src/main/javascript/eXo/server/Database.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/server/Database.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/server/Database.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,232 @@
+eXo.require("eXo.core.TaskDescriptor") ;
+eXo.require("eXo.projects.Project") ;
+
+function DBInstance() {
+ this.name = null ;
+ this.drivers = [] ;
+ this.conectionURL = null ;
+ this.driverClass = null ;
+ this.username = null ;
+ this.password = null;
+ this.dialect = null ;
+}
+
+DBInstance.prototype.DeployTask = function(product, server, repos) {
+ var task = new TaskDescriptor("Deploy Database Driver", null) ;
+ task.description = "Deploy the database driver for database " + this.name;
+// task.product = product ;
+// task.server = server ;
+ task.repos = repos ;
+ task.dbinstance = this ;
+
+ task.execute = function() {
+ var driver = this.dbinstance.drivers ;
+ for(var i = 0; i < driver.length ; i++) {
+ var project = driver[i] ;
+ project.deployTo(repos, server) ;
+ server.onDeploy(project) ;
+ }
+ }
+ return task ;
+}
+
+DBInstance.prototype.GetConfigTask = function() {
+ var descriptor = new TaskDescriptor("Configure Database", null) ;
+ descriptor.description = "Configure the database environment for " + this.name;
+ descriptor.dbinstance = this ;
+
+ descriptor.execute = function() {
+ var input = null ;
+ input = eXo.System.readInput("Enter the connection url[" + this.dbinstance.conectionURL + "]") ;
+ if(input != null && input.length() > 0) this.dbinstance.conectionURL = input ;
+ input = eXo.System.readInput("Enter the username[" + this.dbinstance.username + "]") ;
+ if(input != null && input.length() > 0) this.dbinstance.username = input ;
+ input = eXo.System.readInput("Enter the password[" + this.dbinstance.password + "]") ;
+ if(input != null && input.length() > 0) this.dbinstance.password = input ;
+ }
+ return descriptor;
+}
+
+
+DBInstance.prototype.ConfigureTask = function(product, server, dbsetup) {
+ var descriptor = new TaskDescriptor("Configure Database", null) ;
+ descriptor.description = "Configure the database environment for " + this.name;
+ descriptor.dbinstance = this ;
+
+ descriptor.execute =function () {
+
+ if (!product.portalwar) {
+ eXo.System.info("Server have not include portal to deploy database.");
+ return 1;
+ }
+ var IOUtil = eXo.core.IOUtil ;
+ var jarFile = server.deployWebappDir + "/" + product.portalwar ;
+ var mentries = new java.util.HashMap() ;
+
+ if (dbsetup=="file") {
+ var dbconfigSource = "WEB-INF/conf/database/database-configuration."+this.dbinstance.name+".xml";
+ var dbconfigDest = "WEB-INF/conf/database/database-configuration.xml";
+ if (IOUtil.getJarEntryContent(jarFile, dbconfigSource) != null) {
+ var configTmpl = IOUtil.getJarEntryAsText(jarFile, dbconfigSource);
+ mentries.put(dbconfigDest, configTmpl.getBytes()) ;
+ eXo.System.info("CONF", "Replaced " + dbconfigDest + " by " + dbconfigSource);
+ } else {
+ eXo.System.info("CONF", dbconfigSource + " entry not found, using " + dbconfigDest );
+ }
+ } else {
+ var properties = new java.util.HashMap() ;
+ properties.put("${dialect}", this.dbinstance.dialect) ;
+ properties.put("${driverClass}", this.dbinstance.driverClass) ;
+ properties.put("${connectionUrl}", this.dbinstance.conectionURL) ;
+ properties.put("${username}", this.dbinstance.username) ;
+ properties.put("${password}", this.dbinstance.password) ;
+
+ var propmsg = "Database settings: " + properties.entrySet();
+ eXo.System.info("CONF", propmsg);
+
+ var templateEntry = "WEB-INF/conf/database/database-configuration.tmpl.xml";
+ var dbconfigEntry = "WEB-INF/conf/database/database-configuration.xml";
+ mentries = IOUtil.patchWar(jarFile, properties, templateEntry, dbconfigEntry, mentries)
+
+ }
+
+ var properties = new java.util.HashMap() ;
+ properties.put("${dialect}", this.dbinstance.name);
+ eXo.System.info("CONF", "JCR settings: " + properties.entrySet());
+
+ mentries = IOUtil.patchWar(jarFile, properties, "WEB-INF/conf/jcr/repository-configuration.tmpl.xml",
+ "WEB-INF/conf/jcr/repository-configuration.xml", mentries)
+
+ mentries = IOUtil.patchWar(jarFile, properties, "WEB-INF/conf/jcr/jcr-configuration.tmpl.xml",
+ "WEB-INF/conf/jcr/jcr-configuration.xml", mentries)
+
+
+ var portalwar = server.deployWebappDir + "/" + product.portalwar;
+ eXo.System.info("CONF", "Patching database config in " + portalwar + ": \n\t" + mentries.keySet());
+ IOUtil.modifyJar(portalwar, mentries, null) ;
+ }
+ return descriptor;
+}
+
+//==========================================================================================
+
+function Database() {
+
+}
+
+Database.prototype.HsqlDB = function(name) {
+ var instance = new DBInstance() ;
+ instance.name = name ;
+ instance.drivers = [ new Project("hsqldb", "hsqldb", "jar", "1.8.0.7") ] ;
+
+ instance.driverClass = "org.hsqldb.jdbcDriver";
+ instance.dialect = "org.hibernate.dialect.HSQLDialect" ;
+ instance.conectionURL = "jdbc:hsqldb:file:../temp/data/exodb";
+ instance.username = "sa" ;
+ instance.password = "";
+ return instance ;
+}
+
+Database.prototype.MysqlDB = function(name) {
+ var instance = new DBInstance() ;
+ instance.name = name ;
+ instance.drivers = [ new Project("mysql", "mysql-connector-java", "jar", "5.0.5")] ;
+
+ instance.driverClass = "com.mysql.jdbc.Driver";
+ instance.dialect = "org.hibernate.dialect.MySQLDialect" ;
+ instance.conectionURL = "jdbc:mysql://localhost/webos";
+ instance.username = "exoadmin" ;
+ instance.password = "exo12321";
+
+ return instance ;
+}
+
+Database.prototype.PostgresDB = function(name) {
+ var instance = new DBInstance() ;
+ instance.name = name ;
+ instance.drivers = [ new Project("org.postgresql", "postgresql-jdbc3", "jar", "8.2-505")] ;
+
+ instance.driverClass = "org.postgresql.Driver";
+ instance.dialect = "org.hibernate.dialect.PostgreSQLDialect" ;
+ instance.conectionURL = "jdbc:postgresql://192.168.1.15:5432/exodb";
+ instance.username = "exo" ;
+ instance.password = "exo";
+
+ return instance ;
+}
+
+Database.prototype.OracleDB = function(name) {
+ var instance = new DBInstance() ;
+ instance.name = name ;
+ instance.drivers = [ new Project("oracle", "ojdbc", "jar", "1.4")] ;
+
+ instance.driverClass = "oracle.jdbc.OracleDriver";
+ instance.dialect = "org.hibernate.dialect.Oracle9Dialect" ;
+ instance.conectionURL = "jdbc:oracle:thin:@//192.168.1.15:1521/xe";
+ instance.username = "exo" ;
+ instance.password = "exo";
+
+ return instance ;
+}
+
+Database.prototype.DB2ExpressDB = function(name) {
+ var instance = new DBInstance() ;
+ instance.name = name ;
+ instance.drivers = [ new Project("com.ibm.db2", "db2jcc", "jar", "9.1"),
+ new Project("com.ibm.db2", "db2jcc_license_cu", "jar", "9.1")] ;
+
+ instance.driverClass = "com.ibm.db2.jcc.DB2Driver";
+ instance.dialect = "org.hibernate.dialect.DB2Dialect" ;
+ instance.conectionURL = "jdbc:db2://192.168.1.15:50000/exodb";
+ instance.username = "exoinst" ;
+ instance.password = "exo";
+
+ return instance ;
+}
+
+Database.prototype.DB2V8DB = function(name) {
+ var instance = new DBInstance() ;
+ instance.name = name ;
+ instance.drivers = [ new Project("com.ibm.db2", "db2jcc", "jar", "8.0"),
+ new Project("com.ibm.db2", "db2jcc_license_cu", "jar", "8.0")] ;
+
+ instance.driverClass = "com.ibm.db2.jcc.DB2Driver";
+ instance.dialect = "org.hibernate.dialect.DB2Dialect" ;
+ instance.conectionURL = "jdbc:db2://10.21.10.11:50520/EXO";
+ instance.username = "bdpdo11" ;
+ instance.password = "edvgpn8ll40k";
+
+ return instance ;
+}
+
+Database.prototype.DerbyDB = function(name) {
+ var instance = new DBInstance() ;
+ instance.name = name ;
+ instance.drivers = [ new Project("org.apache", "derby", "jar", "10.2")] ;
+
+ instance.driverClass = "org.apache.derby.jdbc.ClientDriver";
+ instance.dialect = "org.hibernate.dialect.DerbyDialect" ;
+ instance.conectionURL = "jdbc:derby://192.168.1.15:1527/exodb;create=true";
+ instance.username = "exo" ;
+ instance.password = "exo";
+
+ return instance ;
+}
+
+Database.prototype.SqlServerDB = function(name) {
+ var instance = new DBInstance() ;
+ instance.name = name ;
+ instance.drivers = [ new Project("com.microsoft", "sqljdbc", "jar", "1.1.1501")] ;
+
+ instance.driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
+ instance.dialect = "org.hibernate.dialect.SQLServerDialect" ;
+ instance.conectionURL = "jdbc:sqlserver://192.168.1.19:1433;databaseName=exodb";
+ instance.username = "exo" ;
+ instance.password = "exo";
+
+ return instance ;
+}
+
+//==========================================================================================
+
+eXo.server.Database = new Database() ;
Added: tools/packager/trunk/src/main/javascript/eXo/server/Ear.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/server/Ear.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/server/Ear.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,66 @@
+eXo.require("eXo.core.TaskDescriptor");
+eXo.require("eXo.core.IOUtil");
+eXo.require("eXo.server.ServerUtil");
+eXo.require("eXo.projects.Project");
+
+function Ear(earHome) {
+ this.runningInstance_ = null;
+ this.name = "ear";
+ this.serverHome = earHome;
+ // using "[product.name]-[version].ear" in the EarTask of exobuild now;
+ this.earFile = eXo.env.workingDir + "/gatein.ear";
+ // TODO use WEBSPHERE_HOME
+ this.cleanServer = java.lang.System.getProperty("clean.server");
+ if (this.cleanServer == null || this.cleanServer.equals("") || !this.cleanServer.startsWith("ear"))
+ this.cleanServer = "ear";
+ this.deployLibDir = this.serverHome;
+ this.deployWebappDir = this.serverHome;
+ this.deployEarDir = this.serverHome;
+ this.patchDir = this.serverHome;
+}
+
+Ear.prototype.RunTask = function() {
+ var descriptor = new TaskDescriptor("Run Ear", this.serverHome + "/bin");
+ descriptor.server = this;
+ descriptor.execute = function() {
+
+ }
+ return descriptor;
+};
+
+Ear.prototype.StopTask = function() {
+ var descriptor = new TaskDescriptor("Stop Ear", this.serverHome + "/bin");
+ descriptor.server = this;
+ descriptor.execute = function() {
+
+ }
+ return descriptor;
+};
+
+Ear.prototype.CleanTask = function() {
+ var descriptor = new TaskDescriptor("Clean Ear", this.serverHome + "/bin");
+ descriptor.server = this;
+ descriptor.execute = function() {
+ eXo.core.IOUtil.emptyFolder(this.server.serverHome + "/temp");
+ }
+ return descriptor;
+}
+
+Ear.prototype.preDeploy = function(product) {
+ product.addDependencies(new Project("commons-pool", "commons-pool", "jar", "1.2"));
+ product.addDependencies(new Project("commons-dbcp", "commons-dbcp", "jar", "1.2.1"));
+ product.addDependencies(new Project("org.exoplatform.portal", "exo.portal.server.websphere.plugin", "jar",
+ this.pluginVersion));
+}
+
+Ear.prototype.onDeploy = function(project) {
+}
+
+Ear.prototype.postDeploy = function(product) {
+ ServerUtil = eXo.server.ServerUtil;
+ ServerUtil.createWebsphereEarApplicationXml(this.deployWebappDir, product);
+ ServerUtil.addClasspathForWar(this.deployLibDir);
+ ServerUtil.patchWebspherePortalWebXml(this.deployWebappDir, product);
+}
+
+eXo.server.Ear = Ear.prototype.constructor;
Added: tools/packager/trunk/src/main/javascript/eXo/server/Jboss.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/server/Jboss.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/server/Jboss.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,118 @@
+eXo.require("eXo.core.TaskDescriptor");
+eXo.require("eXo.core.IOUtil");
+eXo.require("eXo.server.ServerUtil");
+eXo.require("eXo.projects.Project");
+
+function Jboss(jbossHome) {
+ this.exoJBoss5 = false;
+ this.runningInstance_ = null;
+ this.name = "jboss";
+ this.serverHome = jbossHome;
+ this.cleanServer = eXo.env.cleanServer;
+ this.deployLibDir = this.serverHome + "/server/default/deploy/gatein.sar";
+ this.deployWebappDir = this.serverHome + "/server/default/deploy/gatein.sar";
+ this.deployEarDir = this.serverHome + "/server/default/deploy/";
+ this.patchDir = this.serverHome;// + "/server/default"; //because we have to
+ // patch bin/ directory
+}
+
+Jboss.prototype.RunTask = function() {
+ var descriptor = new TaskDescriptor("Run Jboss", this.serverHome + "/bin");
+ descriptor.server = this;
+ descriptor.execute = function() {
+ var javaHome = eXo.env.javaHome;
+ java.lang.System.setProperty("user.dir", descriptor.workingDir);
+ java.lang.System.setProperty("program.name", "run.sh");
+ java.lang.System.setProperty("java.io.tmpdir", this.server.serverHome + "/temp");
+ var sysClasspath = [ new java.net.URL("file:" + this.server.javaHome + "/lib/tools.jar"),
+ new java.net.URL("file:" + this.server.serverHome + "/bin/run.jar") ];
+ eXo.System.addSystemClasspath(sysClasspath);
+
+ var contextLoader = java.lang.Thread.currentThread().getContextClassLoader();
+ var jbossLoader = new java.net.URLClassLoader(new URL[0], contextLoader);
+ java.lang.Thread.currentThread().setContextClassLoader(jbossLoader);
+ var args = new java.lang.String[0];
+ jboss = new org.jboss.Main();
+ jboss.boot(args);
+ runningInstance_ = jboss;
+ java.lang.Thread.currentThread().setContextClassLoader(contextLoader);
+ }
+ return descriptor;
+};
+
+Jboss.prototype.StopTask = function() {
+ var descriptor = new TaskDescriptor("Stop Jboss", this.serverHome + "/bin");
+ descriptor.server = this;
+ descriptor.execute = function() {
+ var sysClasspath = [ new java.net.URL("file:" + this.server.serverHome + "/bin/shutdown.jar"),
+ new java.net.URL("file:" + this.server.serverHome + "/client/jbossall-client.jar") ];
+ var contextLoader = java.lang.Thread.currentThread().getContextClassLoader();
+ var jbossLoader = new java.net.URLClassLoader(sysClasspath, contextLoader);
+ java.lang.Thread.currentThread().setContextClassLoader(jbossLoader);
+ var args = [ "-S" ];
+ org.jboss.Shutdown.main(args);
+ runningInstance_ = null;
+ java.lang.Thread.currentThread().setContextClassLoader(contextLoader);
+ }
+ return descriptor;
+};
+
+Jboss.prototype.CleanTask = function() {
+ var descriptor = new TaskDescriptor("Clean Jboss", this.serverHome + "/bin");
+ descriptor.server = this;
+ descriptor.execute = function() {
+ eXo.core.IOUtil.emptyFolder(this.server.serverHome + "/temp");
+ }
+ return descriptor;
+}
+
+Jboss.prototype.preDeploy = function(product) {
+ product.addDependencies(new Project("commons-pool", "commons-pool", "jar", "1.2"));
+ product.addDependencies(new Project("commons-dbcp", "commons-dbcp", "jar", "1.2.1"));
+ product.addDependencies(new Project("org.exoplatform.portal", "exo.portal.server.jboss.plugin", "jar",
+ product.serverPluginVersion));
+
+ // Above 2.5 we don't bundle JOTM anymore
+ var version = product.version;
+ // DANGEROUS HACK, HACK, HACK !!!!!
+ // 2.5.2.0 will contain jotm
+ if (version.indexOf("2.0") != 0 //
+ && version.indexOf("2.1") != 0 //
+ && version.indexOf("2.2") != 0) {
+ product.removeDependency(new Project("jotm", "jotm_jrmp_stubs", "jar", "2.0.10"));
+ product.removeDependency(new Project("jotm", "jotm", "jar", "2.0.10"));
+ }
+
+ // Remove hibernate libs for JBoss AS5
+ if (this.exoJBoss5) {
+ print("====================== JBOSS5 AS 5 ====================== ");
+ product.removeDependencyByGroupId("org.hibernate");
+ product.removeDependency(new Project("org.jboss", "jbossxb", "jar", "2.0.0.GA"));
+ product.removeDependency(new Project("org.jboss.logging", "jboss-logging-spi", "jar", "2.0.5.GA"));
+ product.removeDependency(new Project("org.jboss", "jboss-common-core", "jar", "2.2.9.GA"));
+ }
+};
+
+Jboss.prototype.onDeploy = function(project) {
+};
+
+Jboss.prototype.postDeploy = function(product) {
+ ServerUtil = eXo.server.ServerUtil;
+ ServerUtil.createEarApplicationXmlForJboss(this.deployWebappDir, product);
+ ServerUtil.addClasspathForWar(this.deployLibDir);
+
+ // Use jboss PrefixSorter deployer
+ var eXoResourcesFile = new java.io.File(this.deployWebappDir + "/eXoResources.war");
+ var neweXoResourcesFile = new java.io.File(this.deployWebappDir + "/01eXoResources.war");
+ eXoResourcesFile.renameTo(neweXoResourcesFile);
+
+ var portalFile = new java.io.File(this.deployWebappDir + "/" + product.portalwar);
+ var newPortalFile = new java.io.File(this.deployWebappDir + "/02portal.war");
+ portalFile.renameTo(newPortalFile);
+ product.portalwar = "02portal.war";
+
+ eXo.core.IOUtil.chmodExecutableInDir(this.serverHome + "/bin/", ".sh");
+
+}
+
+eXo.server.Jboss = Jboss.prototype.constructor;
Added: tools/packager/trunk/src/main/javascript/eXo/server/JbossEar.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/server/JbossEar.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/server/JbossEar.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,138 @@
+eXo.require("eXo.core.TaskDescriptor");
+eXo.require("eXo.core.IOUtil");
+eXo.require("eXo.server.ServerUtil");
+eXo.require("eXo.projects.Project");
+
+function JbossEar(jbossHome) {
+ this.exoJBoss5 = true;
+ this.runningInstance_ = null;
+ this.name = "jbossear";
+ this.serverHome = jbossHome;
+ this.cleanServer = java.lang.System.getProperty("clean.server");
+ if (this.cleanServer == null || this.cleanServer.equals("") || !this.cleanServer.startsWith("jboss"))
+ this.cleanServer = "jboss-5.1.0.GA";
+ this.deployLibDir = this.serverHome + "/server/default/deploy/gatein.ear";
+ this.deployWebappDir = this.serverHome + "/server/default/deploy/gatein.ear";
+ this.deployEarDir = this.serverHome + "/server/default/deploy/";
+ this.patchDir = this.serverHome;// + "/server/default"; //because we have to
+ // patch bin/ directory
+}
+
+JbossEar.prototype.RunTask = function() {
+ var descriptor = new TaskDescriptor("Run JbossEar", this.serverHome + "/bin");
+ descriptor.server = this;
+ descriptor.execute = function() {
+ var javaHome = eXo.env.javaHome;
+ java.lang.System.setProperty("user.dir", descriptor.workingDir);
+ java.lang.System.setProperty("program.name", "run.sh");
+ java.lang.System.setProperty("java.io.tmpdir", this.server.serverHome + "/temp");
+ var sysClasspath = [ new java.net.URL("file:" + this.server.javaHome + "/lib/tools.jar"),
+ new java.net.URL("file:" + this.server.serverHome + "/bin/run.jar") ];
+ eXo.System.addSystemClasspath(sysClasspath);
+
+ var contextLoader = java.lang.Thread.currentThread().getContextClassLoader();
+ var jbossLoader = new java.net.URLClassLoader(new URL[0], contextLoader);
+ java.lang.Thread.currentThread().setContextClassLoader(jbossLoader);
+ var args = new java.lang.String[0];
+ jboss = new org.jboss.Main();
+ jboss.boot(args);
+ runningInstance_ = jboss;
+ java.lang.Thread.currentThread().setContextClassLoader(contextLoader);
+ }
+ return descriptor;
+};
+
+JbossEar.prototype.StopTask = function() {
+ var descriptor = new TaskDescriptor("Stop JbossEar", this.serverHome + "/bin");
+ descriptor.server = this;
+ descriptor.execute = function() {
+ var sysClasspath = [ new java.net.URL("file:" + this.server.serverHome + "/bin/shutdown.jar"),
+ new java.net.URL("file:" + this.server.serverHome + "/client/jbossall-client.jar") ];
+ var contextLoader = java.lang.Thread.currentThread().getContextClassLoader();
+ var jbossLoader = new java.net.URLClassLoader(sysClasspath, contextLoader);
+ java.lang.Thread.currentThread().setContextClassLoader(jbossLoader);
+ var args = [ "-S" ];
+ org.jboss.Shutdown.main(args);
+ runningInstance_ = null;
+ java.lang.Thread.currentThread().setContextClassLoader(contextLoader);
+ }
+ return descriptor;
+};
+
+JbossEar.prototype.CleanTask = function() {
+ var descriptor = new TaskDescriptor("Clean JbossEar", this.serverHome + "/bin");
+ descriptor.server = this;
+ descriptor.execute = function() {
+ eXo.core.IOUtil.emptyFolder(this.server.serverHome + "/temp");
+ }
+ return descriptor;
+}
+
+JbossEar.prototype.preDeploy = function(product) {
+ product.addDependencies(new Project("commons-pool", "commons-pool", "jar", "1.2"));
+ product.addDependencies(new Project("commons-dbcp", "commons-dbcp", "jar", "1.2.1"));
+ product.addDependencies(new Project("org.exoplatform.portal", "exo.portal.server.jboss.plugin", "jar",
+ product.serverPluginVersion));
+ // product.removeDependency(new Project("quartz", "quartz", "jar",
+ // "1.5.0-RC2"));
+
+ var version = product.version;
+ if (version.indexOf("2.0") != 0 && version.indexOf("2.1") != 0 && version.indexOf("2.2") != 0
+ && version.indexOf("2.5") != 0) {
+ product.addDependencies(new Project("org.slf4j", "slf4j-api", "jar", "1.5.6"));
+ product.addDependencies(new Project("org.slf4j", "slf4j-log4j12", "jar", "1.5.6"));
+ }
+
+ // Above 2.5 we don't bundle JOTM anymore
+ var version = product.version;
+ if (version.indexOf("2.0") != 0 && version.indexOf("2.1") != 0 && version.indexOf("2.2") != 0) {
+ product.removeDependency(new Project("jotm", "jotm_jrmp_stubs", "jar", "2.0.10"));
+ product.removeDependency(new Project("jotm", "jotm", "jar", "2.0.10"));
+ }
+
+ // Remove hibernate libs for JBoss AS5
+ if (this.exoJBoss5) {
+ print("====================== JBOSS5 AS 5 ====================== ");
+ product.removeDependencyByGroupId("org.hibernate");
+ product.removeDependency(new Project("org.jboss", "jbossxb", "jar", "2.0.0.GA"));
+ product.removeDependency(new Project("org.jboss.logging", "jboss-logging-spi", "jar", "2.0.5.GA"));
+ product.removeDependency(new Project("org.jboss", "jboss-common-core", "jar", "2.2.9.GA"));
+ }
+}
+
+JbossEar.prototype.onDeploy = function(project) {
+}
+
+JbossEar.prototype.postDeploy = function(product) {
+ ServerUtil = eXo.server.ServerUtil;
+ ServerUtil.createEarApplicationXmlForJboss(this.deployWebappDir, product);
+ ServerUtil.addClasspathForWar(this.deployLibDir);
+
+ // Use jboss PrefixSorter deployer
+ var eXoResourcesFile = new java.io.File(this.deployWebappDir + "/eXoResources.war");
+ var neweXoResourcesFile = new java.io.File(this.deployWebappDir + "/01eXoResources.war");
+ eXoResourcesFile.renameTo(neweXoResourcesFile);
+
+ var portalFile = new java.io.File(this.deployWebappDir + "/" + product.portalwar);
+ var newPortalFile = new java.io.File(this.deployWebappDir + "/02portal.war");
+ portalFile.renameTo(newPortalFile);
+ product.portalwar = "02portal.war";
+
+ //Move all jars in /lib
+ var earDir = new java.io.File(this.deployWebappDir);
+ var libDir = new java.io.File(this.deployWebappDir, "lib");
+ libDir.mkdir();
+ var files = earDir.listFiles();
+ for ( var i = 0; i < files.length; i++) {
+ var file = files[i];
+ var filepath = file.getAbsolutePath();
+ if (filepath.endsWith(".jar")){
+ eXo.core.IOUtil.cp(filepath, libDir.getAbsolutePath());
+ eXo.core.IOUtil.remove(file);
+ }
+ }
+
+ eXo.core.IOUtil.chmodExecutableInDir(this.serverHome + "/bin/", ".sh");
+}
+
+eXo.server.JbossEar = JbossEar.prototype.constructor;
Added: tools/packager/trunk/src/main/javascript/eXo/server/Jonas.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/server/Jonas.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/server/Jonas.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,93 @@
+eXo.require("eXo.core.IOUtil") ;
+eXo.require("eXo.core.TaskDescriptor") ;
+eXo.require("eXo.projects.Project");
+
+function Jonas(jonasHome) {
+ this.runningInstance_ = null ;
+ this.name = "jonas" ;
+ this.serverHome = jonasHome ;
+ this.cleanServer = java.lang.System.getProperty("clean.server") ;
+ if(this.cleanServer == null || this.cleanServer.equals("") || !this.cleanServer.startsWith("JONAS")) this.cleanServer = "JONAS_4_8_6" ;
+ this.deployLibDir = this.serverHome + "/lib/apps" ;
+ this.deployWebappDir = this.serverHome + "/apps/autoload/gatein.ear";
+ this.deployEarDir = this.serverHome + "/apps/autoload/";
+ this.patchDir = this.serverHome ;
+}
+
+Jonas.prototype.RunTask = function() {
+ descriptor = new TaskDescriptor("Run Jonas", this.serverHome + "/bin") ;
+ descriptor.execute = function() {
+ eXo.System.info("RunTask() has not been implemented.") ;
+ }
+ return descriptor ;
+};
+
+Jonas.prototype.StopTask = function() {
+ descriptor = new TaskDescriptor("Stop Jonas", this.serverHome + "/bin") ;
+ descriptor.execute = function() {
+ eXo.System.info("StopTask() has not been implemented.") ;
+ }
+ return descriptor ;
+};
+
+Jonas.prototype.CleanTask = function() {
+ descriptor = new TaskDescriptor("Clean Jonas", this.serverHome + "/bin") ;
+ descriptor.server = this;
+ descriptor.execute = function() {
+ eXo.core.IOUtil.emptyFolder(this.server.serverHome + "/logs");
+ eXo.core.IOUtil.emptyFolder(this.server.serverHome + "/temp");
+ eXo.core.IOUtil.emptyFolder(this.server.serverHome + "/work");
+ }
+ return descriptor ;
+}
+
+Jonas.prototype.preDeploy = function(product) {
+ eXo.core.IOUtil.createFolder(this.deployWebappDir + "/META-INF");
+ product.addDependencies(new Project("commons-dbcp", "commons-dbcp", "jar", "1.2.1")) ;
+ product.addDependencies(new Project("commons-pool", "commons-pool", "jar", "1.2")) ;
+ product.addDependencies(new Project("org.exoplatform.portal", "exo.portal.server.jonas.plugin", "jar", product.serverPluginVersion)) ; //this.pluginVersion
+}
+
+Jonas.prototype.onDeploy = function(project) {
+
+//if (System.getProperty("os.name").toLowerCase().startsWith("win")) {
+// process = serverHome + "\\bin\\nt\\post-patch.bat";
+// }
+// else {
+// process = serverHome + "/bin/unix/post-patch.sh";
+// try {
+// Runtime.getRuntime().exec("chmod +x " + process);
+// } catch(Exception e) {
+// System.err.println("[ERROR] " + e.toString());
+// }
+// }
+// try {
+// Runtime.getRuntime().exec(process);
+// } catch(Exception e) {
+// System.err.println("[ERROR] " + e.toString());
+// }
+// }
+
+}
+
+Jonas.prototype.postDeploy = function(product) {
+ ServerUtil = eXo.server.ServerUtil ;
+ ServerUtil.createEarApplicationXml(this.deployWebappDir, product) ;
+ ServerUtil.addClasspathForWar(this.deployLibDir) ;
+ var workflow = java.lang.System.getProperty("workflow");
+ if(product.useWorkflow && workflow == "bonita") {
+ var IOUtil = eXo.core.IOUtil ;
+ var properties = new java.util.HashMap() ;
+ properties.put("${workflow}", "bonita") ;
+ var jarFile = server.deployWebappDir + "/" + product.portalwar ;
+ var mentries = new java.util.HashMap() ;
+ var configTmpl =
+ IOUtil.getJarEntryAsText(jarFile, "WEB-INF/conf/configuration.tmpl.xml");
+ var config = eXo.core.Util.modifyText(configTmpl, properties) ;
+ mentries.put("WEB-INF/conf/configuration.xml", config.getBytes()) ;
+ IOUtil.modifyJar(server.deployWebappDir + "/" + product.portalwar, mentries, null) ;
+ }
+ eXo.core.IOUtil.chmodExecutableInDir(this.serverHome + "/bin/", ".sh");
+}
+
+eXo.server.Jonas = Jonas.prototype.constructor ;
Added: tools/packager/trunk/src/main/javascript/eXo/server/ServerUtil.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/server/ServerUtil.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/server/ServerUtil.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,218 @@
+eXo.require("eXo.core.IOUtil");
+
+function ServerUtil() { }
+
+ServerUtil.prototype.createEarApplicationXmlForJboss = function(deployEarDir, product) {
+ var earDir = new java.io.File(deployEarDir) ;
+ var b = new java.lang.StringBuilder();
+ b.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ b.append("<!DOCTYPE application PUBLIC \"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN\" \"http://java.sun.com/dtd/application_1_3.dtd\">");
+ b.append("\n<application>\n");
+ b.append(" <display-name>exoplatform</display-name>\n");
+ var eXoResources = "eXoResources.war";
+ b.append(" <module>\n");
+ b.append(" <web>\n");
+ b.append(" <web-uri>01").append(eXoResources).append("</web-uri>\n");
+ b.append(" <context-root>").append(eXoResources.substring(0, eXoResources.indexOf('.'))).append("</context-root>\n");
+ b.append(" </web>\n");
+ b.append(" </module>\n");
+ b.append(" <module>\n");
+ b.append(" <web>\n");
+ b.append(" <web-uri>02").append(product.portalwar).append("</web-uri>\n");
+ b.append(" <context-root>").append(product.portalwar.substring(0, product.portalwar.indexOf('.'))).append("</context-root>\n");
+ b.append(" </web>\n");
+ b.append(" </module>\n");
+ var file = earDir.list();
+ for (var i = 0; i < file.length; i++) {
+ if(file[i].endsWith("war") && file[i] != product.portalwar && file[i] != eXoResources) {
+ var idx = file[i].indexOf('.');
+ var context = file[i].substring(0, idx);
+ b.append(" <module>\n");
+ b.append(" <web>\n");
+ b.append(" <web-uri>").append(file[i]).append("</web-uri>\n");
+ b.append(" <context-root>").append(context).append("</context-root>\n");
+ b.append(" </web>\n");
+ b.append(" </module>\n");
+//Jars moved in lib/
+// } else if(file[i].endsWith("jar")) {
+// b.append(" <module>\n").
+// append(" <ejb>").append(file[i]).append("</ejb>\n").
+// append(" </module>\n");
+ } else if(file[i].endsWith("rar")) {
+ b.append(" <module>\n");
+ b.append(" <connector>").append(file[i]).append("</connector>\n");
+ b.append(" </module>\n");
+ }
+ }
+ b.append("</application>\n");
+ eXo.core.IOUtil.createFolder(deployEarDir + "/META-INF");
+ var out =
+ new java.io.FileOutputStream(deployEarDir + "/META-INF/application.xml");
+ out.write(b.toString().getBytes(), 0, b.length());
+ out.close();
+}
+
+
+ServerUtil.prototype.createEarApplicationXml = function(deployEarDir, product) {
+ var earDir = new java.io.File(deployEarDir) ;
+ var b = new java.lang.StringBuilder();
+ b.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ b.append("<!DOCTYPE application PUBLIC \"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN\" \"http://java.sun.com/dtd/application_1_3.dtd\">");
+ b.append("\n<application>\n");
+ b.append(" <display-name>exoplatform</display-name>\n");
+ var eXoResources = "eXoResources.war";
+ b.append(" <module>\n");
+ b.append(" <web>\n");
+ b.append(" <web-uri>").append(eXoResources).append("</web-uri>\n");
+ b.append(" <context-root>").append(eXoResources.substring(0, eXoResources.indexOf('.'))).append("</context-root>\n");
+ b.append(" </web>\n");
+ b.append(" </module>\n");
+ b.append(" <module>\n");
+ b.append(" <web>\n");
+ b.append(" <web-uri>").append(product.portalwar).append("</web-uri>\n");
+ b.append(" <context-root>").append(product.portalwar.substring(0, product.portalwar.indexOf('.'))).append("</context-root>\n");
+ b.append(" </web>\n");
+ b.append(" </module>\n");
+ var file = earDir.list();
+ for (var i = 0; i < file.length; i++) {
+ if(file[i].endsWith("war") && file[i] != product.portalwar && file[i] != eXoResources) {
+ var idx = file[i].indexOf('.');
+ var context = file[i].substring(0, idx);
+ b.append(" <module>\n");
+ b.append(" <web>\n");
+ b.append(" <web-uri>").append(file[i]).append("</web-uri>\n");
+ b.append(" <context-root>").append(context).append("</context-root>\n");
+ b.append(" </web>\n");
+ b.append(" </module>\n");
+ } else if(file[i].endsWith("jar")) {
+ b.append(" <module>\n").
+ append(" <ejb>").append(file[i]).append("</ejb>\n").
+ append(" </module>\n");
+ } else if(file[i].endsWith("rar")) {
+ b.append(" <module>\n");
+ b.append(" <connector>").append(file[i]).append("</connector>\n");
+ b.append(" </module>\n");
+ }
+ }
+ b.append("</application>\n");
+ eXo.core.IOUtil.createFolder(deployEarDir + "/META-INF");
+ var out =
+ new java.io.FileOutputStream(deployEarDir + "/META-INF/application.xml");
+ out.write(b.toString().getBytes(), 0, b.length());
+ out.close();
+}
+
+ServerUtil.prototype.createWebsphereEarApplicationXml = function(deployEarDir, product) {
+ var earDir = new java.io.File(deployEarDir) ;
+ var b = new java.lang.StringBuilder();
+ b.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ b.append("<!DOCTYPE application PUBLIC \"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN\" \"http://java.sun.com/dtd/application_1_3.dtd\">");
+ b.append("\n<application>\n");
+ b.append(" <display-name>exoplatform</display-name>\n");
+ var eXoResources = "eXoResources.war";
+ b.append(" <module>\n");
+ b.append(" <web>\n");
+ b.append(" <web-uri>").append(eXoResources).append("</web-uri>\n");
+ b.append(" <context-root>").append(eXoResources.substring(0, eXoResources.indexOf('.'))).append("</context-root>\n");
+ b.append(" </web>\n");
+ b.append(" </module>\n");
+ b.append(" <module>\n");
+ b.append(" <web>\n");
+ b.append(" <web-uri>").append(product.portalwar).append("</web-uri>\n");
+ b.append(" <context-root>").append(product.portalwar.substring(0, product.portalwar.indexOf('.'))).append("</context-root>\n");
+ b.append(" </web>\n");
+ b.append(" </module>\n");
+ var file = earDir.list();
+ for (var i = 0; i < file.length; i++) {
+ if(file[i].endsWith("war") && file[i] != product.portalwar && file[i] != eXoResources) {
+ var idx = file[i].indexOf('.');
+ var context = file[i].substring(0, idx);
+ b.append(" <module>\n");
+ b.append(" <web>\n");
+ b.append(" <web-uri>").append(file[i]).append("</web-uri>\n");
+ b.append(" <context-root>").append(context).append("</context-root>\n");
+ b.append(" </web>\n");
+ b.append(" </module>\n");
+ }
+ }
+ b.append("</application>\n");
+ eXo.core.IOUtil.createFolder(deployEarDir + "/META-INF");
+ var out = new java.io.FileOutputStream(deployEarDir + "/META-INF/application.xml");
+ out.write(b.toString().getBytes(), 0, b.length());
+ out.close();
+}
+
+
+ServerUtil.prototype.patchWebspherePortalWebXml = function(deployEarDir, product) {
+ var warFile = deployEarDir + "/" + product.portalwar;
+ var file = new java.io.File(warFile);
+ if (!file.exists()) {
+ eXo.System.info("IO", warFile + " file not found" ) ;
+ return null;
+ }
+ var jar = new java.util.jar.JarFile(file) ;
+ var webXmlEntry = "WEB-INF/web.xml";
+ eXo.System.info("INFO", "---------------------------------------------------------------");
+ eXo.System.info("INFO", "To be patched web.xml within " + product.portalwar + " file " + warFile + "/" + webXmlEntry);
+ var webXML = eXo.core.IOUtil.getJarEntryAsText(warFile, webXmlEntry);
+
+ var b = new java.lang.StringBuilder();
+ b.append("<!-- Websphere Listener -->\n");
+ b.append(" <listener>\n");
+ b.append(" <listener-class>org.exoplatform.services.organization.ext.websphere.WebsphereSessionListener</listener-class>\n");
+ b.append(" </listener>\n");
+ b.append("\n");
+ b.append(" <listener>");
+ webXML = webXML.replaceFirst("<listener>", b.toString());
+
+ b = new java.lang.StringBuilder();
+ b.append("<!-- Websphere filter -->\n");
+ b.append(" <filter>\n");
+ b.append(" <filter-name>WebsphereFilter</filter-name>\n");
+ b.append(" <filter-class>org.exoplatform.services.organization.ext.websphere.WebsphereFilter</filter-class>\n");
+ b.append(" </filter>\n");
+ b.append("\n");
+ b.append(" <filter>");
+ webXML = webXML.replaceFirst("<filter>", b.toString());
+
+ b = new java.lang.StringBuilder();
+ b.append("<!-- Websphere filter-mapping -->\n");
+ b.append(" <filter-mapping>\n");
+ b.append(" <filter-name>WebsphereFilter</filter-name>\n");
+ b.append(" <url-pattern>/public/*</url-pattern>\n");
+ b.append(" </filter-mapping>\n");
+ b.append("\n");
+ b.append(" <filter-mapping>");
+ webXML = webXML.replaceFirst("<filter-mapping>", b.toString());
+
+
+ var replaceMap = new java.util.HashMap() ;
+
+ replaceMap.put(webXmlEntry, webXML.getBytes()) ;
+ eXo.core.IOUtil.modifyJar(warFile, replaceMap, null) ;
+}
+
+ServerUtil.prototype.addClasspathForWar = function(earPath) {
+ var earDir = new java.io.File(earPath) ;
+ var files = earDir.listFiles() ;
+ var b = new java.lang.StringBuilder() ;
+ for(var i = 0; i< files.length; i++) {
+ var file = files[i] ;
+ if (file.getName().endsWith(".jar")) {
+ b.append(file.getName()).append(' ');
+ }
+ }
+ var classpath = b.toString() ;
+ for(var i = 0; i< files.length; i++) {
+ var file = files[i] ;
+ if (file.getName().endsWith(".war")) {
+ manifestAttributes = new java.util.HashMap() ;
+ manifestAttributes.put("Class-Path", classpath) ;
+ if (file.isFile()) {
+ eXo.core.IOUtil.modifyJar(file.getAbsolutePath(), null, manifestAttributes);
+ }
+ }
+ }
+}
+
+eXo.server.ServerUtil = new ServerUtil();
\ No newline at end of file
Added: tools/packager/trunk/src/main/javascript/eXo/server/Tomcat.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/server/Tomcat.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/server/Tomcat.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,130 @@
+eXo.require("eXo.core.TaskDescriptor");
+eXo.require("eXo.projects.Project");
+
+function Tomcat(tomcatHome) {
+ this.runningInstance_ = null;
+ this.name = "tomcat";
+ this.serverHome = tomcatHome;
+ this.cleanServer = eXo.env.cleanServer;
+ this.deployLibDir = this.serverHome + "/lib";
+ this.deployWebappDir = this.serverHome + "/webapps";
+ this.patchDir = this.serverHome;
+ this.pluginVersion = "trunk";
+}
+
+Tomcat.prototype.RunTask = function() {
+ var descriptor = new TaskDescriptor("Run Tomcat", this.serverHome + "/bin");
+ descriptor.execute = function() {
+ java.lang.System.setProperty("user.dir", descriptor.workingDir);
+ java.lang.System.setProperty("catalina.base", eXo.server.Tomcat.serverHome);
+ java.lang.System.setProperty("catalina.home", eXo.server.Tomcat.serverHome);
+ java.lang.System.setProperty("java.io.tmpdir", eXo.server.Tomcat.serverHome + "/temp");
+ java.lang.System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
+ java.lang.System.setProperty("java.security.auth.login.config", eXo.server.Tomcat.serverHome + "/conf/jaas.conf");
+ var sysClasspath = [ new java.net.URL("file:" + eXo.env.javaHome + "/lib/tools.jar"),
+ new java.net.URL("file:" + this.serverHome + "/bin/commons-logging-api.jar") ];
+ eXo.System.addSystemClasspath(sysClasspath);
+ var tomcatClasspath = [ new java.net.URL("file:" + eXo.server.Tomcat.serverHome + "/bin/bootstrap.jar") ];
+ var contextLoader = java.lang.Thread.currentThread().getContextClassLoader();
+ var tomcatLoader = new java.net.URLClassLoader(tomcatClasspath, contextLoader);
+ java.lang.Thread.currentThread().setContextClassLoader(tomcatLoader);
+
+ var bootstrap = tomcatLoader.loadClass("org.apache.catalina.startup.Bootstrap");
+ instance = bootstrap.newInstance();
+ java.lang.System.gc();
+ instance.init();
+ instance.start();
+
+ java.lang.Thread.currentThread().setContextClassLoader(contextLoader);
+ eXo.server.Tomcat.runningInstance_ = instance;
+ }
+ return descriptor;
+}
+
+Tomcat.prototype.StopTask = function() {
+ var descriptor = new TaskDescriptor("Stop Tomcat", this.serverHome + "/bin");
+ descriptor.execute = function() {
+ if (eXo.server.Tomcat.runningInstance_ != null) {
+ eXo.server.Tomcat.runningInstance_.stop();
+ eXo.server.Tomcat.runningInstance_ = null;
+ }
+ }
+ return descriptor;
+}
+
+Tomcat.prototype.CleanTask = function() {
+ var descriptor = new TaskDescriptor("Clean Tomcat", this.serverHome + "/bin");
+ descriptor.execute = function() {
+ eXo.core.IOUtil.emptyFolder(serverHome + "/logs");
+ eXo.core.IOUtil.emptyFolder(serverHome + "/temp");
+ }
+ return descriptor;
+}
+
+Tomcat.prototype.preDeploy = function(product) {
+
+ var version = product.version;
+ if (version.indexOf("2.0") != 0 && version.indexOf("2.1") != 0 && version.indexOf("2.2") != 0
+ && version.indexOf("2.5") != 0) {
+ product.addDependencies(new Project("org.slf4j", "slf4j-api", "jar", "1.5.6"));
+ product.addDependencies(new Project("org.slf4j", "slf4j-jdk14", "jar", "1.5.6"));
+ }
+ product.addDependencies(new Project("commons-logging", "commons-logging", "jar", "1.0.4"));
+ product.addDependencies(new Project("commons-pool", "commons-pool", "jar", "1.2"));
+ product.addDependencies(new Project("commons-dbcp", "commons-dbcp", "jar", "1.2.1"));
+ product.addDependencies(new Project("org.exoplatform.portal", "exo.portal.server.tomcat.plugin", "jar", product.serverPluginVersion));
+ product.addDependencies(new Project("org.exoplatform.tool", "exo.tool.webunit", "jar", "1.0.0"));
+
+ //GTNPORTAL-32 No WSRP on tomcat yet
+ product.removeDependency(new Project("org.exoplatform.portal", "exo.portal.component.wsrp", "jar", product.serverPluginVersion ));
+ product.removeDependencyByGroupId("org.gatein.wsrp");
+
+}
+
+Tomcat.prototype.onDeploy = function(project) {
+ // if("exo-portal" == project.type) {
+ // var context =
+ // project.artifactId.substring(project.artifactId.lastIndexOf(".") + 1) ;
+ // var dirname = this.serverHome + "/conf/Catalina/localhost/";
+ // var destDir = new java.io.File(dirname);
+ // if(!destDir.exists()) destDir.mkdirs() ;
+ // var filename = dirname + context + ".xml";
+ // eXo.System.info("TOMCAT", "Generating tomcat context" + filename);
+ // var config =
+ // "<Context path='/" + context+ "' docBase='" + context + "' debug='0'
+ // reloadable='true' crossContext='true'> \n" +
+ // //className can be org.apache.catalina.logger.FileLogger
+ // " <Logger className='org.apache.catalina.logger.SystemOutLogger' \n" +
+ // " prefix='localhost_" + context + "_log.' suffix='.txt'
+ // timestamp='true'/> \n" +
+ // " <Manager className='org.apache.catalina.session.PersistentManager'
+ // saveOnRestart='false'/> \n" +
+ // " <Realm className='org.apache.catalina.realm.JAASRealm' \n" +
+ // " appName='exo-domain' \n" +
+ // " userClassNames='org.exoplatform.services.security.jaas.UserPrincipal'
+ // \n" +
+ // " roleClassNames='org.exoplatform.services.security.jaas.RolePrincipal'
+ // \n" +
+ // " debug='0' cache='false'/> \n" +
+ // " <Valve className='org.apache.catalina.authenticator.FormAuthenticator'
+ // characterEncoding='UTF-8'/>" +
+ // "</Context> \n";
+ // eXo.core.IOUtil.createFile(filename, config) ;
+ // }
+}
+
+Tomcat.prototype.postDeploy = function(product) {
+ var configFileInWar = "WEB-INF/conf/configuration.xml";
+ var portalwar = new java.io.File(this.deployWebappDir + "/" + product.portalwar);
+ eXo.System.info("CONF", "Patching " + configFileInWar + " in " + portalwar + " : remove wsrp configuration");
+ var mentries = new java.util.HashMap() ;
+ var configTmpl = eXo.core.IOUtil.getJarEntryAsText(portalwar, configFileInWar);
+ configTmpl = configTmpl.replaceAll("<import>war:/conf/common/wsrp-configuration.xml</import>", "");
+ mentries.put(configFileInWar, configTmpl.getBytes()) ;
+ eXo.core.IOUtil.modifyJar(portalwar, mentries, null);
+ //
+
+ eXo.core.IOUtil.chmodExecutableInDir(this.serverHome + "/bin/", ".sh");
+}
+
+eXo.server.Tomcat = Tomcat.prototype.constructor;
Added: tools/packager/trunk/src/main/javascript/eXo/server/WorkflowConfig.js
===================================================================
--- tools/packager/trunk/src/main/javascript/eXo/server/WorkflowConfig.js (rev 0)
+++ tools/packager/trunk/src/main/javascript/eXo/server/WorkflowConfig.js 2009-11-18 14:51:28 UTC (rev 643)
@@ -0,0 +1,56 @@
+eXo.require("eXo.core.TaskDescriptor");
+eXo.require("eXo.projects.Project");
+eXo.require("eXo.core.IOUtil");
+
+function WorkflowConfig() {
+
+}
+
+WorkflowConfig.prototype.patchWarWorkflow = function(server,product) {
+ var descriptor = new TaskDescriptor("Configure workflow", null) ;
+ var workflowName = java.lang.System.getProperty("workflow");
+ if (workflowName == null || workflowName == "") workflowName = "bonita";
+ descriptor.description = "Configure to use workflow with " + workflowName;
+ descriptor.execute =function () {
+ var jarFile = server.deployWebappDir + "/" + product.portalwar;
+ var IOUtil = eXo.core.IOUtil;
+ var mentries = new java.util.HashMap();
+ var properties = new java.util.HashMap();
+ properties.put("${workflow}", workflowName);
+ if (product.name == "eXoWorkflow") {
+ eXo.System.info("CONF", "JCR settings: " + properties.entrySet());
+ mentries = IOUtil.patchWar(jarFile, properties, "WEB-INF/conf/configuration.tmpl.xml",
+ "WEB-INF/conf/configuration.xml", mentries);
+ var portalwar = server.deployWebappDir + "/" + product.portalwar;
+ eXo.System.info("CONF", "Patching workflow config in " + portalwar + ": \n\t" + mentries.keySet());
+ IOUtil.modifyJar(portalwar, mentries, null);
+ }
+ if (product.name == "eXoDMS") {
+ var jarFile = server.deployWebappDir + "/" + product.portalwar;
+ var IOUtil = eXo.core.IOUtil;
+ var mentries = new java.util.HashMap();
+ var properties = new java.util.HashMap();
+ eXo.System.info("CONF", "Enable Workflow settings");
+ mentries = IOUtil.patchWar(jarFile, properties, "WEB-INF/conf/portal/group/organization/management/executive-board/navigation.workflow.xml",
+ "WEB-INF/conf/portal/group/organization/management/executive-board/navigation.xml", mentries);
+ var portalwar = server.deployWebappDir + "/" + product.portalwar;
+ eXo.System.info("CONF", "Patching workflow config in " + portalwar + ": \n\t" + mentries.keySet());
+ IOUtil.modifyJar(portalwar, mentries, null);
+
+ mentries = IOUtil.patchWar(jarFile, properties, "WEB-INF/conf/portal/group/platform/administrators/navigation.workflow.xml",
+ "WEB-INF/conf/portal/group/platform/administrators/navigation.xml", mentries);
+ var portalwar = server.deployWebappDir + "/" + product.portalwar;
+ eXo.System.info("CONF", "Patching workflow config in " + portalwar + ": \n\t" + mentries.keySet());
+ IOUtil.modifyJar(portalwar, mentries, null);
+
+ mentries = IOUtil.patchWar(jarFile, properties, "WEB-INF/conf/portal/group/platform/users/navigation.workflow.xml",
+ "WEB-INF/conf/portal/group/platform/users/navigation.xml", mentries);
+ var portalwar = server.deployWebappDir + "/" + product.portalwar;
+ eXo.System.info("CONF", "Patching workflow config in " + portalwar + ": \n\t" + mentries.keySet());
+ IOUtil.modifyJar(portalwar, mentries, null);
+ }
+ }
+ return descriptor;
+}
+
+eXo.server.WorkflowConfig = new WorkflowConfig();
Added: tools/packager/trunk/src/main/lib/js.jar
===================================================================
(Binary files differ)
Property changes on: tools/packager/trunk/src/main/lib/js.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
16 years, 5 months
gatein SVN: r642 - in portal/trunk: docs/user-guide and 1 other directories.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2009-11-18 06:14:59 -0500 (Wed, 18 Nov 2009)
New Revision: 642
Modified:
portal/trunk/docs/pom.xml
portal/trunk/docs/user-guide/pom.xml
portal/trunk/packaging/exopackage/pom.xml
Log:
Renamed 3.0.0-CR01-SNAPSHOT -> 3.0.0-Beta03-SNAPSHOT
Modified: portal/trunk/docs/pom.xml
===================================================================
--- portal/trunk/docs/pom.xml 2009-11-18 11:03:59 UTC (rev 641)
+++ portal/trunk/docs/pom.xml 2009-11-18 11:14:59 UTC (rev 642)
@@ -27,7 +27,7 @@
<artifactId>docs-aggregator</artifactId>
<packaging>pom</packaging>
<name>GateIn - Portal (docs-aggregator)</name>
- <version>3.0.0-CR01-SNAPSHOT</version>
+ <version>3.0.0-Beta03-SNAPSHOT</version>
<modules>
<module>user-guide</module>
Modified: portal/trunk/docs/user-guide/pom.xml
===================================================================
--- portal/trunk/docs/user-guide/pom.xml 2009-11-18 11:03:59 UTC (rev 641)
+++ portal/trunk/docs/user-guide/pom.xml 2009-11-18 11:14:59 UTC (rev 642)
@@ -34,7 +34,7 @@
<groupId>org.gatein.doc</groupId>
<artifactId>gatein-user-guide-en</artifactId>
- <version>3.0.0-CR01-SNAPSHOT</version>
+ <version>3.0.0-Beta03-SNAPSHOT</version>
<packaging>jdocbook</packaging>
<name>GateIn User Guide en</name>
Modified: portal/trunk/packaging/exopackage/pom.xml
===================================================================
--- portal/trunk/packaging/exopackage/pom.xml 2009-11-18 11:03:59 UTC (rev 641)
+++ portal/trunk/packaging/exopackage/pom.xml 2009-11-18 11:14:59 UTC (rev 642)
@@ -22,7 +22,7 @@
<parent>
<groupId>org.exoplatform.portal</groupId>
<artifactId>exo.portal.packaging</artifactId>
- <version>3.0.0-CR01-SNAPSHOT</version>
+ <version>3.0.0-Beta03-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
16 years, 5 months