just wanted to let you guy's know that i gave a small demo at my company (10 employee's) and it was successfully in that appfuse (struts, spring,hibernate) will be the default for web applications.


tibi

ps  here my demo: (based on the helloworld and crud examples from the site):
(hope not to much dutch)



mysql on with user root and password empty
else change pom.xml

http://appfuse.org/display/APF/AppFuse+QuickStart

mvn archetype:create -DarchetypeGroupId=org.appfuse -DarchetypeArtifactId=appfuse-basic-struts -DremoteRepositories=http://static.appfuse.org/repository -DarchetypeVersion=1.0-m3 -DgroupId=nl.tibi.demo12 -DartifactId=demo12

cd demo12
[wijzig pom.xml voor database]

mvn integration-test

mvn war:inplace

rm -r src/main/webapp/WEB-INF/lib
rm src/main/webapp/WEB-INF/classes/struts.xml

mvn install eclipse:eclipse
[eclipse:file/import]

mvn jetty:run

==================
src/main/webapp/hello.jsp
hoi

==================
src/main/webapp/hello.jsp
<%@ include file="/common/taglibs.jsp"%>

<s:action name="wereld" id="action" namespace="default"/>

<strong>From struts:</strong>

<span style="color:blue"><s:property value="#action.message"/></span>
==================
src/main/java/nl/tibi/demo12/action/HelloAction.java

package nl.tibi.demo12.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport {
   String message;

   public String getMessage() {
       return message;
   }

   public String execute() {
       message = "hoi";
       return SUCCESS;
   }
}
=================
src/main/resources/struts.xml
<action name="wereld" class="nl.tibi.demo12.action.HelloAction"/>

========================================================================
src/main/java/nl/tibi/demo12/model/Person.java
package nl.tibi.demo12.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Person {
   Long id;

   String firstName;

   String lastName;

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   public Long getId() {
       return id;
   }

   public String getFirstName() {
       return firstName;
   }

   public void setFirstName(String firstName) {
       this.firstName = firstName;
   }


   public void setId(Long id) {
       this.id = id;
   }

   public String getLastName() {
       return lastName;
   }

   public void setLastName(String lastName) {
       this.lastName = lastName;
} }

========================================================================
src/main/java/nl/tibi/demo12/action/PersonAction.java
package nl.tibi.demo12.action;

import java.util.List;

import nl.tibi.demo12.model.Person;

import org.appfuse.service.GenericManager;
import org.appfuse.webapp.action.BaseAction;

public class PersonAction extends BaseAction {
   GenericManager<Person, Long> manager;

   Person person;
   Long id;

   public Long getId() {
       return id;
   }

   public void setId(Long id) {
       this.id = id;
   }

   public GenericManager<Person, Long> getManager() {
       return manager;
   }

   public void setPersonManager(GenericManager<Person, Long> manager) {
       this.manager = manager;
   }

   public Person getPerson() {
       return person;
   }

   public void setPerson(Person person) {
       this.person = person;
   }

   public String execute() {
       if (id != null) {
           person = manager.get(id);
       }
       return SUCCESS;
   }

   public String save() {
       manager.save(person);
       super.saveMessage("Person updated succesfully");
       return "form";
   }

}


========================================================================
src/main/resources/struts.xml

       <action name="person" class="personAction">
           <result>/WEB-INF/pages/person.jsp</result>
           <result name="form" type="redirect">person.html</result>
       </action>

========================================================================
src/main/webapp/WEB-INF/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:tx="http://www.springframework.org/schema/tx";
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd";>


<!-- xmlns:tx="http://www.sprigfromework.org/schema/beans"-->

   <bean
       class="org.appfuse.dao.spring.HibernateExtensionPostProcessor">
       <property name="annotatedClasses">
           <list>
               <value>nl.tibi.demo12.model.Person</value>
           </list>
       </property>
   </bean>
   <bean id="personManager"
       class="org.appfuse.service.impl.GenericManagerImpl">
       <constructor-arg>
           <bean class="org.appfuse.dao.hibernate.GenericDaoHibernate"
               autowire="byType">
               <constructor-arg value="nl.tibi.demo12.model.Person" />
           </bean>
       </constructor-arg>
   </bean>

   <bean id="personAction" class="nl.tibi.demo12.action.PersonAction"
       scope="prototype" autowire="default">
       <property name="personManager" ref="personManager" />
   </bean>

</beans>

========================================================================
src/main/webapp/WEB-INF/pages/person.jsp

<%@ include file="/common/taglibs.jsp"%>

<title>Hallo person</title>

<p>
   veel plezier moet onderstaand formulier.
</p>

<s:form name="personForm" action="person" method="post" validate="true">
   <s:hidden name="person.id" value="%{person.id}" />

   <s:textfield label="First Name" name="person.firstName"
value="%{person.firstName}" required="true" cssClass="text medium" />

   <s:textfield label="Last Name" name="person.lastName"
       value="%{person.lastName}" required="true" cssClass="text medium" />

   <li class="buttenBar left">
       <s:submit method="save" value="Save" cssClass="button" />
   </li>

</s:form>
========================================================================
mvn jetty:run
========================================================================
src/main/webapp/WEB-INF/pages/person.jsp

<br/>
<div style="maring-top: 50px">
   <s:action name="person!list" id="action" namespace="default" />
   <strong>Current persons</strong>
     <ul class="classList">
       <s:iterator value="#action.persons">
           <li>
               <s:a href="person.html?id=%{id}">
                   <s:property value="firstName" />
                   <s:property value="lastName" />
               </s:a>
       </s:iterator>

   </ul>
</div>

========================================================================
src/main/java/nl/tibi/demo12/action/PersonAction.java

   private List persons;

   public List getPersons() {
       return persons;
   }


   public String list(){
           persons = manager.getAll();
           return SUCCESS;
   }

========================================================================
src/main/webapp/WEB-INF/pages/person.jsp

       <s:submit method="delete" value="Delete" cssClass="button" />
========================================================================
src/main/java/nl/tibi/demo12/action/PersonAction.java

   public String delete() {
       manager.remove(person.getId());
       saveMessage(MessageFormat.format("{0} removed succesfully", person
               .getFirstName()
               + ' ' + person.getLastName()));
       return "form";
   }
=========================================================================src/test/java/nl/tibi/demo12/PersonActionTest

package nl.tibi.demo12.action;

import nl.tibi.demo12.MyBaseManagerMockTestCase;
import nl.tibi.demo12.model.Person;

import org.appfuse.service.GenericManager;
import org.appfuse.service.impl.BaseManagerMockTestCase;
import org.appfuse.webapp.action.BaseActionTestCase;
import org.jmock.Mock;

public class PersonActionTest extends BaseActionTestCase {

   private PersonAction personAction;

   public void setPersonAction(PersonAction personAction) {
       this.personAction = personAction;
   }

   public void testSave() throws Exception {
BaseManagerMockTestCase testManager = new MyBaseManagerMockTestCaseDummy();
       Mock mockManager = testManager.mock(GenericManager.class);
personAction.setPersonManager((GenericManager<Person, Long>) mockManager.proxy());

       Person person = new Person();
       person.setFirstName("testFirstName");
       person.setLastName("testLastName");

mockManager.expects(testManager.once()).method("save").with(testManager.eq(person));
       personAction.setPerson(person);

       String result = personAction.save();
       assertEquals(result, "form");
   }
}

=========================================================================
src/test/java/nl/tibi/demo12/MyBaseManagerMockTestCaseDummy

package nl.tibi.demo12;

import org.appfuse.service.impl.BaseManagerMockTestCase;

/**
* just for extending baseamangerMocktestCase which is abstract.
*
* @author tibi
*
*/
public class MyBaseManagerMockTestCaseDummy extends BaseManagerMockTestCase {

}
=========================================================================src/test/java/nl/tibi/demo12/action/PersonManagerTest
src/test/java/nl/tibi/demo12/action/PersonManagerTest

package nl.tibi.demo12.action;

import nl.tibi.demo12.model.Person;

public class PersonManagerTest extends AbstractTransactionalDataSourceSpringContextTests {

   GenericManager<Person, Long> manager;

   public void setPersonManager(GenericManager<Person, Long> manager) {
       this.manager = manager;
   }

   protected String[] getConfigLocations() {
return new String[] { "classpath*:/applicationContext-resources.xml", "classpath*:/applicationContext-dao.xml", "classpath*:/applicationContext-service.xml", "/WEB-INF/applicationContext*.xml", "/WEB-INF/security.xml" };
   }

   protected void onSetUpInTransaction() throws Exception {
       deleteFromTables(new String[] { "Person" });
   }

   public void testGetUsers() {
       Person person1 = new Person();
       person1.setFirstName("test1firstname");
       person1.setLastName("test1lastname");
       Person person2 = new Person();
       person2.setFirstName("test2firstname");
       person2.setLastName("test2lastname");
       manager.save(person1);
       manager.save(person2);
       assertEquals(2, manager.getAll().size());
   }

}

========================================================================
src/test/resources/web-tests.xml
[replace]
<target name="run-all-tests" depends="Login,Logout,PasswordHint,Signup,UserTests,FlushCache,FileUpload,PeopleTests" description="Call and executes all test cases (targets)" />


   <!-- runs people-related tests -->
<target name="PeopleTests" depends="AddPerson" description="Call and executes all people test cases (targets)">
       <echo>Successfully ran all People UI tests!</echo>
   </target>

   <target name="AddPerson">
       <webtest name="addPerson">
           &config;
           <steps>
               &login;
               <invoke description="add person." url="/person.html" />
<setinputfield description="set first name" name="person.firstName" value="tibor" /> <setinputfield description="set last name" name="person.lastName" value="strausz" /> <clickbutton label="Save" description="Click the save button" /> <verifytext description="succes message should be displayed" text="Person updated succesfully" /> <verifytext description="user should be displayed on screen" text="tibor.+strausz" regex="true" /> <clicklink description="try to delete made user" label="tibor strausz" /> <clickbutton description="Click the delete button" label="Delete" /> <verifytext description="succes message should be displayed" text="tibor strausz removed succesfully" />
           </steps>
       </webtest>
   </target>


=========================================================================
pom.xml
[change]
           <plugin>
               <groupId>org.codehaus.mojo</groupId>
               <artifactId>cobertura-maven-plugin</artifactId>
               <version>2.0</version>
                   <configuration>
                     <instrumentation>
                       <excludes>
                           <exclude>nl/tibi/demo12/**/*Test.class</exclude>
                       </excludes>
                     </instrumentation>
                   </configuration>
           </plugin>
=========================================================================
src/main/resources/nl/tibi/demo12/action/PersonAction-validation.xml
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
   "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd";>
<validators>
   <field name="person">
       <field-validator type="visitor">
           <param name="appendPrefix">false</param>
           <message/>
       </field-validator>
   </field>
</validators>

=========================================================================
src/main/resources/nl/tibi/demo12/model/Person-validation.xml

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
   "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd";>
<validators>
   <field name="person.firstName">
       <field-validator type="requiredstring">
           <message key="errors.required"/>
       </field-validator>
   </field>
   <field name="person.lastName">
       <field-validator type="requiredstring">
           <message key="errors.required"/>
       </field-validator>
   </field>
</validators>
=========================================================================
src/main/resources/struts.xml

<result name="input">/WEB-INF/pages/person.jsp</result>

=========================================================================
src/main/resources/ApplicationResources.properties

person.lastName=Person Lastname


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to