You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by dr...@apache.org on 2010/06/12 21:42:58 UTC
svn commit: r954122 - in /tapestry/tapestry5/trunk/tapestry-ioc/src:
main/java/org/apache/tapestry5/ioc/annotations/
main/java/org/apache/tapestry5/ioc/def/
main/java/org/apache/tapestry5/ioc/internal/
main/java/org/apache/tapestry5/ioc/internal/util/ ...
Author: drobiazko
Date: Sat Jun 12 19:42:58 2010
New Revision: 954122
URL: http://svn.apache.org/viewvc?rev=954122&view=rev
Log:
TAP5-104: Add support for startup() methods in modules, as an easy way to add startup logic
Added:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/annotations/Startup.java (with props)
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/ModuleDef3.java (with props)
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/StartupDef.java (with props)
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/StartupDefImpl.java (with props)
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StartupModule2.java (with props)
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/DefaultModuleDefImpl.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/Module.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ModuleImpl.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalUtils.java
tapestry/tapestry5/trunk/tapestry-ioc/src/site/apt/startup.apt
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java
Added: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/annotations/Startup.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/annotations/Startup.java?rev=954122&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/annotations/Startup.java (added)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/annotations/Startup.java Sat Jun 12 19:42:58 2010
@@ -0,0 +1,37 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.ioc.annotations;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * An annotation that may be placed on a startup method of a module. A startup method is an simple way
+ * to provide extra logic to be executed at {@link org.apache.tapestry5.ioc.Registry#performRegistryStartup()}.
+ * Instead of making contributions to the <i>RegistryStartup</i> service configuration you can provide startup
+ * methods inside your modules.
+ *
+ * @since 5.2.0
+ *
+ */
+@Target(METHOD)
+@Retention(RUNTIME)
+@Documented
+public @interface Startup
+{
+}
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/annotations/Startup.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/annotations/Startup.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/ModuleDef3.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/ModuleDef3.java?rev=954122&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/ModuleDef3.java (added)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/ModuleDef3.java Sat Jun 12 19:42:58 2010
@@ -0,0 +1,30 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.ioc.def;
+
+import java.util.Set;
+
+/**
+ * Extended version of {@link org.apache.tapestry5.ioc.def.ModuleDef2} introduced in Tapestry 5.2 to allow
+ * the definition of {@link org.apache.tapestry5.ioc.def.StartupDef}s.
+ *
+ * @since 5.2.0
+ */
+public interface ModuleDef3 extends ModuleDef2
+{
+ /**
+ * Returns all the {@link org.apache.tapestry5.ioc.def.StartupDef}s.
+ */
+ Set<StartupDef> getStartupDefs();
+}
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/ModuleDef3.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/ModuleDef3.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/StartupDef.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/StartupDef.java?rev=954122&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/StartupDef.java (added)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/StartupDef.java Sat Jun 12 19:42:58 2010
@@ -0,0 +1,39 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.ioc.def;
+
+import org.apache.tapestry5.ioc.ModuleBuilderSource;
+import org.apache.tapestry5.ioc.ObjectLocator;
+import org.apache.tapestry5.ioc.OperationTracker;
+import org.apache.tapestry5.ioc.Registry;
+import org.slf4j.Logger;
+
+/**
+ * Defines an execution of a series of operations, automatically invoked at {@linkplain Registry#performRegistryStartup() registry
+ * startup}
+ *
+ * @since 5.2.0
+ */
+public interface StartupDef
+{
+ /**
+ * Executes a series of operations at registry startup.
+ *
+ * @param moduleSource provides access to the the module instance associated with the module containing the startup
+ * @param locator provides access to services defined within a {@link org.apache.tapestry5.ioc.Registry}
+ * @param tracker used to track some set of operations
+ * @param logger logger
+ */
+ void startup(ModuleBuilderSource moduleSource, ObjectLocator locator, OperationTracker tracker, Logger logger);
+}
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/StartupDef.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/def/StartupDef.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/DefaultModuleDefImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/DefaultModuleDefImpl.java?rev=954122&r1=954121&r2=954122&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/DefaultModuleDefImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/DefaultModuleDefImpl.java Sat Jun 12 19:42:58 2010
@@ -14,29 +14,52 @@
package org.apache.tapestry5.ioc.internal;
-import org.apache.tapestry5.ioc.*;
-import org.apache.tapestry5.ioc.annotations.*;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.tapestry5.ioc.AdvisorDef;
+import org.apache.tapestry5.ioc.Configuration;
+import org.apache.tapestry5.ioc.MappedConfiguration;
+import org.apache.tapestry5.ioc.MethodAdviceReceiver;
+import org.apache.tapestry5.ioc.ObjectCreator;
+import org.apache.tapestry5.ioc.OrderedConfiguration;
+import org.apache.tapestry5.ioc.ScopeConstants;
+import org.apache.tapestry5.ioc.ServiceBinder;
+import org.apache.tapestry5.ioc.ServiceBuilderResources;
+import org.apache.tapestry5.ioc.annotations.Contribute;
+import org.apache.tapestry5.ioc.annotations.EagerLoad;
+import org.apache.tapestry5.ioc.annotations.Marker;
+import org.apache.tapestry5.ioc.annotations.Match;
+import org.apache.tapestry5.ioc.annotations.Order;
+import org.apache.tapestry5.ioc.annotations.PreventServiceDecoration;
+import org.apache.tapestry5.ioc.annotations.Scope;
+import org.apache.tapestry5.ioc.annotations.ServiceId;
+import org.apache.tapestry5.ioc.annotations.Startup;
import org.apache.tapestry5.ioc.def.ContributionDef;
import org.apache.tapestry5.ioc.def.ContributionDef2;
import org.apache.tapestry5.ioc.def.DecoratorDef;
-import org.apache.tapestry5.ioc.def.ModuleDef2;
+import org.apache.tapestry5.ioc.def.ModuleDef3;
import org.apache.tapestry5.ioc.def.ServiceDef;
+import org.apache.tapestry5.ioc.def.StartupDef;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.ioc.services.ClassFactory;
import org.slf4j.Logger;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.*;
-
/**
* Starting from the Class for a module, identifies all the services (service builder methods),
* decorators (service
* decorator methods) and (not yet implemented) contributions (service contributor methods).
*/
-public class DefaultModuleDefImpl implements ModuleDef2, ServiceDefAccumulator
+public class DefaultModuleDefImpl implements ModuleDef3, ServiceDefAccumulator
{
/**
* The prefix used to identify service builder methods.
@@ -78,6 +101,8 @@ public class DefaultModuleDefImpl implem
private final Map<String, AdvisorDef> advisorDefs = CollectionFactory.newCaseInsensitiveMap();
private final Set<ContributionDef> contributionDefs = CollectionFactory.newSet();
+
+ private final Set<StartupDef> startupDefs = CollectionFactory.newSet();
private final Set<Class> defaultMarkers = CollectionFactory.newSet();
@@ -232,9 +257,21 @@ public class DefaultModuleDefImpl implem
remainingMethods.remove(m);
continue;
}
+
+ if (m.isAnnotationPresent(Startup.class))
+ {
+ addStartupDef(m);
+ remainingMethods.remove(m);
+ continue;
+ }
}
}
+ private void addStartupDef(Method method)
+ {
+ startupDefs.add(new StartupDefImpl(method));
+ }
+
private void addContributionDef(Method method)
{
Contribute annotation = method.getAnnotation(Contribute.class);
@@ -477,6 +514,11 @@ public class DefaultModuleDefImpl implem
{
return contributionDefs;
}
+
+ public Set<StartupDef> getStartupDefs()
+ {
+ return startupDefs;
+ }
public String getLoggerName()
{
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/Module.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/Module.java?rev=954122&r1=954121&r2=954122&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/Module.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/Module.java Sat Jun 12 19:42:58 2010
@@ -23,6 +23,7 @@ import org.apache.tapestry5.ioc.def.Cont
import org.apache.tapestry5.ioc.def.DecoratorDef;
import org.apache.tapestry5.ioc.def.ServiceDef;
import org.apache.tapestry5.ioc.def.ServiceDef2;
+import org.apache.tapestry5.ioc.def.StartupDef;
/**
* A module within the Tapestry IoC registry. Each Module is constructed around a corresponding module builder instance;
@@ -97,4 +98,9 @@ public interface Module extends ModuleBu
* @return module logger name
*/
String getLoggerName();
+
+ /**
+ * Returns all the {@link StartupDef}s defined in the module.
+ */
+ Set<StartupDef> getStartupDefs();
}
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ModuleImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ModuleImpl.java?rev=954122&r1=954121&r2=954122&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ModuleImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ModuleImpl.java Sat Jun 12 19:42:58 2010
@@ -40,9 +40,10 @@ import org.apache.tapestry5.ioc.def.Cont
import org.apache.tapestry5.ioc.def.ContributionDef2;
import org.apache.tapestry5.ioc.def.DecoratorDef;
import org.apache.tapestry5.ioc.def.ModuleDef;
-import org.apache.tapestry5.ioc.def.ModuleDef2;
+import org.apache.tapestry5.ioc.def.ModuleDef3;
import org.apache.tapestry5.ioc.def.ServiceDef;
import org.apache.tapestry5.ioc.def.ServiceDef2;
+import org.apache.tapestry5.ioc.def.StartupDef;
import org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier;
@@ -63,7 +64,7 @@ public class ModuleImpl implements Modul
private final ServiceActivityTracker tracker;
- private final ModuleDef2 moduleDef;
+ private final ModuleDef3 moduleDef;
private final ClassFactory classFactory;
@@ -97,7 +98,7 @@ public class ModuleImpl implements Modul
{
this.registry = registry;
this.tracker = tracker;
- this.moduleDef = InternalUtils.toModuleDef2(moduleDef);
+ this.moduleDef = InternalUtils.toModuleDef3(moduleDef);
this.classFactory = classFactory;
this.logger = logger;
@@ -570,6 +571,11 @@ public class ModuleImpl implements Modul
{
return moduleDef.getLoggerName();
}
+
+ public Set<StartupDef> getStartupDefs()
+ {
+ return moduleDef.getStartupDefs();
+ }
@Override
public String toString()
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java?rev=954122&r1=954121&r2=954122&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java Sat Jun 12 19:42:58 2010
@@ -30,8 +30,10 @@ import org.apache.tapestry5.ioc.def.Deco
import org.apache.tapestry5.ioc.def.ModuleDef;
import org.apache.tapestry5.ioc.def.ServiceDef;
import org.apache.tapestry5.ioc.def.ServiceDef2;
+import org.apache.tapestry5.ioc.def.StartupDef;
import org.apache.tapestry5.ioc.internal.services.PerthreadManagerImpl;
import org.apache.tapestry5.ioc.internal.services.RegistryShutdownHubImpl;
+import org.apache.tapestry5.ioc.internal.services.ServiceMessages;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.Defense;
import org.apache.tapestry5.ioc.internal.util.InjectionResources;
@@ -281,9 +283,32 @@ public class RegistryImpl implements Reg
proxy.eagerLoadService();
getService("RegistryStartup", Runnable.class).run();
+
+ invokeStartups();
cleanupThread();
}
+
+ private void invokeStartups()
+ {
+ for (Module m : moduleToServiceDefs.keySet())
+ {
+ Logger logger = this.loggerSource.getLogger(m.getLoggerName());
+
+ for (StartupDef sd : m.getStartupDefs())
+ {
+ try
+ {
+ sd.startup(m, this, this, logger);
+ }
+ catch(RuntimeException e)
+ {
+ logger.error(ServiceMessages.startupFailure(e));
+ }
+ }
+
+ }
+ }
public Logger getServiceLogger(String serviceId)
{
Added: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/StartupDefImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/StartupDefImpl.java?rev=954122&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/StartupDefImpl.java (added)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/StartupDefImpl.java Sat Jun 12 19:42:58 2010
@@ -0,0 +1,81 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.ioc.internal;
+
+import static java.lang.String.format;
+import static org.apache.tapestry5.ioc.internal.util.InternalUtils.asString;
+import static org.apache.tapestry5.ioc.internal.util.InternalUtils.toMessage;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+import org.apache.tapestry5.ioc.ModuleBuilderSource;
+import org.apache.tapestry5.ioc.ObjectLocator;
+import org.apache.tapestry5.ioc.OperationTracker;
+import org.apache.tapestry5.ioc.def.StartupDef;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry5.ioc.internal.util.InjectionResources;
+import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+import org.apache.tapestry5.ioc.internal.util.MapInjectionResources;
+import org.slf4j.Logger;
+
+
+public class StartupDefImpl implements StartupDef
+{
+ private final Method startupMethod;
+
+ public StartupDefImpl(Method startupMethod)
+ {
+ this.startupMethod = startupMethod;
+ }
+
+ public void startup(ModuleBuilderSource moduleSource, ObjectLocator locator, OperationTracker tracker, Logger logger)
+ {
+ Map<Class, Object> resourceMap = CollectionFactory.newMap();
+
+ resourceMap.put(ObjectLocator.class, locator);
+ resourceMap.put(Logger.class, logger);
+
+ InjectionResources injectionResources = new MapInjectionResources(resourceMap);
+
+ Throwable fail = null;
+
+ Object moduleInstance = InternalUtils.isStatic(startupMethod) ? null : moduleSource
+ .getModuleBuilder();
+
+ try
+ {
+ Object[] parameters = InternalUtils.calculateParametersForMethod(
+ startupMethod,
+ locator,
+ injectionResources, tracker);
+
+ startupMethod.invoke(moduleInstance, parameters);
+ }
+ catch (InvocationTargetException ex)
+ {
+ fail = ex.getTargetException();
+ }
+ catch (Exception ex)
+ {
+ fail = ex;
+ }
+
+ if (fail != null)
+ throw new RuntimeException(
+ format("Error invoking startup method %s: %s", asString(startupMethod), toMessage(fail)), fail);
+ }
+
+}
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/StartupDefImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/StartupDefImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalUtils.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalUtils.java?rev=954122&r1=954121&r2=954122&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalUtils.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalUtils.java Sat Jun 12 19:42:58 2010
@@ -29,13 +29,37 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.net.URL;
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.tapestry5.func.Mapper;
import org.apache.tapestry5.func.Predicate;
-import org.apache.tapestry5.ioc.*;
+import org.apache.tapestry5.ioc.AdvisorDef;
+import org.apache.tapestry5.ioc.AnnotationProvider;
+import org.apache.tapestry5.ioc.Configuration;
+import org.apache.tapestry5.ioc.Invokable;
+import org.apache.tapestry5.ioc.Locatable;
+import org.apache.tapestry5.ioc.Location;
+import org.apache.tapestry5.ioc.MappedConfiguration;
+import org.apache.tapestry5.ioc.ModuleBuilderSource;
+import org.apache.tapestry5.ioc.ObjectCreator;
+import org.apache.tapestry5.ioc.ObjectLocator;
+import org.apache.tapestry5.ioc.OperationTracker;
+import org.apache.tapestry5.ioc.OrderedConfiguration;
+import org.apache.tapestry5.ioc.ServiceBuilderResources;
+import org.apache.tapestry5.ioc.ServiceLifecycle;
+import org.apache.tapestry5.ioc.ServiceLifecycle2;
+import org.apache.tapestry5.ioc.ServiceResources;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.annotations.InjectResource;
import org.apache.tapestry5.ioc.annotations.InjectService;
@@ -44,9 +68,10 @@ import org.apache.tapestry5.ioc.def.Cont
import org.apache.tapestry5.ioc.def.ContributionDef2;
import org.apache.tapestry5.ioc.def.DecoratorDef;
import org.apache.tapestry5.ioc.def.ModuleDef;
-import org.apache.tapestry5.ioc.def.ModuleDef2;
+import org.apache.tapestry5.ioc.def.ModuleDef3;
import org.apache.tapestry5.ioc.def.ServiceDef;
import org.apache.tapestry5.ioc.def.ServiceDef2;
+import org.apache.tapestry5.ioc.def.StartupDef;
import org.apache.tapestry5.ioc.services.ClassFabUtils;
import org.apache.tapestry5.ioc.services.ClassFactory;
import org.apache.tapestry5.ioc.services.Coercion;
@@ -846,12 +871,12 @@ public class InternalUtils
};
}
- public static ModuleDef2 toModuleDef2(final ModuleDef md)
+ public static ModuleDef3 toModuleDef3(final ModuleDef md)
{
- if (md instanceof ModuleDef2)
- return (ModuleDef2) md;
+ if (md instanceof ModuleDef3)
+ return (ModuleDef3) md;
- return new ModuleDef2()
+ return new ModuleDef3()
{
public Set<AdvisorDef> getAdvisorDefs()
{
@@ -887,6 +912,11 @@ public class InternalUtils
{
return md.getServiceIds();
}
+
+ public Set<StartupDef> getStartupDefs()
+ {
+ return Collections.emptySet();
+ }
};
}
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/site/apt/startup.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/site/apt/startup.apt?rev=954122&r1=954121&r2=954122&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/site/apt/startup.apt (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/site/apt/startup.apt Sat Jun 12 19:42:58 2010
@@ -25,4 +25,25 @@ public class MyModule
}
----
- Generally, these contributions are in the form of inner classes; if they were services, they could just be eagerly loaded.
\ No newline at end of file
+ Generally, these contributions are in the form of inner classes; if they were services, they could just be eagerly loaded.
+
+Startup Methods
+
+ In Tapestry 5.2 the way of providing extra logic to be executed at Registry startup has been simplified.
+ Instead of making contributions to the RegistryStartup service configuration you can provide startup methods inside your modules.
+ A startup method is a static or instance method of a module annotated with {{{../apidocs/org/apache/tapestry5/ioc/annotations/Startup.html}Startup}}
+ annotation. Each module is allowed to contain several startup methods.
+
+----
+public class MyModule
+{
+
+ @Startup
+ public static void initMyApplication(Logger logger, MyService service)
+ {
+ logger.info("Starting up...");
+
+ service.init();
+ }
+}
+----
\ No newline at end of file
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java?rev=954122&r1=954121&r2=954122&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java Sat Jun 12 19:42:58 2010
@@ -31,6 +31,7 @@ import org.apache.tapestry5.ioc.internal
import org.apache.tapestry5.ioc.internal.IOCInternalTestCase;
import org.apache.tapestry5.ioc.internal.PrivateConstructorModule;
import org.apache.tapestry5.ioc.internal.UpcaseService;
+import org.apache.tapestry5.ioc.internal.services.StartupModule2;
import org.apache.tapestry5.ioc.services.Builtin;
import org.apache.tapestry5.ioc.services.ServiceActivity;
import org.apache.tapestry5.ioc.services.ServiceActivityScoreboard;
@@ -1433,6 +1434,8 @@ public class IntegrationTest extends IOC
NameListHolder2 holder = r.getService("ServiceWithEmptyConfiguration", NameListHolder2.class);
assertEquals(holder.getNames(), Arrays.asList());
+
+ r.shutdown();
}
@@ -1489,4 +1492,23 @@ public class IntegrationTest extends IOC
r.shutdown();
}
+
+ @Test
+ public void startup_inside_module()
+ {
+ Registry r = buildRegistry(StartupModule2.class);
+
+ assertFalse(StartupModule2.staticStartupInvoked);
+
+ assertFalse(StartupModule2.instanceStartupInvoked);
+
+ r.performRegistryStartup();
+
+ assertTrue(StartupModule2.staticStartupInvoked);
+
+ assertTrue(StartupModule2.instanceStartupInvoked);
+
+ r.shutdown();
+
+ }
}
Added: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StartupModule2.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StartupModule2.java?rev=954122&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StartupModule2.java (added)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StartupModule2.java Sat Jun 12 19:42:58 2010
@@ -0,0 +1,39 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.ioc.internal.services;
+
+import org.apache.tapestry5.ioc.ObjectLocator;
+import org.apache.tapestry5.ioc.annotations.Startup;
+import org.slf4j.Logger;
+
+public class StartupModule2
+{
+ public static boolean staticStartupInvoked;
+ public static boolean instanceStartupInvoked;
+
+ @Startup
+ public static void foo(ObjectLocator locator)
+ {
+ staticStartupInvoked = true;
+ }
+
+ @Startup
+ public void bar(ObjectLocator locator, Logger logger)
+ {
+ instanceStartupInvoked = true;
+
+ logger.info("StartupModule2.bar invoked");
+ }
+}
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StartupModule2.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StartupModule2.java
------------------------------------------------------------------------------
svn:mime-type = text/plain