[jboss-user] [JBoss Seam] - Re: SeamTest and expectedExceptions
matt.drees
do-not-reply at jboss.com
Wed Oct 17 03:21:54 EDT 2007
So I think I can say I understand what Seam does now. I don't necessarily agree with it, though. I do understand that the installed attribute can't just simply override the annotation on that class, otherwise something like
| <core:jbpm/>
| wouldn't work, because "installed" would still be false.
On a related note, I did a little testing to see if I was reading the source code right. The results are a little odd, I think:
| <?xml version="1.0" encoding="UTF-8"?>
| <components xmlns="http://jboss.com/products/seam/components"
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
| xsi:schemaLocation="http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd">
|
| <!-- A standard @Name-annotated component: -->
| <component name="foo" scope="session" startup="true"> <!-- scope etc attributes ignored... -->
| <property name="title">A Foo</property> <!-- ...but property configurations are not... -->
| </component>
| <component name="foo" installed="false">
| <property name="description">installed by default</property> <!-- ...even when installed="false" -->
| </component>
|
| <!-- Not @Name-annotated: -->
| <component name="bar" class="eg.AbstractExampleComponent$Bar" scope="session" startup="true"> <!-- scope etc attributes not ignored -->
| <property name="title">A Bar</property> <!-- properties not ignored, either, of course -->
| </component>
| <component name="bar">
| <property name="description">not annotated as a component</property> <!-- (ever) -->
| </component>
|
| <!-- @Name-annotated, but also @Install(false): -->
| <component class="eg.AbstractExampleComponent$Baz" scope="session" startup="true"> <!-- scope etc attributes not ignored -->
| <property name="title">A Baz</property>
| <property name="description">a non-installed component</property>
| </component>
|
| </components>
|
| package eg;
|
| import org.jboss.seam.ScopeType;
| import org.jboss.seam.annotations.Install;
| import org.jboss.seam.annotations.Name;
| import org.jboss.seam.annotations.Scope;
|
|
| public class AbstractExampleComponent {
|
| private String description;
| private String title;
|
| public String getDescription() {
| return description;
| }
| public void setDescription(String name) {
| this.description = name;
| }
| public String getTitle() {
| return title;
| }
| public void setTitle(String title) {
| this.title = title;
| }
|
| @Name("foo")
| @Scope(ScopeType.CONVERSATION)
| public static class Foo extends AbstractExampleComponent {}
|
| @Scope(ScopeType.CONVERSATION)
| public static class Bar extends AbstractExampleComponent {}
|
| @Name("baz")
| @Install(false)
| @Scope(ScopeType.CONVERSATION)
| public static class Baz extends AbstractExampleComponent {}
|
| }
|
| package eg;
|
| import org.jboss.seam.Component;
| import org.jboss.seam.ScopeType;
| import org.jboss.seam.Seam;
| import org.jboss.seam.mock.SeamTest;
| import org.testng.annotations.Test;
|
| import eg.AbstractExampleComponent.Bar;
| import eg.AbstractExampleComponent.Baz;
| import eg.AbstractExampleComponent.Foo;
|
| public class InitializationTest extends SeamTest{
|
| @Override
| protected void startJbossEmbeddedIfNecessary() throws Exception {
| }
|
| @Test
| public void foo() throws Exception {
| new ComponentTest() {
|
| @Override
| protected void testComponents() throws Exception {
| Foo foo = (Foo) Component.getInstance("foo");
| assert foo.getTitle().equals("A Foo");
| assert foo.getDescription().equals("installed by default");
| Component component = Seam.componentForName("foo");
| assert component.getScope() == ScopeType.CONVERSATION; //xml override not used
| assert component.isStartup() == false; //same
| }
|
| }.run();
| }
|
| @Test
| public void bar() throws Exception {
| new ComponentTest() {
|
| @Override
| protected void testComponents() throws Exception {
| Bar bar = (Bar) Component.getInstance("bar");
| assert bar.getTitle().equals("A Bar");
| assert bar.getDescription().equals("not annotated as a component");
| Component component = Seam.componentForName("bar");
| assert component.getScope() == ScopeType.SESSION;
| assert component.isStartup() == true;
| }
|
| }.run();
| }
| @Test
| public void baz() throws Exception {
| new ComponentTest() {
|
| @Override
| protected void testComponents() throws Exception {
| Baz baz = (Baz) Component.getInstance("baz");
| assert baz.getTitle().equals("A Baz");
| assert baz.getDescription().equals("a non-installed component");
| Component component = Seam.componentForName("baz");
| assert component.getScope() == ScopeType.SESSION;
| assert component.isStartup() == true;
| }
|
| }.run();
| }
|
| }
|
(The test passes)
The biggest oddity to me is that for installed components, you can't override *any* annotations, not just "@Install". Another oddity is that for install="false" elements, properties are still picked up and used.
It smells buggy. Or at least not-thought-through.
Is this the way things are supposed to be?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4095900#4095900
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4095900
More information about the jboss-user
mailing list