Seam SVN: r12440 - in modules/drools/trunk: api/src/main/java/org/jboss/seam/drools and 6 other directories.
by seam-commits@lists.jboss.org
Author: tsurdilovic
Date: 2010-04-13 02:23:47 -0400 (Tue, 13 Apr 2010)
New Revision: 12440
Added:
modules/drools/trunk/api/.settings/
modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/TemplateDataProvider.java
modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KBaseEventListener.java
modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KSessionEventListener.java
modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/WIHandler.java
modules/drools/trunk/docs/.settings/
modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyDummyWorkItemHandler.java
modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyKnowledgeSessionEventListener.java
modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyOtherDummyWorkItemHandler.java
modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MySecondKnowledgeBaseEventListener.java
modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/SimpleTemplateDataProvider.java
Removed:
modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/FactProvider.java
modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KBaseEventListener.java
modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KSessionEventListener.java
modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/WIHandler.java
Modified:
modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/TemplateData.java
modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/KnowledgeBaseProducer.java
modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/KnowledgeSessionProducer.java
modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/bootstrap/DroolsExtension.java
modules/drools/trunk/impl/src/test/resources/org/jboss/seam/drools/test/kbase/KBaseTest-beans.xml
modules/drools/trunk/impl/src/test/resources/org/jboss/seam/drools/test/kbase/kbasetest.drl
Log:
Added support for Drools Templates. Also the Drools Extension looks for and registers event listeners, workitemhandlers and template data providers now.
Added: modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/TemplateDataProvider.java
===================================================================
--- modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/TemplateDataProvider.java (rev 0)
+++ modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/TemplateDataProvider.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -0,0 +1,22 @@
+package org.jboss.seam.drools;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Interface for template data providers.
+ *
+ * @author Tihomir Surdilovic
+ */
+public interface TemplateDataProvider
+{
+ public Collection<Map<String,Object>> getTemplateData();
+}
+
Deleted: modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/FactProvider.java
===================================================================
--- modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/FactProvider.java 2010-04-12 22:51:45 UTC (rev 12439)
+++ modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/FactProvider.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -1,29 +0,0 @@
-package org.jboss.seam.drools.qualifiers;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import javax.enterprise.util.Nonbinding;
-import javax.inject.Qualifier;
-
-/**
- *
- * @author Tihomir Surdilovic
- */
-@Qualifier
-@Target( { TYPE, METHOD, FIELD, PARAMETER })
-@Documented
-@Retention(RUNTIME)
-@Inherited
-public @interface FactProvider {
- @Nonbinding String name();
- @Nonbinding String entryPointName();
-}
Deleted: modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KBaseEventListener.java
===================================================================
--- modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KBaseEventListener.java 2010-04-12 22:51:45 UTC (rev 12439)
+++ modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KBaseEventListener.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -1,27 +0,0 @@
-package org.jboss.seam.drools.qualifiers;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import javax.inject.Qualifier;
-
-/**
- *
- * @author Tihomir Surdilovic
- */
-@Qualifier
-@Target( { TYPE, METHOD, FIELD, PARAMETER })
-@Documented
-@Retention(RUNTIME)
-@Inherited
-public @interface KBaseEventListener {
-
-}
Added: modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KBaseEventListener.java
===================================================================
--- modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KBaseEventListener.java (rev 0)
+++ modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KBaseEventListener.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -0,0 +1,27 @@
+package org.jboss.seam.drools.qualifiers;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+/**
+ *
+ * @author Tihomir Surdilovic
+ */
+@Qualifier
+@Target( TYPE )
+@Documented
+@Retention(RUNTIME)
+@Inherited
+public @interface KBaseEventListener {
+
+}
Deleted: modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KSessionEventListener.java
===================================================================
--- modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KSessionEventListener.java 2010-04-12 22:51:45 UTC (rev 12439)
+++ modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KSessionEventListener.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -1,27 +0,0 @@
-package org.jboss.seam.drools.qualifiers;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import javax.inject.Qualifier;
-
-/**
- *
- * @author Tihomir Surdilovic
- */
-@Qualifier
-@Target( { TYPE, METHOD, FIELD, PARAMETER })
-@Documented
-@Retention(RUNTIME)
-@Inherited
-public @interface KSessionEventListener {
-
-}
Added: modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KSessionEventListener.java
===================================================================
--- modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KSessionEventListener.java (rev 0)
+++ modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/KSessionEventListener.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -0,0 +1,27 @@
+package org.jboss.seam.drools.qualifiers;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+/**
+ *
+ * @author Tihomir Surdilovic
+ */
+@Qualifier
+@Target( TYPE )
+@Documented
+@Retention(RUNTIME)
+@Inherited
+public @interface KSessionEventListener {
+
+}
Modified: modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/TemplateData.java
===================================================================
--- modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/TemplateData.java 2010-04-12 22:51:45 UTC (rev 12439)
+++ modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/TemplateData.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -1,8 +1,5 @@
package org.jboss.seam.drools.qualifiers;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@@ -19,7 +16,7 @@
* @author Tihomir Surdilovic
*/
@Qualifier
-@Target( { TYPE, METHOD, FIELD, PARAMETER })
+@Target( TYPE )
@Documented
@Retention(RUNTIME)
@Inherited
Deleted: modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/WIHandler.java
===================================================================
--- modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/WIHandler.java 2010-04-12 22:51:45 UTC (rev 12439)
+++ modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/WIHandler.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -1,28 +0,0 @@
-package org.jboss.seam.drools.qualifiers;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import javax.enterprise.util.Nonbinding;
-import javax.inject.Qualifier;
-
-/**
- *
- * @author Tihomir Surdilovic
- */
-@Qualifier
-@Target( { TYPE, METHOD, FIELD, PARAMETER })
-@Documented
-@Retention(RUNTIME)
-@Inherited
-public @interface WIHandler {
- @Nonbinding String name();
-}
Added: modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/WIHandler.java
===================================================================
--- modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/WIHandler.java (rev 0)
+++ modules/drools/trunk/api/src/main/java/org/jboss/seam/drools/qualifiers/WIHandler.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -0,0 +1,28 @@
+package org.jboss.seam.drools.qualifiers;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+
+/**
+ *
+ * @author Tihomir Surdilovic
+ */
+@Qualifier
+@Target( TYPE )
+@Documented
+@Retention(RUNTIME)
+@Inherited
+public @interface WIHandler {
+ @Nonbinding String name();
+}
Modified: modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/KnowledgeBaseProducer.java
===================================================================
--- modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/KnowledgeBaseProducer.java 2010-04-12 22:51:45 UTC (rev 12439)
+++ modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/KnowledgeBaseProducer.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -1,15 +1,13 @@
package org.jboss.seam.drools;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringReader;
import java.util.Iterator;
import java.util.Properties;
-import java.util.Set;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Produces;
-import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.util.AnnotationLiteral;
import javax.inject.Inject;
import org.drools.KnowledgeBase;
@@ -23,11 +21,12 @@
import org.drools.builder.ResourceType;
import org.drools.event.knowledgebase.KnowledgeBaseEventListener;
import org.drools.io.ResourceFactory;
+import org.drools.template.ObjectDataCompiler;
+import org.jboss.seam.drools.bootstrap.DroolsExtension;
import org.jboss.seam.drools.config.DroolsConfiguration;
import org.jboss.seam.drools.events.KnowledgeBuilderErrorsEvent;
import org.jboss.seam.drools.events.RuleResourceAddedEvent;
import org.jboss.seam.drools.qualifiers.KBaseConfigured;
-import org.jboss.seam.drools.qualifiers.KBaseEventListener;
import org.jboss.seam.drools.utils.ConfigUtils;
import org.jboss.weld.extensions.resources.ResourceProvider;
import org.slf4j.Logger;
@@ -45,6 +44,8 @@
BeanManager manager;
@Inject
ResourceProvider resourceProvider;
+ @Inject
+ DroolsExtension droolsExtension;
@Produces
@KBaseConfigured
@@ -70,19 +71,22 @@
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(getKnowledgeBaseConfiguration(kbaseConfig.getKnowledgeBaseConfigPath()));
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
- Set<Bean<?>> allKBaseEventListeners = manager.getBeans(KnowledgeBaseEventListener.class, new AnnotationLiteral<KBaseEventListener>() {});
- if (allKBaseEventListeners != null)
- {
- Iterator<Bean<?>> iter = allKBaseEventListeners.iterator();
- while (iter.hasNext())
- {
- addEventListener(kbase, iter.next());
- }
- }
+ addEventListeners(kbase);
return kbase;
}
+ private void addEventListeners(KnowledgeBase kbase)
+ {
+ Iterator<KnowledgeBaseEventListener> allKBaseEventListeners = droolsExtension.getKbaseEventListenerSet().iterator();
+ while (allKBaseEventListeners.hasNext())
+ {
+ KnowledgeBaseEventListener listener = allKBaseEventListeners.next();
+ kbase.addEventListener(listener);
+ log.info("Added KnowledgeBaseEventListener: " + listener);
+ }
+ }
+
private KnowledgeBuilderConfiguration getKnowledgeBuilderConfiguration(String knowledgeBuilderConfigPath) throws Exception
{
KnowledgeBuilderConfiguration droolsKbuilderConfig = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
@@ -114,28 +118,53 @@
private void addResource(KnowledgeBuilder kbuilder, String resource) throws Exception
{
- // TODO add support for drools templates definition!
if (ConfigUtils.isValidResource(resource))
{
ResourceType resourceType = ResourceType.getResourceType(ConfigUtils.getResourceType(resource));
- if (ConfigUtils.getResourcePath(resource).equals(ConfigUtils.RESOURCE_TYPE_URL))
+
+ if (ConfigUtils.isRuleTemplate(resource))
{
- kbuilder.add(ResourceFactory.newUrlResource(ConfigUtils.getRuleResource(resource)), resourceType);
- manager.fireEvent(new RuleResourceAddedEvent(ConfigUtils.getRuleResource(resource)));
+ TemplateDataProvider templateDataProvider = droolsExtension.getTemplateDataProviders().get(ConfigUtils.getTemplateData(resource));
+ if (templateDataProvider != null)
+ {
+ InputStream templateStream = resourceProvider.loadResourceStream(ConfigUtils.getRuleResource(resource));
+ if (templateStream == null)
+ {
+ throw new IllegalStateException("Could not load rule template: " + ConfigUtils.getRuleResource(resource));
+ }
+ ObjectDataCompiler converter = new ObjectDataCompiler();
+ String drl = converter.compile(templateDataProvider.getTemplateData(), templateStream);
+ log.info("Generated following rule from template and template data: \n" + drl);
+ templateStream.close();
+ Reader rdr = new StringReader(drl);
+ kbuilder.add(ResourceFactory.newReaderResource(rdr), resourceType);
+ }
+ else
+ {
+ throw new IllegalStateException("Requested template data provider: " + ConfigUtils.getTemplateData(resource) + " for resource " + resource + " has not been created. Check to make sure you have defined one.");
+ }
}
- else if (ConfigUtils.getResourcePath(resource).equals(ConfigUtils.RESOURCE_TYPE_FILE))
- {
- kbuilder.add(ResourceFactory.newFileResource(ConfigUtils.getRuleResource(resource)), resourceType);
- manager.fireEvent(new RuleResourceAddedEvent(ConfigUtils.getRuleResource(resource)));
- }
- else if (ConfigUtils.getResourcePath(resource).equals(ConfigUtils.RESOURCE_TYPE_CLASSPATH))
- {
- kbuilder.add(ResourceFactory.newClassPathResource(ConfigUtils.getRuleResource(resource)), resourceType);
- manager.fireEvent(new RuleResourceAddedEvent(ConfigUtils.getRuleResource(resource)));
- }
else
{
- log.error("Invalid resource: " + ConfigUtils.getResourcePath(resource));
+ if (ConfigUtils.getResourcePath(resource).equals(ConfigUtils.RESOURCE_TYPE_URL))
+ {
+ kbuilder.add(ResourceFactory.newUrlResource(ConfigUtils.getRuleResource(resource)), resourceType);
+ manager.fireEvent(new RuleResourceAddedEvent(ConfigUtils.getRuleResource(resource)));
+ }
+ else if (ConfigUtils.getResourcePath(resource).equals(ConfigUtils.RESOURCE_TYPE_FILE))
+ {
+ kbuilder.add(ResourceFactory.newFileResource(ConfigUtils.getRuleResource(resource)), resourceType);
+ manager.fireEvent(new RuleResourceAddedEvent(ConfigUtils.getRuleResource(resource)));
+ }
+ else if (ConfigUtils.getResourcePath(resource).equals(ConfigUtils.RESOURCE_TYPE_CLASSPATH))
+ {
+ kbuilder.add(ResourceFactory.newClassPathResource(ConfigUtils.getRuleResource(resource)), resourceType);
+ manager.fireEvent(new RuleResourceAddedEvent(ConfigUtils.getRuleResource(resource)));
+ }
+ else
+ {
+ log.error("Invalid resource: " + ConfigUtils.getResourcePath(resource));
+ }
}
}
else
@@ -143,12 +172,4 @@
log.error("Invalid resource definition: " + resource);
}
}
-
- private void addEventListener(org.drools.KnowledgeBase kbase, Bean<?> listener)
- {
- CreationalContext<?> context = manager.createCreationalContext(listener);
- KnowledgeBaseEventListener listenerInstance = (KnowledgeBaseEventListener) manager.getReference(listener, KnowledgeBaseEventListener.class, context);
- kbase.addEventListener(listenerInstance);
- log.debug("Added KnowledgeBaseEventListener: " + listener);
- }
}
Modified: modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/KnowledgeSessionProducer.java
===================================================================
--- modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/KnowledgeSessionProducer.java 2010-04-12 22:51:45 UTC (rev 12439)
+++ modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/KnowledgeSessionProducer.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -2,16 +2,12 @@
import java.util.Iterator;
import java.util.Properties;
-import java.util.Set;
-import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.Any;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Produces;
-import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.util.AnnotationLiteral;
import javax.inject.Inject;
import org.drools.KnowledgeBase;
@@ -23,12 +19,10 @@
import org.drools.runtime.KnowledgeSessionConfiguration;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.StatelessKnowledgeSession;
-import org.drools.runtime.process.WorkItemHandler;
+import org.jboss.seam.drools.bootstrap.DroolsExtension;
import org.jboss.seam.drools.config.DroolsConfiguration;
import org.jboss.seam.drools.qualifiers.KAgentConfigured;
import org.jboss.seam.drools.qualifiers.KBaseConfigured;
-import org.jboss.seam.drools.qualifiers.KSessionEventListener;
-import org.jboss.seam.drools.qualifiers.WIHandler;
import org.jboss.seam.drools.utils.ConfigUtils;
import org.jboss.weld.extensions.resources.ResourceProvider;
import org.slf4j.Logger;
@@ -46,6 +40,8 @@
BeanManager manager;
@Inject
ResourceProvider resourceProvider;
+ @Inject
+ DroolsExtension droolsExtension;
@Produces
@KBaseConfigured
@@ -89,7 +85,7 @@
return ksession;
}
- void disposeStatefulSession(@Disposes @Any StatefulKnowledgeSession session)
+ public void disposeStatefulSession(@Disposes @Any StatefulKnowledgeSession session)
{
session.dispose();
}
@@ -112,54 +108,37 @@
private void addEventListeners(KnowledgeRuntimeEventManager ksession)
{
- Set<Bean<?>> allKSessionEventListeners = manager.getBeans(Object.class, new AnnotationLiteral<KSessionEventListener>()
+ Iterator<Object> iter = droolsExtension.getKsessionEventListenerSet().iterator();
+ while (iter.hasNext())
{
- });
- if(allKSessionEventListeners != null) {
- Iterator<Bean<?>> iter = allKSessionEventListeners.iterator();
- while(iter.hasNext()) {
- Bean<?> eventListener = iter.next();
- CreationalContext<?> context = manager.createCreationalContext(eventListener);
- Object eventListenerInstance = manager.getReference(eventListener, Object.class, context);
-
- if (eventListenerInstance instanceof WorkingMemoryEventListener)
- {
- ksession.addEventListener((WorkingMemoryEventListener) eventListenerInstance);
- }
- else if (eventListenerInstance instanceof AgendaEventListener)
- {
- ksession.addEventListener((AgendaEventListener) eventListenerInstance);
- }
- else if (eventListenerInstance instanceof ProcessEventListener)
- {
- ksession.addEventListener((ProcessEventListener) eventListenerInstance);
- }
- else
- {
- log.debug("Invalid Event Listener: " + eventListenerInstance);
- }
+ Object eventListenerInstance = iter.next();
+
+ if (eventListenerInstance instanceof WorkingMemoryEventListener)
+ {
+ ksession.addEventListener((WorkingMemoryEventListener) eventListenerInstance);
}
+ else if (eventListenerInstance instanceof AgendaEventListener)
+ {
+ ksession.addEventListener((AgendaEventListener) eventListenerInstance);
+ }
+ else if (eventListenerInstance instanceof ProcessEventListener)
+ {
+ ksession.addEventListener((ProcessEventListener) eventListenerInstance);
+ }
+ else
+ {
+ log.debug("Invalid Event Listener: " + eventListenerInstance);
+ }
}
}
private void addWorkItemHandlers(StatefulKnowledgeSession ksession)
{
- Set<Bean<?>> allWorkItemHandlers = manager.getBeans(WorkItemHandler.class, new AnnotationLiteral<WIHandler>()
+ Iterator<String> iter = droolsExtension.getWorkItemHandlers().keySet().iterator();
+ while (iter.hasNext())
{
- });
- if (allWorkItemHandlers != null)
- {
- Iterator<Bean<?>> iter = allWorkItemHandlers.iterator();
- while (iter.hasNext())
- {
- Bean<?> handler = iter.next();
- WIHandler handlerQualifier = (WIHandler) handler.getQualifiers().toArray()[0];
- CreationalContext<?> context = manager.createCreationalContext(handler);
- WorkItemHandler handlerInstance = (WorkItemHandler) manager.getReference(handler, WorkItemHandler.class, context);
-
- log.info("Registering new WorkItemHandler: " + handlerQualifier.name());
- ksession.getWorkItemManager().registerWorkItemHandler(handlerQualifier.name(), handlerInstance);
- }
+ String name = iter.next();
+ ksession.getWorkItemManager().registerWorkItemHandler(name, droolsExtension.getWorkItemHandlers().get(name));
}
}
}
Modified: modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/bootstrap/DroolsExtension.java
===================================================================
--- modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/bootstrap/DroolsExtension.java 2010-04-12 22:51:45 UTC (rev 12439)
+++ modules/drools/trunk/impl/src/main/java/org/jboss/seam/drools/bootstrap/DroolsExtension.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -1,18 +1,129 @@
package org.jboss.seam.drools.bootstrap;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Any;
import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.util.AnnotationLiteral;
+import org.drools.event.knowledgebase.KnowledgeBaseEventListener;
+import org.drools.runtime.process.WorkItemHandler;
+import org.jboss.seam.drools.TemplateDataProvider;
+import org.jboss.seam.drools.qualifiers.KBaseEventListener;
+import org.jboss.seam.drools.qualifiers.KSessionEventListener;
+import org.jboss.seam.drools.qualifiers.TemplateData;
+import org.jboss.seam.drools.qualifiers.WIHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DroolsExtension implements Extension
{
private static final Logger log = LoggerFactory.getLogger(DroolsExtension.class);
-
- void afterBeanDiscovery(@Observes AfterBeanDiscovery abd) {
+ private Set<KnowledgeBaseEventListener> kbaseEventListenerSet = new HashSet<KnowledgeBaseEventListener>();
+ private Set<Object> ksessionEventListenerSet = new HashSet<Object>();
+ private Map<String, WorkItemHandler> workItemHandlers = new HashMap<String, WorkItemHandler>();
+ private Map<String, TemplateDataProvider> templateDataProviders = new HashMap<String, TemplateDataProvider>();
+
+ @SuppressWarnings("serial")
+ void afterBeanDiscovery(@Observes AfterBeanDiscovery abd, BeanManager bm) {
+ //KnowledgeBase event listeners
+ log.info("Start creating knowledgebase event listeners");
+ Set<Bean<?>> allKBaseEventListeners = bm.getBeans(KnowledgeBaseEventListener.class, new AnnotationLiteral<KBaseEventListener>() {});
+ if(allKBaseEventListeners != null) {
+ Iterator<Bean<?>> kbaseEventListenerIterator = allKBaseEventListeners.iterator();
+ while (kbaseEventListenerIterator.hasNext()) {
+ Bean<?> listener = kbaseEventListenerIterator.next();
+ CreationalContext<?> context = bm.createCreationalContext(listener);
+ kbaseEventListenerSet.add((KnowledgeBaseEventListener) bm.getReference(listener, KnowledgeBaseEventListener.class, context));
+
+ }
+ }
+ log.info("End creating [" + (allKBaseEventListeners == null ? 0 : allKBaseEventListeners.size())+ "] knowledgebase event listeners");
+ //KnowledgeSession event listeners
+ log.info("Start creating knowledgeSession event listeners");
+ Set<Bean<?>> allKSessionEventListeners = bm.getBeans(Object.class, new AnnotationLiteral<KSessionEventListener>() {});
+ if(allKBaseEventListeners != null) {
+ Iterator<Bean<?>> ksessionEventListenerIterator = allKSessionEventListeners.iterator();
+ while (ksessionEventListenerIterator.hasNext()) {
+ Bean<?> listener = ksessionEventListenerIterator.next();
+ CreationalContext<?> context = bm.createCreationalContext(listener);
+ ksessionEventListenerSet.add(bm.getReference(listener, Object.class, context));
+ }
+ }
+ log.info("End creating [" + (allKSessionEventListeners == null ? 0 : allKSessionEventListeners.size())+ "] knowledgesession event listeners");
+
+ //WorkItemHandlers
+ log.info("Start creating workitem handlers");
+ Set<Bean<?>> allWorkItemHandlers = bm.getBeans(WorkItemHandler.class, new AnnotationLiteral<Any>(){});
+ if(allWorkItemHandlers != null) {
+ Iterator<Bean<?>> iter = allWorkItemHandlers.iterator();
+ while (iter.hasNext())
+ {
+ Bean<?> handler = iter.next();
+ WIHandler handlerAnnotation = handler.getBeanClass().getAnnotation(WIHandler.class);
+ String handlerName = handlerAnnotation.name();
+ if(handlerName.length() > 0) {
+ CreationalContext<?> context = bm.createCreationalContext(handler);
+ WorkItemHandler handlerInstance = (WorkItemHandler) bm.getReference(handler, WorkItemHandler.class, context);
+ workItemHandlers.put(handlerName, handlerInstance);
+ } else {
+ throw new IllegalStateException("WorkItemHandler name cannot be empty in class: " + handler.getBeanClass().getName());
+ }
+ }
+ }
+ log.info("End creating [" + (allWorkItemHandlers == null ? 0 : allWorkItemHandlers.size())+ "] workitem handlers");
+
+ //Template Data Providers
+ log.info("Start creating template providers");
+ Set<Bean<?>> allTemplateProviders = bm.getBeans(TemplateDataProvider.class, new AnnotationLiteral<Any>(){});
+ if(allTemplateProviders != null) {
+ Iterator<Bean<?>> iter = allTemplateProviders.iterator();
+ while (iter.hasNext())
+ {
+ Bean<?> templateDataProvider = iter.next();
+ TemplateData teamplateDataAnnotation = templateDataProvider.getBeanClass().getAnnotation(TemplateData.class);
+ String templateDataName = teamplateDataAnnotation.name();
+ if(templateDataName.length() > 0) {
+ CreationalContext<?> context = bm.createCreationalContext(templateDataProvider);
+ TemplateDataProvider templateDataProviderInstance = (TemplateDataProvider) bm.getReference(templateDataProvider, TemplateDataProvider.class, context);
+ templateDataProviders.put(templateDataName, templateDataProviderInstance);
+ } else {
+ throw new IllegalStateException("TemplateDataProvider name cannot be empty in class: " + templateDataProvider.getBeanClass().getName());
+ }
+ }
+ }
+ log.info("End creating [" + (allTemplateProviders == null ? 0 : allTemplateProviders.size())+ "] template data providers");
+
}
+ public Set<KnowledgeBaseEventListener> getKbaseEventListenerSet()
+ {
+ return kbaseEventListenerSet;
+ }
+
+ public Map<String, WorkItemHandler> getWorkItemHandlers()
+ {
+ return workItemHandlers;
+ }
+
+ public Set<Object> getKsessionEventListenerSet()
+ {
+ return ksessionEventListenerSet;
+ }
+
+ public Map<String, TemplateDataProvider> getTemplateDataProviders()
+ {
+ return templateDataProviders;
+ }
+
}
Added: modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyDummyWorkItemHandler.java
===================================================================
--- modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyDummyWorkItemHandler.java (rev 0)
+++ modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyDummyWorkItemHandler.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -0,0 +1,24 @@
+package org.jboss.seam.drools.test.kbase;
+
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.jboss.seam.drools.qualifiers.WIHandler;
+
+@WIHandler(name="dummy1")
+public class MyDummyWorkItemHandler implements WorkItemHandler
+{
+
+ public void abortWorkItem(WorkItem arg0, WorkItemManager arg1)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void executeWorkItem(WorkItem arg0, WorkItemManager arg1)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Added: modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyKnowledgeSessionEventListener.java
===================================================================
--- modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyKnowledgeSessionEventListener.java (rev 0)
+++ modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyKnowledgeSessionEventListener.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -0,0 +1,62 @@
+package org.jboss.seam.drools.test.kbase;
+
+import org.drools.event.process.ProcessCompletedEvent;
+import org.drools.event.process.ProcessEventListener;
+import org.drools.event.process.ProcessNodeLeftEvent;
+import org.drools.event.process.ProcessNodeTriggeredEvent;
+import org.drools.event.process.ProcessStartedEvent;
+import org.jboss.seam.drools.qualifiers.KSessionEventListener;
+
+@KSessionEventListener
+public class MyKnowledgeSessionEventListener implements ProcessEventListener
+{
+
+ public void afterNodeLeft(ProcessNodeLeftEvent arg0)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void afterNodeTriggered(ProcessNodeTriggeredEvent arg0)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void afterProcessCompleted(ProcessCompletedEvent arg0)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void afterProcessStarted(ProcessStartedEvent arg0)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void beforeNodeLeft(ProcessNodeLeftEvent arg0)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void beforeNodeTriggered(ProcessNodeTriggeredEvent arg0)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void beforeProcessCompleted(ProcessCompletedEvent arg0)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void beforeProcessStarted(ProcessStartedEvent arg0)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Added: modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyOtherDummyWorkItemHandler.java
===================================================================
--- modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyOtherDummyWorkItemHandler.java (rev 0)
+++ modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MyOtherDummyWorkItemHandler.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -0,0 +1,24 @@
+package org.jboss.seam.drools.test.kbase;
+
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.jboss.seam.drools.qualifiers.WIHandler;
+
+@WIHandler(name="dummy2")
+public class MyOtherDummyWorkItemHandler implements WorkItemHandler
+{
+
+ public void abortWorkItem(WorkItem arg0, WorkItemManager arg1)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void executeWorkItem(WorkItem arg0, WorkItemManager arg1)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Added: modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MySecondKnowledgeBaseEventListener.java
===================================================================
--- modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MySecondKnowledgeBaseEventListener.java (rev 0)
+++ modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/MySecondKnowledgeBaseEventListener.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -0,0 +1,13 @@
+package org.jboss.seam.drools.test.kbase;
+
+import org.drools.event.knowledgebase.DefaultKnowledgeBaseEventListener;
+import org.drools.event.knowledgebase.KnowledgeBaseEventListener;
+import org.jboss.seam.drools.qualifiers.KBaseEventListener;
+
+@KBaseEventListener
+public class MySecondKnowledgeBaseEventListener extends DefaultKnowledgeBaseEventListener implements KnowledgeBaseEventListener
+{
+ public MySecondKnowledgeBaseEventListener() {
+ super();
+ }
+}
\ No newline at end of file
Added: modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/SimpleTemplateDataProvider.java
===================================================================
--- modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/SimpleTemplateDataProvider.java (rev 0)
+++ modules/drools/trunk/impl/src/test/java/org/jboss/seam/drools/test/kbase/SimpleTemplateDataProvider.java 2010-04-13 06:23:47 UTC (rev 12440)
@@ -0,0 +1,31 @@
+package org.jboss.seam.drools.test.kbase;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jboss.seam.drools.TemplateDataProvider;
+import org.jboss.seam.drools.qualifiers.TemplateData;
+
+@TemplateData(name="forkbasetest")
+public class SimpleTemplateDataProvider implements TemplateDataProvider
+{
+ private static Collection<Map<String, Object>> templateData = new ArrayList<Map<String,Object>>();
+ static {
+ Map<String, Object> m1 = new HashMap<String, Object>();
+ m1.put("name", "Tihomir");
+ templateData.add(m1);
+ Map<String, Object> m2 = new HashMap<String, Object>();
+ m2.put("name", "Stuart");
+ templateData.add(m2);
+ Map<String, Object> m3 = new HashMap<String, Object>();
+ m3.put("name", "Dan");
+ templateData.add(m3);
+ }
+ public Collection<Map<String, Object>> getTemplateData()
+ {
+ return templateData;
+ }
+
+}
Modified: modules/drools/trunk/impl/src/test/resources/org/jboss/seam/drools/test/kbase/KBaseTest-beans.xml
===================================================================
--- modules/drools/trunk/impl/src/test/resources/org/jboss/seam/drools/test/kbase/KBaseTest-beans.xml 2010-04-12 22:51:45 UTC (rev 12439)
+++ modules/drools/trunk/impl/src/test/resources/org/jboss/seam/drools/test/kbase/KBaseTest-beans.xml 2010-04-13 06:23:47 UTC (rev 12440)
@@ -10,7 +10,7 @@
<drools:knowledgeBuilderConfigPath>kbuilderconfig.properties</drools:knowledgeBuilderConfigPath>
<drools:knowledgeBaseConfigPath>kbaseconfig.properties</drools:knowledgeBaseConfigPath>
<drools:ruleResources>
- <s:value>classpath;kbasetest.drl;DRL</s:value>
+ <s:value>classpath;kbasetest.drl;DRL;forkbasetest</s:value>
</drools:ruleResources>
</drools:DroolsConfiguration>
Modified: modules/drools/trunk/impl/src/test/resources/org/jboss/seam/drools/test/kbase/kbasetest.drl
===================================================================
--- modules/drools/trunk/impl/src/test/resources/org/jboss/seam/drools/test/kbase/kbasetest.drl 2010-04-12 22:51:45 UTC (rev 12439)
+++ modules/drools/trunk/impl/src/test/resources/org/jboss/seam/drools/test/kbase/kbasetest.drl 2010-04-13 06:23:47 UTC (rev 12440)
@@ -1,6 +1,12 @@
+template header
+name
+
package org.jboss.seam.drools.kbase
-rule "dummy"
- then
- System.out.println("in dummy action");
+template "kbasetesttemplate"
+rule "say hello to @{name}"
+then
+ System.out.println("Hello @{name}");
end
+end template
+
16 years
Seam SVN: r12439 - in modules/security/trunk/core: src/main/java/org/jboss/seam/security/management and 1 other directory.
by seam-commits@lists.jboss.org
Author: shane.bryzak(a)jboss.com
Date: 2010-04-12 18:51:45 -0400 (Mon, 12 Apr 2010)
New Revision: 12439
Modified:
modules/security/trunk/core/pom.xml
modules/security/trunk/core/src/main/java/org/jboss/seam/security/management/JpaIdentityStore.java
Log:
temporary fix to get transactional entity manager
Modified: modules/security/trunk/core/pom.xml
===================================================================
--- modules/security/trunk/core/pom.xml 2010-04-12 22:51:41 UTC (rev 12438)
+++ modules/security/trunk/core/pom.xml 2010-04-12 22:51:45 UTC (rev 12439)
@@ -46,6 +46,11 @@
<groupId>org.jboss.seam.drools</groupId>
<artifactId>seam-drools-core</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>seam-persistence</artifactId>
+ </dependency>
<dependency>
<groupId>org.hibernate</groupId>
Modified: modules/security/trunk/core/src/main/java/org/jboss/seam/security/management/JpaIdentityStore.java
===================================================================
--- modules/security/trunk/core/src/main/java/org/jboss/seam/security/management/JpaIdentityStore.java 2010-04-12 22:51:41 UTC (rev 12438)
+++ modules/security/trunk/core/src/main/java/org/jboss/seam/security/management/JpaIdentityStore.java 2010-04-12 22:51:45 UTC (rev 12439)
@@ -12,13 +12,11 @@
import java.util.Set;
import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.RequestScoped;
-import javax.inject.Inject;
import javax.enterprise.inject.Instance;
import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
-import javax.persistence.PersistenceContext;
import org.jboss.seam.security.Role;
import org.jboss.seam.security.SimplePrincipal;
@@ -39,7 +37,7 @@
import org.jboss.seam.security.events.UserCreatedEvent;
import org.jboss.seam.security.util.AnnotatedBeanProperty;
import org.jboss.seam.security.util.TypedBeanProperty;
-
+import org.jboss.seam.transaction.Transactional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -48,8 +46,7 @@
*
* @author Shane Bryzak
*/
-@ApplicationScoped
-public class JpaIdentityStore implements IdentityStore, Serializable
+public @ApplicationScoped @Transactional class JpaIdentityStore implements IdentityStore, Serializable
{
private static final long serialVersionUID = 1171875389743972646L;
@@ -57,7 +54,7 @@
private Logger log = LoggerFactory.getLogger(JpaIdentityStore.class);
- @Inject EntityManager entityManager;
+ @Inject Instance<EntityManager> entityManagerInstance;
@Inject Instance<PasswordHash> passwordHashInstance;
@@ -205,7 +202,7 @@
manager.fireEvent(new PrePersistUserEvent(user));
- entityManager.persist(user);
+ getEntityManager().persist(user);
manager.fireEvent(new UserCreatedEvent(user));
@@ -269,7 +266,7 @@
throw new NoSuchUserException("Could not delete, user '" + name + "' does not exist");
}
- entityManager.remove(user);
+ getEntityManager().remove(user);
return true;
}
@@ -361,7 +358,7 @@
manager.fireEvent(new PrePersistUserRoleEvent(xref));
- ((Collection<Object>) getUserRolesProperty().getValue(user)).add(entityManager.merge(xref));
+ ((Collection<Object>) getUserRolesProperty().getValue(user)).add(getEntityManager().merge(xref));
}
catch (Exception ex)
{
@@ -498,7 +495,7 @@
Object instance = getRoleEntityClass().newInstance();
getRoleNameProperty().setValue(instance, role);
- entityManager.persist(instance);
+ getEntityManager().persist(instance);
return true;
}
@@ -525,7 +522,7 @@
if (getXrefEntityClass() != null)
{
- entityManager.createQuery("delete " + getXrefEntityClass().getName() + " where role = :role")
+ getEntityManager().createQuery("delete " + getXrefEntityClass().getName() + " where role = :role")
.setParameter("role", roleToDelete)
.executeUpdate();
}
@@ -544,7 +541,7 @@
removeRoleFromGroup(r, role);
}
- entityManager.remove(roleToDelete);
+ getEntityManager().remove(roleToDelete);
return true;
}
@@ -825,8 +822,8 @@
{
try
{
- Object user = entityManager.createQuery(
- "select u from " + getUserEntityClass().getName() + " u where " +
+ Object user = getEntityManager().createQuery(
+ "select u from " + getUserEntityClass().getName() + " u where u." +
getUserPrincipalProperty().getName() + " = :username")
.setParameter("username", username)
.getSingleResult();
@@ -859,7 +856,7 @@
{
try
{
- Object value = entityManager.createQuery(
+ Object value = getEntityManager().createQuery(
"select r from " + getRoleEntityClass().getName() + " r where " + getRoleNameProperty().getName() +
" = :role")
.setParameter("role", role)
@@ -876,7 +873,7 @@
@SuppressWarnings("unchecked")
public List<String> listUsers()
{
- return entityManager.createQuery(
+ return getEntityManager().createQuery(
"select u." + getUserPrincipalProperty().getName() + " from " +
getUserEntityClass().getName() + " u")
.getResultList();
@@ -885,7 +882,7 @@
@SuppressWarnings("unchecked")
public List<String> listUsers(String filter)
{
- return entityManager.createQuery(
+ return getEntityManager().createQuery(
"select u." + getUserPrincipalProperty().getName() + " from " + getUserEntityClass().getName() +
" u where lower(" + getUserPrincipalProperty().getName() + ") like :username")
.setParameter("username", "%" + (filter != null ? filter.toLowerCase() : "") +
@@ -896,7 +893,7 @@
@SuppressWarnings("unchecked")
public List<String> listRoles()
{
- return entityManager.createQuery(
+ return getEntityManager().createQuery(
"select r." + getRoleNameProperty().getName() + " from " +
getRoleEntityClass().getName() + " r").getResultList();
}
@@ -925,7 +922,7 @@
if (getXrefEntityClass() == null)
{
- return entityManager.createQuery("select u." +
+ return getEntityManager().createQuery("select u." +
getUserPrincipalProperty().getName() +
" from " + getUserEntityClass().getName() + " u where :role member of u." +
getUserRolesProperty().getName())
@@ -934,7 +931,7 @@
}
else
{
- List<?> xrefs = entityManager.createQuery("select x from " +
+ List<?> xrefs = getEntityManager().createQuery("select x from " +
getXrefEntityClass().getName() + " x where x." +
getXrefRoleProperty().getName() + " = :role")
.setParameter("role", roleEntity)
@@ -960,7 +957,7 @@
{
Object roleEntity = lookupRole(role);
- return entityManager.createQuery("select r." +
+ return getEntityManager().createQuery("select r." +
getRoleNameProperty().getName() +
" from " + getRoleEntityClass().getName() + " r where :role member of r." +
getRoleGroupsProperty().getName())
@@ -989,9 +986,16 @@
roleQuery.append(" = false");
}
- return entityManager.createQuery(roleQuery.toString()).getResultList();
+ return getEntityManager().createQuery(roleQuery.toString()).getResultList();
}
+ protected EntityManager getEntityManager()
+ {
+ EntityManager em = entityManagerInstance.get();
+ em.joinTransaction();
+ return em;
+ }
+
protected PasswordHash getPasswordHash()
{
return passwordHashInstance.get();
16 years
Seam SVN: r12438 - in modules/security/trunk/examples/seamspace/src/main: java/org/jboss/seam/security/examples/seamspace/util and 2 other directories.
by seam-commits@lists.jboss.org
Author: shane.bryzak(a)jboss.com
Date: 2010-04-12 18:51:41 -0400 (Mon, 12 Apr 2010)
New Revision: 12438
Removed:
modules/security/trunk/examples/seamspace/src/main/webapp/userdetail.page.xml
Modified:
modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/ContentAction.java
modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/FriendAction.java
modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/ImagePermission.java
modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/util/EntityManagerProducer.java
modules/security/trunk/examples/seamspace/src/main/webapp/WEB-INF/beans.xml
modules/security/trunk/examples/seamspace/src/main/webapp/WEB-INF/faces-config.xml
modules/security/trunk/examples/seamspace/src/main/webapp/template.xhtml
modules/security/trunk/examples/seamspace/src/main/webapp/userdetail.xhtml
modules/security/trunk/examples/seamspace/src/main/webapp/usermanager.xhtml
Log:
fixed user management features
Modified: modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/ContentAction.java
===================================================================
--- modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/ContentAction.java 2010-04-12 21:35:13 UTC (rev 12437)
+++ modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/ContentAction.java 2010-04-12 22:51:41 UTC (rev 12438)
@@ -12,6 +12,7 @@
public class ContentAction
{
@Inject EntityManager entityManager;
+
@Inject Identity identity;
public MemberImage getImage(int imageId)
Modified: modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/FriendAction.java
===================================================================
--- modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/FriendAction.java 2010-04-12 21:35:13 UTC (rev 12437)
+++ modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/FriendAction.java 2010-04-12 22:51:41 UTC (rev 12438)
@@ -10,7 +10,6 @@
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
-//import org.jboss.seam.international.StatusMessages;
import org.jboss.seam.security.Identity;
import org.jboss.seam.security.examples.seamspace.model.FriendComment;
import org.jboss.seam.security.examples.seamspace.model.Member;
Modified: modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/ImagePermission.java
===================================================================
--- modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/ImagePermission.java 2010-04-12 21:35:13 UTC (rev 12437)
+++ modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/action/ImagePermission.java 2010-04-12 22:51:41 UTC (rev 12438)
@@ -34,6 +34,7 @@
private List<Member> availableFriends;
@Inject IdentityManager identityManager;
+
@Inject PermissionManager permissionManager;
@Inject EntityManager entityManager;
Modified: modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/util/EntityManagerProducer.java
===================================================================
--- modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/util/EntityManagerProducer.java 2010-04-12 21:35:13 UTC (rev 12437)
+++ modules/security/trunk/examples/seamspace/src/main/java/org/jboss/seam/security/examples/seamspace/util/EntityManagerProducer.java 2010-04-12 22:51:41 UTC (rev 12438)
@@ -3,7 +3,6 @@
import java.io.Serializable;
import javax.enterprise.context.ConversationScoped;
-import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
Modified: modules/security/trunk/examples/seamspace/src/main/webapp/WEB-INF/beans.xml
===================================================================
--- modules/security/trunk/examples/seamspace/src/main/webapp/WEB-INF/beans.xml 2010-04-12 21:35:13 UTC (rev 12437)
+++ modules/security/trunk/examples/seamspace/src/main/webapp/WEB-INF/beans.xml 2010-04-12 22:51:41 UTC (rev 12438)
@@ -16,4 +16,8 @@
</idm:identityStore>
</idm:IdentityManager-->
+ <interceptors>
+ <class>org.jboss.seam.transaction.JtaTxInterceptor</class>
+ </interceptors>
+
</beans>
\ No newline at end of file
Modified: modules/security/trunk/examples/seamspace/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- modules/security/trunk/examples/seamspace/src/main/webapp/WEB-INF/faces-config.xml 2010-04-12 21:35:13 UTC (rev 12437)
+++ modules/security/trunk/examples/seamspace/src/main/webapp/WEB-INF/faces-config.xml 2010-04-12 22:51:41 UTC (rev 12438)
@@ -8,5 +8,30 @@
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<!-- Write your navigation rules here. You are encouraged to use CDI for creating @Named managed beans. -->
+
+ <navigation-rule>
+ <from-view-id>/usermanager.xhtml</from-view-id>
+
+ <navigation-case>
+ <from-action>#{userAction.createUser}</from-action>
+ <if>#{true}</if>
+ <to-view-id>/userdetail.xhtml</to-view-id>
+ <redirect/>
+ </navigation-case>
+
+ </navigation-rule>
+
+ <navigation-rule>
+ <from-view-id>/userdetail.xhtml</from-view-id>
+
+ <navigation-case>
+ <from-action>#{userAction.save}</from-action>
+ <from-outcome>success</from-outcome>
+ <if>#{true}</if>
+ <to-view-id>/usermanager.xhtml</to-view-id>
+ <redirect/>
+ </navigation-case>
+
+ </navigation-rule>
</faces-config>
Modified: modules/security/trunk/examples/seamspace/src/main/webapp/template.xhtml
===================================================================
--- modules/security/trunk/examples/seamspace/src/main/webapp/template.xhtml 2010-04-12 21:35:13 UTC (rev 12437)
+++ modules/security/trunk/examples/seamspace/src/main/webapp/template.xhtml 2010-04-12 22:51:41 UTC (rev 12438)
@@ -17,21 +17,24 @@
<div id="header">
<div class="headerRight">
<div class="headerMenu">
-
- <ui:fragment rendered="#{identity.loggedIn}">
- <h:link id="profile" outcome="/profile.xhtml" value="My Profile" propagation="none">
- <f:param name="name" value="#{authenticatedMember.memberName}"/>
- </h:link>
- <h:outputText styleClass="divider" value=" | "/>
- </ui:fragment>
-
- <ui:fragment rendered="#{identity.hasRole('admin')}">
- <h:link id="security" outcome="/security.xhtml" value="Security" propagation="none"/>
- <h:outputText styleClass="divider" value=" | "/>
- </ui:fragment>
-
- <h:link id="logout" action="#{identity.logout}" value="Log out" rendered="#{identity.loggedIn}"/>
- <h:outputLink id="login" value="home.seam" rendered="#{not identity.loggedIn}">Log in</h:outputLink>
+
+ <h:form>
+ <ui:fragment rendered="#{identity.loggedIn}">
+ <h:link id="profile" outcome="/profile.xhtml" value="My Profile" propagation="none">
+ <f:param name="name" value="#{authenticatedMember.memberName}"/>
+ </h:link>
+ <h:outputText styleClass="divider" value=" | "/>
+ </ui:fragment>
+
+ <ui:fragment rendered="#{identity.hasRole('admin')}">
+ <h:link id="security" outcome="/security.xhtml" value="Security" propagation="none"/>
+ <h:outputText styleClass="divider" value=" | "/>
+ </ui:fragment>
+
+ <h:commandLink id="logout" action="#{identity.logout}" value="Log out" rendered="#{identity.loggedIn}"/>
+
+ <h:outputLink id="login" value="home.seam" rendered="#{not identity.loggedIn}">Log in</h:outputLink>
+ </h:form>
</div>
<br style="clear:both"/>
<h:form>
Deleted: modules/security/trunk/examples/seamspace/src/main/webapp/userdetail.page.xml
===================================================================
--- modules/security/trunk/examples/seamspace/src/main/webapp/userdetail.page.xml 2010-04-12 21:35:13 UTC (rev 12437)
+++ modules/security/trunk/examples/seamspace/src/main/webapp/userdetail.page.xml 2010-04-12 22:51:41 UTC (rev 12438)
@@ -1,9 +0,0 @@
-<page xmlns="http://jboss.com/products/seam/pages"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.2.xsd">
- <navigation from-action="#{userAction.save}">
- <rule if-outcome="success">
- <redirect view-id="/usermanager.xhtml"/>
- </rule>
- </navigation>
-</page>
Modified: modules/security/trunk/examples/seamspace/src/main/webapp/userdetail.xhtml
===================================================================
--- modules/security/trunk/examples/seamspace/src/main/webapp/userdetail.xhtml 2010-04-12 21:35:13 UTC (rev 12437)
+++ modules/security/trunk/examples/seamspace/src/main/webapp/userdetail.xhtml 2010-04-12 22:51:41 UTC (rev 12438)
@@ -54,7 +54,7 @@
<h:outputLabel for="roles" value="Member of" styleClass="formLabel"/>
<div class="selectMany">
<h:selectManyCheckbox id="roles" value="#{userAction.roles}" layout="pageDirection" styleClass="roles">
- <!--s:selectItems value="#{identityManager.grantableRoles}" var="role" label="#{role}"/-->
+ <f:selectItems value="#{identityManager.grantableRoles}" var="role" label="#{role}"/>
</h:selectManyCheckbox>
</div>
<div class="validationError"><h:message for="roles"/></div>
Modified: modules/security/trunk/examples/seamspace/src/main/webapp/usermanager.xhtml
===================================================================
--- modules/security/trunk/examples/seamspace/src/main/webapp/usermanager.xhtml 2010-04-12 21:35:13 UTC (rev 12437)
+++ modules/security/trunk/examples/seamspace/src/main/webapp/usermanager.xhtml 2010-04-12 22:51:41 UTC (rev 12438)
@@ -24,7 +24,9 @@
<h2>User Manager</h2>
- <h:button id="newUser" outcome="userdetail.xhtml" action="#{userAction.createUser}" styleClass="newuser" rendered="#{identity.hasPermission('seam.account', 'create')}"/>
+ <h:form>
+ <h:commandButton id="newUser" action="#{userAction.createUser}" styleClass="newuser" rendered="#{identity.hasPermission('seam.account', 'create')}"/>
+ </h:form>
<h:dataTable
id="threads"
16 years
Seam SVN: r12437 - modules/xml/trunk/docs/en-US.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-04-12 17:35:13 -0400 (Mon, 12 Apr 2010)
New Revision: 12437
Added:
modules/xml/trunk/docs/en-US/xml-introduction.xml
Log:
begining of introduction chapter to seam-xml
Added: modules/xml/trunk/docs/en-US/xml-introduction.xml
===================================================================
--- modules/xml/trunk/docs/en-US/xml-introduction.xml (rev 0)
+++ modules/xml/trunk/docs/en-US/xml-introduction.xml 2010-04-12 21:35:13 UTC (rev 12437)
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+
+<chapter id="introduction">
+ <title>Seam XML Introduction</title>
+
+ <para>Seam provides a method for configuring JSR-299 beans using XML. Using XML it is possible to add new beans, override existing beans, and add
+ extra configuration to existing beans. The default is to add a new bean.
+ </para>
+
+ <section>
+ <title>Getting Started</title>
+ <para>No special configuration is required to use seam-xml, all that is required is to include the jar file and the weld extensions jar in your deployment. </para>
+ <para>The first thing we need is some xml files, by default these are discovered from the classpath in the following locations:</para>
+ <itemizedlist>
+ <listitem><literal>/META-INF/beans.xml</literal></listitem>
+ <listitem><literal>/WEB-INF/classes/seam-beans.xml</literal></listitem>
+ <listitem><literal>/META-INF/seam-beans.xml</literal></listitem>
+ <listitem><literal>/seam-beans.xml</literal></listitem>
+ </itemizedlist>
+ <important>
+ <para>It is currently not possible to load beans.xml from WEB-INF. This will be addressed before the final release of seam-xml.</para>
+ </important>
+
+ <para>The <literal>beans.xml</literal> file is the preferred way of configuring beans via XML, however it may be possible that some JSR-299 implementations will not allow this,
+ so <literal>seam-beans.xml</literal> is provided as an alternative. </para>
+
+ <para>Let's start with a simple example. Say we have the following classes:</para>
+ <programlisting role="JAVA">
+ <![CDATA[public class Robot
+{
+ @Inject RobotArm leftArm;
+
+ @Inject RobotArm rightArm;
+}
+
+public class RobotArm
+{
+ String attchment = "welder";
+
+ public void doStuff()
+ {
+ //do robot things...
+ }
+}
+
+@Retention(RUNTIME)
+public @Interface LeftArm{}
+
+@Retention(RUNTIME)
+public @Interface RightArm{}
+ ]]>
+ </programlisting>
+ <para>This is all well and good, however at some point in the future we decide that our robot is no longer needed for welding, instead it needs a plasma cutter in it's left hand and a
+ vice in its right hand. Rather than modifying the class files, we decide to configure this up with xml:</para>
+ <programlistingco>
+ <areaspec>
+ <area id="namepsace-declaration-seam" coords="5"/>
+ <area id="namepsace-declaration-robots" coords="6"/>
+ <area id="right-arm-qualifier" coords="9"/>
+ <area id="robot-right-arm" coords="16"/>
+ <area id="overrrides" coords="17"/>
+ <area id="left-arm-applied-qualifier" coords="18"/>
+ <area id="left-arm-set-length" coords="19"/>
+ <area id="specializes" coords="29"/>
+ <area id="left-arm-injected" coords="30"/>
+ </areaspec>
+ <programlisting role="XML">
+ <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:s="urn:java:seam:core"
+ xmlns:r="urn:java:org.example.robots">
+
+ <r:RightArm>
+ <s:Qualifier/>
+ </r:RightArm>
+
+ <r:LeftArm>
+ <s:Qualifier/>
+ </r:LeftArm>
+
+ <r:RobotArm>
+ <s:overrides/>
+ <r:LeftArm/>
+ <r:attchment>Plasma Cutter</r:attchment>
+ </r:RobotArm>
+
+ <r:RobotArm>
+ <s:overrides/>
+ <r:RightArm/>
+ <r:attchment>Vice</r:attchment>
+ </r:RobotArm>
+
+ <r:Robot>
+ <s:specializes/>
+ <r:leftArm>
+ <r:LeftArm/>
+ </r:leftArm>
+ <r:rightArm>
+ <r:RightArm/>
+ </r:rightArm>
+ </r:Robot>
+
+</beans>
+ ]]>
+ </programlisting>
+ <calloutlist>
+ <callout arearefs="namepsace-declaration-seam">
+ <para>The namespace <literal>urn:java:seam:core</literal> is seam-xml's root namespace. More on this later</para>
+ </callout>
+ <callout arearefs="namepsace-declaration-robots">
+ <para>The namespace <literal>urn:java:org.example.robots</literal> corresponds to the package <literal>org.example.robots</literal>, where our robot classes live.</para>
+ </callout>
+ <callout arearefs="right-arm-qualifier">
+ <para>This declares the <literal>@RightArm</literal> annotation to be a qualifier. The <literal><r:RightArm></literal> declaration resolves to
+ <literal>org.example.robots.RightArm</literal> and the <literal><s:Qualifier></literal> declaration tells seam-xml to register this class as a qualifier.</para>
+ </callout>
+ <callout arearefs="robot-right-arm">
+ <para>The <literal><r:RobotArm></literal> declaration configures an instance of our <literal>RobotArm</literal> class.</para>
+ </callout>
+ <callout arearefs="overrrides">
+ <para>The <literal><s:overrides></literal> tells CDI that this bean overrides the default bean. The existing <literal>RobotArm</literal> definition will not be
+ installed, only <literal>RobotArm</literal> beans that are configured via XML.</para>
+ </callout>
+ <callout arearefs="left-arm-applied-qualifier">
+ <para>The <literal><r:LeftArm></literal> element applies the <literal>@LeftArm</literal> annotation to the enclosing element, in this case out <literal>RobotArm</literal>
+ class (remember we declared <literal>@LeftArm</literal> to be a qualifier). In seam-xml an element that resolves to an annotation means 'apply this annotation to the parent element'.</para>
+ </callout>
+ <callout arearefs="left-arm-set-length">
+ <para>This sets the arm's attachment field to the string <literal>Plasma Cutter</literal></para>
+ </callout>
+ <callout arearefs="specializes">
+ <para>The <literal><s:specializes></literal> is similar to <literal><s:overrides></literal>. The difference is that <literal><s:specializes></literal>
+ beans have the annotated from the java class merged with the annotations in XML.</para>
+ </callout>
+ <callout arearefs="left-arm-injected">
+ <para>This configures a qualifier on the injection point. There is no need for an <literal><s:Inject></literal> as it is present on the underlying class.</para>
+ </callout>
+
+ </calloutlist>
+ </programlistingco>
+
+ </section>
+
+</chapter>
Property changes on: modules/xml/trunk/docs/en-US/xml-introduction.xml
___________________________________________________________________
Name: svn:executable
+ *
16 years
Seam SVN: r12436 - in modules/xml/trunk: impl/src/main/java/org/jboss/seam/xml/bootstrap and 1 other directories.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-04-12 17:28:51 -0400 (Mon, 12 Apr 2010)
New Revision: 12436
Added:
modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlProcessAnnotatedType.java
modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/core/XmlConfiguredBean.java
Modified:
modules/xml/trunk/docs/en-US/master.xml
modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
Log:
fire ProcessAnnotatedType for XML configured beans. This is temporary until WELD-485 is fixed
Modified: modules/xml/trunk/docs/en-US/master.xml
===================================================================
--- modules/xml/trunk/docs/en-US/master.xml 2010-04-12 21:15:52 UTC (rev 12435)
+++ modules/xml/trunk/docs/en-US/master.xml 2010-04-12 21:28:51 UTC (rev 12436)
@@ -6,6 +6,7 @@
<toc/>
<title>Seam XML Configuration</title>
+ <xi:include href="xml-introduction.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="xml-general.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
</book>
\ No newline at end of file
Modified: modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
===================================================================
--- modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java 2010-04-12 21:15:52 UTC (rev 12435)
+++ modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java 2010-04-12 21:28:51 UTC (rev 12436)
@@ -18,12 +18,15 @@
import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.AfterBeanDiscovery;
import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.BeforeBeanDiscovery;
import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.ProcessAnnotatedType;
import javax.enterprise.inject.spi.ProcessInjectionTarget;
+import javax.enterprise.util.AnnotationLiteral;
import org.jboss.seam.xml.core.BeanResult;
+import org.jboss.seam.xml.core.XmlConfiguredBean;
import org.jboss.seam.xml.core.XmlId;
import org.jboss.seam.xml.core.XmlResult;
import org.jboss.seam.xml.fieldset.FieldValueObject;
@@ -59,7 +62,7 @@
List<Exception> errors = new ArrayList<Exception>();
- Set<XmlProcessAnnotatedType<?>> queuedEvents = new HashSet<XmlProcessAnnotatedType<?>>();
+ Set<XmlProcessAnnotatedType> queuedEvents = new HashSet<XmlProcessAnnotatedType>();
/**
* This is the entry point for the extension
@@ -127,9 +130,12 @@
}
for (BeanResult<?> bb : r.getBeans())
{
-
+ bb.getBuilder().addToClass(new AnnotationLiteral<XmlConfiguredBean>()
+ {
+ });
AnnotatedType<?> tp = bb.getBuilder().create();
log.info("Adding XML definied bean: " + tp.getJavaClass().getName());
+ queuedEvents.add(new XmlProcessAnnotatedType(tp));
event.addAnnotatedType(tp);
}
@@ -138,13 +144,22 @@
}
}
- public <T> void processAnotated(@Observes ProcessAnnotatedType<T> event)
+ public <T> void processAnotated(@Observes ProcessAnnotatedType<T> event, BeanManager manager)
{
- // do not re-process events that we fired
- if (event instanceof XmlProcessAnnotatedType<?>)
+ if (event.getAnnotatedType().isAnnotationPresent(XmlConfiguredBean.class))
{
return;
}
+ // first see if we should fire queued events
+ if (!queuedEvents.isEmpty())
+ {
+ for (XmlProcessAnnotatedType i : queuedEvents)
+ {
+ manager.fireEvent(i);
+ }
+ queuedEvents.clear();
+ }
+
// veto implementation
if (veto.contains(event.getAnnotatedType().getJavaClass()))
{
Added: modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlProcessAnnotatedType.java
===================================================================
--- modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlProcessAnnotatedType.java (rev 0)
+++ modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlProcessAnnotatedType.java 2010-04-12 21:28:51 UTC (rev 12436)
@@ -0,0 +1,29 @@
+package org.jboss.seam.xml.bootstrap;
+
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+
+public class XmlProcessAnnotatedType implements ProcessAnnotatedType
+{
+ final AnnotatedType annotatedType;
+
+ XmlProcessAnnotatedType(AnnotatedType annotatedType)
+ {
+ this.annotatedType = annotatedType;
+ }
+
+ public AnnotatedType getAnnotatedType()
+ {
+ return annotatedType;
+ }
+
+ public void setAnnotatedType(AnnotatedType type)
+ {
+ // nop for now
+ }
+
+ public void veto()
+ {
+ // nop for now
+ }
+}
Added: modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/core/XmlConfiguredBean.java
===================================================================
--- modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/core/XmlConfiguredBean.java (rev 0)
+++ modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/core/XmlConfiguredBean.java 2010-04-12 21:28:51 UTC (rev 12436)
@@ -0,0 +1,16 @@
+package org.jboss.seam.xml.core;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * marker for XML configured annotated types
+ *
+ * @author stuart
+ *
+ */
+(a)Retention(RetentionPolicy.RUNTIME)
+public @interface XmlConfiguredBean
+{
+
+}
16 years
Seam SVN: r12435 - in modules/xml/trunk/impl/src: main/java/org/jboss/seam/xml/bootstrap and 3 other directories.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-04-12 17:15:52 -0400 (Mon, 12 Apr 2010)
New Revision: 12435
Removed:
modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/annotations/
modules/xml/trunk/impl/src/test/java/org/jboss/seam/xml/test/xmlconfigured/
modules/xml/trunk/impl/src/test/resources/org/jboss/seam/xml/test/xmlconfigured/
Modified:
modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
Log:
remove @XmlConfigured, use @veto from weld-extensions instead
Modified: modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
===================================================================
--- modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java 2010-04-12 20:34:47 UTC (rev 12434)
+++ modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java 2010-04-12 21:15:52 UTC (rev 12435)
@@ -23,7 +23,6 @@
import javax.enterprise.inject.spi.ProcessAnnotatedType;
import javax.enterprise.inject.spi.ProcessInjectionTarget;
-import org.jboss.seam.xml.annotations.XmlConfigured;
import org.jboss.seam.xml.core.BeanResult;
import org.jboss.seam.xml.core.XmlId;
import org.jboss.seam.xml.core.XmlResult;
@@ -60,6 +59,8 @@
List<Exception> errors = new ArrayList<Exception>();
+ Set<XmlProcessAnnotatedType<?>> queuedEvents = new HashSet<XmlProcessAnnotatedType<?>>();
+
/**
* This is the entry point for the extension
*/
@@ -139,6 +140,11 @@
public <T> void processAnotated(@Observes ProcessAnnotatedType<T> event)
{
+ // do not re-process events that we fired
+ if (event instanceof XmlProcessAnnotatedType<?>)
+ {
+ return;
+ }
// veto implementation
if (veto.contains(event.getAnnotatedType().getJavaClass()))
{
@@ -146,12 +152,6 @@
event.veto();
return;
}
- if(event.getAnnotatedType().isAnnotationPresent(XmlConfigured.class))
- {
- log.info("Preventing installation of @XmlConfigured bean: " + event.getAnnotatedType().getJavaClass().getName());
- event.veto();
- return;
- }
boolean found = false;
NewAnnotatedTypeBuilder builder = new NewAnnotatedTypeBuilder(event.getAnnotatedType());
for (XmlResult r : results)
Modified: modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
===================================================================
--- modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-04-12 20:34:47 UTC (rev 12434)
+++ modules/xml/trunk/impl/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-04-12 21:15:52 UTC (rev 12435)
@@ -352,7 +352,6 @@
{
throw new XmlConfigurationException("<type> must have a single child element", rb.getDocument(), rb.getLineno());
}
-
type.overrideMethodParameterType(item.getMethod(), overridenTypes.get(0).getJavaClass(), param);
}
}
16 years
Seam SVN: r12434 - in modules/servlet/trunk/src/main: resources/META-INF and 1 other directory.
by seam-commits@lists.jboss.org
Author: nickarls
Date: 2010-04-12 16:34:47 -0400 (Mon, 12 Apr 2010)
New Revision: 12434
Added:
modules/servlet/trunk/src/main/resources/META-INF/web-fragment.xml
Modified:
modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/event/ServletEventListener.java
Log:
Use web-fragment for servlet registration
Modified: modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/event/ServletEventListener.java
===================================================================
--- modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/event/ServletEventListener.java 2010-04-12 09:18:59 UTC (rev 12433)
+++ modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/event/ServletEventListener.java 2010-04-12 20:34:47 UTC (rev 12434)
@@ -63,13 +63,12 @@
import org.slf4j.LoggerFactory;
/**
- * A self-registering web-listener that propagates the events to the current CDI
+ * A servlet listener that propagates the events to the current CDI
* Bean Manager event queue
*
* @author Nicklas Karlsson
*
*/
-@WebListener
public class ServletEventListener implements HttpSessionActivationListener, HttpSessionAttributeListener, HttpSessionBindingListener, HttpSessionListener, ServletContextListener, ServletContextAttributeListener, ServletRequestListener, ServletRequestAttributeListener, AsyncListener
{
@Inject
Added: modules/servlet/trunk/src/main/resources/META-INF/web-fragment.xml
===================================================================
--- modules/servlet/trunk/src/main/resources/META-INF/web-fragment.xml (rev 0)
+++ modules/servlet/trunk/src/main/resources/META-INF/web-fragment.xml 2010-04-12 20:34:47 UTC (rev 12434)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-fragment version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd">
+ <name>seamservlet</name>
+<!-- <ordering>-->
+<!-- <after>-->
+<!-- <name>weld</name>-->
+<!-- </after>-->
+<!-- </ordering>-->
+ <listener>
+ <listener-class>org.jboss.seam.servlet.event.ServletEventListener</listener-class>
+ </listener>
+
+</web-fragment>
16 years
Seam SVN: r12433 - modules/servlet/trunk/src/main/java/org/jboss/seam/servlet.
by seam-commits@lists.jboss.org
Author: nickarls
Date: 2010-04-12 05:18:59 -0400 (Mon, 12 Apr 2010)
New Revision: 12433
Modified:
modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpUserArtifacts.java
Log:
Narrow scope of user http artifacts
Modified: modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpUserArtifacts.java
===================================================================
--- modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpUserArtifacts.java 2010-04-12 09:17:44 UTC (rev 12432)
+++ modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpUserArtifacts.java 2010-04-12 09:18:59 UTC (rev 12433)
@@ -23,7 +23,7 @@
import java.io.Serializable;
-import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
@@ -44,7 +44,7 @@
* @author Nicklas Karlsson
*
*/
-@SessionScoped
+@RequestScoped
public class HttpUserArtifacts implements Serializable
{
private static final long serialVersionUID = 5191073522575178427L;
@@ -59,6 +59,7 @@
{
log.trace("Servlet request initialized with event #0", e);
request = (HttpServletRequest) e.getServletRequest();
+ session = request.getSession();
}
protected void requestDestroyed(@Observes @Destroyed ServletRequestEvent e)
16 years
Seam SVN: r12432 - in branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen: utils and 1 other directory.
by seam-commits@lists.jboss.org
Author: jharting
Date: 2010-04-12 05:17:44 -0400 (Mon, 12 Apr 2010)
New Revision: 12432
Modified:
branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/HotDeploymentNewFormTest.java
branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/NewActionTest.java
branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/NewFormTest.java
branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/utils/SeamGenAdapter.java
Log:
JBPAPP-3861
Modified: branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/HotDeploymentNewFormTest.java
===================================================================
--- branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/HotDeploymentNewFormTest.java 2010-04-12 08:04:47 UTC (rev 12431)
+++ branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/HotDeploymentNewFormTest.java 2010-04-12 09:17:44 UTC (rev 12432)
@@ -22,6 +22,9 @@
package org.jboss.seam.test.functional.seamgen;
import static org.testng.Assert.assertTrue;
+import org.jboss.seam.test.functional.seamgen.ComponentHolder;
+import org.jboss.seam.test.functional.seamgen.SeamGenTest;
+
import org.testng.annotations.Test;
/**
@@ -37,7 +40,12 @@
@Override
protected void prepareData()
{
- newComponentProperties = new String[] { "hi", "HiLocal", "Hi", "hi", "hiPage" };
+ // war version
+ if(SeamGenTest.WAR)
+ newComponent = new ComponentHolder("hi", null, "Hi", "hi", "hiPage");
+ // ear version
+ else
+ newComponent = new ComponentHolder("hi", "HiLocal", "Hi", "hi", "hiPage");
}
@Override
Modified: branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/NewActionTest.java
===================================================================
--- branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/NewActionTest.java 2010-04-12 08:04:47 UTC (rev 12431)
+++ branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/NewActionTest.java 2010-04-12 09:17:44 UTC (rev 12432)
@@ -21,6 +21,12 @@
*/
package org.jboss.seam.test.functional.seamgen;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.seam.test.functional.seamgen.ComponentHolder;
+import org.jboss.seam.test.functional.seamgen.SeamGenTest;
+
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -28,29 +34,30 @@
/**
* This class verifies functionality of "new-action command".
+ *
* @author Jozef Hartinger
- *
+ *
*/
public class NewActionTest extends SeleniumSeamGenTest
{
- protected String[] newComponentProperties;
-
+ protected ComponentHolder newComponent;
+
@BeforeClass
- public void createNewAction() throws InterruptedException {
+ public void createNewAction() throws InterruptedException
+ {
prepareData();
generateNewComponent();
deployNewComponent();
waitForAppToDeploy(getComponentPath(), FOOTER);
}
-
@Test(groups = { "newActionGroup" }, dependsOnGroups = { "newProjectGroup" })
public void testNewComponent()
{
- String form = "id=" + newComponentProperties[0] + "Form";
- String button = form + ":" + newComponentProperties[3];
-
+ String form = "id=" + newComponent.name + "Form";
+ String button = form + ":" + newComponent.actionMethod;
+
browser.open(getComponentPath());
assertTrue(browser.isElementPresent(FOOTER), "Footer not found.");
@@ -60,23 +67,86 @@
browser.clickAndWait(button);
assertTrue(browser.isElementPresent(MESSAGES));
- assertTrue(browser.getText(MESSAGES).contains(newComponentProperties[3]));
+ assertTrue(browser.getText(MESSAGES).contains(newComponent.actionMethod));
}
public void generateNewComponent()
{
- seamGen.newAction(newComponentProperties);
+ seamGen.newAction(newComponent.asArray());
}
-
- protected void prepareData() {
- newComponentProperties = new String[]{ "ping", "PingLocal", "Ping", "ping", "pingPage" };
+
+ protected void prepareData()
+ {
+ // war version
+ if (SeamGenTest.WAR)
+ newComponent = new ComponentHolder("ping", null, "Ping", "ping", "pingPage");
+ // ear version
+ else
+ newComponent = new ComponentHolder("ping", "PingLocal", "Ping", "ping", "pingPage");
}
-
- public String getComponentPath() {
- return "/" + APP_NAME + "/" + newComponentProperties[4] + ".seam";
+
+ public String getComponentPath()
+ {
+ return "/" + APP_NAME + "/" + newComponent.pageName + ".seam";
}
-
- protected void deployNewComponent() {
+
+ protected void deployNewComponent()
+ {
seamGen.restart();
}
}
+
+/**
+ * Holds component input for seam-gen
+ *
+ * @author kpiwko
+ *
+ */
+class ComponentHolder
+{
+ String name;
+ String localInterface;
+ String beanClass;
+ String actionMethod;
+ String pageName;
+
+ /**
+ * Constructs new component holder
+ *
+ * @param name Name of component
+ * @param localInterface Name of local interface
+ * @param beanClass Name of bean class
+ * @param actionMethod Name of action method
+ * @param pageName Name of Seam page
+ */
+ public ComponentHolder(String name, String localInterface, String beanClass, String actionMethod, String pageName)
+ {
+ this.name = name;
+ this.localInterface = localInterface;
+ this.beanClass = beanClass;
+ this.actionMethod = actionMethod;
+ this.pageName = pageName;
+ }
+
+ /**
+ * Return properties set in holder as array of strings
+ *
+ * @return Constructed array
+ */
+ public String[] asArray()
+ {
+ List<String> list = new ArrayList<String>();
+ if (name != null)
+ list.add(name);
+ if (localInterface != null)
+ list.add(localInterface);
+ if (beanClass != null)
+ list.add(beanClass);
+ if (actionMethod != null)
+ list.add(actionMethod);
+ if (pageName != null)
+ list.add(pageName);
+
+ return list.toArray(new String[] {});
+ }
+}
Modified: branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/NewFormTest.java
===================================================================
--- branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/NewFormTest.java 2010-04-12 08:04:47 UTC (rev 12431)
+++ branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/NewFormTest.java 2010-04-12 09:17:44 UTC (rev 12432)
@@ -24,6 +24,9 @@
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.assertEquals;
+import org.jboss.seam.test.functional.seamgen.ComponentHolder;
+import org.jboss.seam.test.functional.seamgen.SeamGenTest;
+
import org.testng.annotations.Test;
/**
@@ -39,8 +42,8 @@
public void testNewComponent()
{
- String form = "id=" + newComponentProperties[0] + "Form";
- String button = form + ":" + newComponentProperties[3];
+ String form = "id=" + newComponent.name + "Form";
+ String button = form + ":" + newComponent.actionMethod;
String field = form + ":" + "valueField:value";
String value = "world";
@@ -55,17 +58,22 @@
browser.clickAndWait(button);
assertTrue(browser.isElementPresent(MESSAGES), "Message not found.");
- assertEquals(browser.getText(MESSAGES), newComponentProperties[3] + " " + value, "Unexpected form output.");
+ assertEquals(browser.getText(MESSAGES), newComponent.actionMethod + " " + value, "Unexpected form output.");
}
@Override
protected void prepareData() {
- newComponentProperties = new String[]{ "hello", "HelloLocal", "Hello", "hello", "helloPage" };
+ // war version
+ if (SeamGenTest.WAR)
+ newComponent = new ComponentHolder("hello", null, "Hello", "hello", "helloPage");
+ // ear version
+ else
+ newComponent = new ComponentHolder("hello", "HelloLocal", "Hello", "hello", "helloPage");
}
@Override
public void generateNewComponent()
{
- seamGen.newForm(newComponentProperties);
+ seamGen.newForm(newComponent.asArray());
}
}
Modified: branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/utils/SeamGenAdapter.java
===================================================================
--- branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/utils/SeamGenAdapter.java 2010-04-12 08:04:47 UTC (rev 12431)
+++ branches/enterprise/JBPAPP_4_3_FP01/src/test/ftest/seamgen/src/main/org/jboss/seam/test/functional/seamgen/utils/SeamGenAdapter.java 2010-04-12 09:17:44 UTC (rev 12432)
@@ -197,7 +197,7 @@
*/
class InputStreamEater extends Thread
{
- private static final String INPUT_CHALLENGE = "[input]";
+ private static final String INPUT_CHALLENGE = "[input] Enter";
private BufferedReader stream;
private OutputStreamFeeder feederToNotify;
private PrintStream out;
16 years
Seam SVN: r12431 - in modules/servlet/trunk/src/main/java/org/jboss/seam/servlet: event and 1 other directory.
by seam-commits@lists.jboss.org
Author: nickarls
Date: 2010-04-12 04:04:47 -0400 (Mon, 12 Apr 2010)
New Revision: 12431
Added:
modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpArtifacts.java
modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpUserArtifacts.java
Removed:
modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpManager.java
Modified:
modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/event/ServletEventListener.java
Log:
Registering ServletContext
Common HTTP artifacts
Added: modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpArtifacts.java
===================================================================
--- modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpArtifacts.java (rev 0)
+++ modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpArtifacts.java 2010-04-12 08:04:47 UTC (rev 12431)
@@ -0,0 +1,106 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * 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.jboss.seam.servlet;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.jboss.seam.servlet.event.qualifier.Initialized;
+
+/**
+ *
+ * @author Nicklas Karlsson
+ *
+ * A source for HTTP artifacts. It observes for and stores the
+ * ServletContext, HttpServletRequest and HttpSession objects. It also
+ * produces the request values for @HttpParam
+ */
+@ApplicationScoped
+public class HttpArtifacts
+{
+ private ServletContext servletContext;
+
+ @Inject
+ HttpUserArtifacts httpUserArtifacts;
+
+ @Inject
+ BeanManager beanManager;
+
+ protected void pickup(@Observes @Initialized ServletContextEvent e)
+ {
+ servletContext = e.getServletContext();
+ servletContext.setAttribute(BeanManager.class.getName(), beanManager);
+ }
+
+ /**
+ * Gets the current servlet context
+ *
+ * @throws IllegalStateException if the servlet context has not been set
+ * @return The servlet context
+ */
+ public ServletContext getServletContext()
+ {
+ if (servletContext == null)
+ {
+ throw new IllegalStateException("Servlet Context is not set");
+ }
+ return servletContext;
+ }
+
+ /**
+ * Gets the current HTTP servlet request
+ *
+ * @throws IllegalStateException if the request has not been set
+ * @return the request
+ */
+ public HttpServletRequest getRequest()
+ {
+ HttpServletRequest request = httpUserArtifacts.getRequest();
+ if (request == null)
+ {
+ throw new IllegalStateException("HTTP servlet request is not set");
+ }
+ return request;
+ }
+
+ /**
+ * Gets the current HTTP session
+ *
+ * @throws IllegalStateException if the session has not been set
+ * @return the session
+ */
+ public HttpSession getSession()
+ {
+ HttpSession session = httpUserArtifacts.getSession();
+ if (session == null)
+ {
+ throw new IllegalStateException("HTTP session is not set");
+ }
+ return session;
+ }
+}
\ No newline at end of file
Deleted: modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpManager.java
===================================================================
--- modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpManager.java 2010-04-12 07:21:35 UTC (rev 12430)
+++ modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpManager.java 2010-04-12 08:04:47 UTC (rev 12431)
@@ -1,138 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., and individual contributors
- * 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.jboss.seam.servlet;
-
-import java.io.Serializable;
-
-import javax.enterprise.context.SessionScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Produces;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.inject.Inject;
-import javax.servlet.ServletRequestEvent;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionEvent;
-
-import org.jboss.seam.servlet.event.qualifier.Created;
-import org.jboss.seam.servlet.event.qualifier.Destroyed;
-import org.jboss.seam.servlet.event.qualifier.Initialized;
-import org.slf4j.Logger;
-
-/**
- * A manager for acquiring HTTP artifacts
- *
- * @author Nicklas Karlsson
- *
- */
-@SessionScoped
-public class HttpManager implements Serializable
-{
- private static final long serialVersionUID = 5191073522575178427L;
-
- private HttpSession session;
- private HttpServletRequest request;
- private BeanManager beanManager;
-
- @Inject
- private Logger log;
-
- protected void requestInitialized(@Observes @Initialized ServletRequestEvent e)
- {
- log.trace("Servlet request initialized with event #0", e);
- request = (HttpServletRequest) e.getServletRequest();
- }
-
- protected void requestDestroyed(@Observes @Destroyed ServletRequestEvent e)
- {
- log.trace("Servlet request destroyed with event #0", e);
- request = null;
- }
-
- protected void sessionInitialized(@Observes @Created HttpSessionEvent e)
- {
- log.trace("HTTP session initalized with event #0", e);
- session = e.getSession();
- beanManager = (BeanManager) session.getServletContext().getAttribute(BeanManager.class.getName());
- }
-
- protected void sessionDestroyed(@Observes @Destroyed HttpSessionEvent e)
- {
- log.trace("HTTP session destroyed with event #0", e);
- session = null;
- beanManager = null;
- }
-
- /**
- * Returns the current HTTP session. Throws an {@link IllegalStateException}
- * if the session is currently not set.
- *
- * @return The current HTTP session
- */
- public HttpSession getSession()
- {
- if (session == null)
- {
- throw new IllegalStateException("The HTTP session is currently not set");
- }
- return session;
- }
-
- /**
- * Returns the current HTTP request. Throws an {@link IllegalStateException}
- * if the request is currently not set.
- *
- * @return The current HTTP request
- */
- public HttpServletRequest getRequest()
- {
- if (request == null)
- {
- throw new IllegalStateException("The HTTP request is currently not set");
- }
- return request;
- }
-
- /**
- * Returns the current CDI Bean Manager of the WAR. Throws an
- * {@link IllegalStateException} if the manager is not set.
- *
- * @return The current HTTP request
- */
- public BeanManager getBeanManager()
- {
- if (beanManager == null)
- {
- throw new IllegalStateException("The Bean Manager is currently not set");
- }
- return beanManager;
- }
-
- @Produces
- @HttpParam("")
- String getParamValue(InjectionPoint ip)
- {
- return getRequest().getParameter(ip.getAnnotated().getAnnotation(HttpParam.class).value());
- }
-
-}
Copied: modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpUserArtifacts.java (from rev 12428, modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpManager.java)
===================================================================
--- modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpUserArtifacts.java (rev 0)
+++ modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/HttpUserArtifacts.java 2010-04-12 08:04:47 UTC (rev 12431)
@@ -0,0 +1,99 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * 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.jboss.seam.servlet;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.inject.Inject;
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionEvent;
+
+import org.jboss.seam.servlet.event.qualifier.Created;
+import org.jboss.seam.servlet.event.qualifier.Destroyed;
+import org.jboss.seam.servlet.event.qualifier.Initialized;
+import org.slf4j.Logger;
+
+/**
+ * A manager for acquiring HTTP artifacts
+ *
+ * @author Nicklas Karlsson
+ *
+ */
+@SessionScoped
+public class HttpUserArtifacts implements Serializable
+{
+ private static final long serialVersionUID = 5191073522575178427L;
+
+ private HttpSession session;
+ private HttpServletRequest request;
+
+ @Inject
+ private Logger log;
+
+ protected void requestInitialized(@Observes @Initialized ServletRequestEvent e)
+ {
+ log.trace("Servlet request initialized with event #0", e);
+ request = (HttpServletRequest) e.getServletRequest();
+ }
+
+ protected void requestDestroyed(@Observes @Destroyed ServletRequestEvent e)
+ {
+ log.trace("Servlet request destroyed with event #0", e);
+ request = null;
+ }
+
+ protected void sessionInitialized(@Observes @Created HttpSessionEvent e)
+ {
+ log.trace("HTTP session initalized with event #0", e);
+ session = e.getSession();
+ }
+
+ protected void sessionDestroyed(@Observes @Destroyed HttpSessionEvent e)
+ {
+ log.trace("HTTP session destroyed with event #0", e);
+ session = null;
+ }
+
+ protected HttpSession getSession()
+ {
+ return session;
+ }
+
+ protected HttpServletRequest getRequest()
+ {
+ return request;
+ }
+
+ @Produces
+ @HttpParam("")
+ protected String getParamValue(InjectionPoint ip)
+ {
+ return getRequest().getParameter(ip.getAnnotated().getAnnotation(HttpParam.class).value());
+ }
+
+}
Modified: modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/event/ServletEventListener.java
===================================================================
--- modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/event/ServletEventListener.java 2010-04-12 07:21:35 UTC (rev 12430)
+++ modules/servlet/trunk/src/main/java/org/jboss/seam/servlet/event/ServletEventListener.java 2010-04-12 08:04:47 UTC (rev 12431)
@@ -23,13 +23,10 @@
import java.io.IOException;
import java.lang.annotation.Annotation;
-import java.util.ArrayList;
-import java.util.List;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.util.AnnotationLiteral;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
+import javax.inject.Inject;
import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;
import javax.servlet.ServletContextAttributeEvent;
@@ -75,50 +72,11 @@
@WebListener
public class ServletEventListener implements HttpSessionActivationListener, HttpSessionAttributeListener, HttpSessionBindingListener, HttpSessionListener, ServletContextListener, ServletContextAttributeListener, ServletRequestListener, ServletRequestAttributeListener, AsyncListener
{
+ @Inject
private BeanManager beanManager;
private Logger log = LoggerFactory.getLogger(ServletEventListener.class);
- // FIXME: hack to work around invalid binding in JBoss AS 6 M2
- private static final List<String> beanManagerLocations = new ArrayList<String>()
- {
- private static final long serialVersionUID = 1L;
- {
- add("java:comp/BeanManager");
- add("java:app/BeanManager");
- }
- };
-
- public ServletEventListener()
- {
- beanManager = lookupBeanManager();
- }
-
- private BeanManager lookupBeanManager()
- {
- for (String location : beanManagerLocations)
- {
- try
- {
- log.trace("Looking for Bean Manager at JNDI location #0", location);
- return (BeanManager) new InitialContext().lookup(location);
- }
- catch (NamingException e)
- {
- // No panic, keep trying
- log.debug("Bean Manager not found at JNDI location #0", location);
- }
- }
- // OK, panic
- throw new IllegalArgumentException("Could not find BeanManager in " + beanManagerLocations);
- }
-
- private void fireEvent(Object payload, Annotation... qualifiers)
- {
- log.trace("Firing event #0 with qualifiers #1", payload, qualifiers);
- beanManager.fireEvent(payload, qualifiers);
- }
-
/**
* Session activated / passivated events
*/
@@ -335,4 +293,10 @@
});
}
+ private void fireEvent(Object payload, Annotation... qualifiers)
+ {
+ log.trace("Firing event #0 with qualifiers #1", payload, qualifiers);
+ beanManager.fireEvent(payload, qualifiers);
+ }
+
}
16 years