├── build.properties ├── build.xml ├── changelog.txt ├── checkstyle.xml ├── docs ├── MVC-step-by-step │ ├── Spring-MVC-Step22.png │ ├── Spring-MVC-step-by-step-Part-1.html │ ├── Spring-MVC-step-by-step-Part-2.html │ ├── Spring-MVC-step-by-step-Part-2_html_1969edd8.png │ ├── Spring-MVC-step-by-step-Part-2_html_m3eb7013.png │ ├── Spring-MVC-step-by-step-Part-3.html │ ├── Spring-MVC-step-by-step.html │ ├── Spring-MVC-step-by-step_html_m3871950e.png │ └── Spring-MVC-step-by-step_html_m5b7553b2.png ├── container_resources.html ├── data_access.html ├── lightweight_container.html ├── tutorial.pdf └── web_mvc.html ├── lib ├── ant │ └── ant.jar ├── aop-alliance │ └── aopalliance.jar ├── caucho │ ├── burlap-2.1.7.jar │ └── hessian-2.1.7.jar ├── cglib │ ├── bcel-5.1.jar │ └── cglib-1.0.jar ├── clover │ └── clover.jar ├── easymock │ └── easymock.jar ├── hibernate │ ├── commons-collections.jar │ ├── commons-lang.jar │ ├── dom4j.jar │ └── hibernate2.jar ├── itext-pdf │ └── iText.jar ├── j2ee │ ├── ejb.jar │ ├── jdbc2_0-stdext.jar │ ├── jms.jar │ ├── jta.jar │ ├── servlet.jar │ └── xml-apis.jar ├── jdo │ └── jdo1_0.jar ├── jstl │ ├── jstl.jar │ └── standard.jar ├── junit │ └── junit.jar ├── log4j │ ├── commons-logging.jar │ └── log4j-1.2.8.jar ├── mockobjects │ ├── mockobjects-0.07-core.jar │ ├── mockobjects-0.07-j1.3-j2ee1.3.jar │ └── mockobjects-0.07-jdk1.3.jar ├── poi │ └── poi-2.0-pre3-20030728.jar ├── regexp │ └── jakarta-oro-2.0.7.jar └── velocity │ └── velocity-1.3.jar ├── license.txt ├── livetest └── com │ └── interface21 │ └── jdbc │ ├── BaseMySQLTestCase.java │ └── JdbcInsertTestSuite.java ├── maven.xml ├── project.properties ├── project.xml ├── readme.txt ├── samples ├── countries │ ├── ant.bat │ ├── as │ │ └── jboss │ │ │ ├── 3.0.x │ │ │ ├── install.txt │ │ │ └── mysql-countries-service.xml │ │ │ ├── 3.2.x │ │ │ ├── install.txt │ │ │ └── mysql-countries-ds.xml │ │ │ ├── install.txt │ │ │ └── jboss-web.xml │ ├── build.xml │ ├── db │ │ ├── hsqldb.jar │ │ └── mysql-connector-java-3.0.8-stable-bin.jar │ ├── install.txt │ ├── lib │ │ └── content.txt │ ├── readme.txt │ ├── src │ │ └── com │ │ │ └── interface21 │ │ │ └── samples │ │ │ └── countries │ │ │ ├── appli │ │ │ ├── Country.java │ │ │ └── ICountry.java │ │ │ ├── dao │ │ │ ├── DaoCountryJdbc.java │ │ │ ├── DaoCountryJdbcMySql.java │ │ │ ├── DaoCountryMem.java │ │ │ └── IDaoCountry.java │ │ │ ├── utils │ │ │ └── Convert.java │ │ │ └── web │ │ │ ├── CopyInterceptor.java │ │ │ ├── CountriesController.java │ │ │ ├── ErrorsController.java │ │ │ └── views │ │ │ ├── CountriesExcelView.java │ │ │ └── CountriesPdfView.java │ ├── war │ │ ├── WEB-INF │ │ │ ├── applicationContext.xml │ │ │ ├── classes │ │ │ │ ├── blue.properties │ │ │ │ ├── blue_de.properties │ │ │ │ ├── blue_en.properties │ │ │ │ ├── blue_fr.properties │ │ │ │ ├── log4j.properties │ │ │ │ ├── messages.properties │ │ │ │ ├── messages_de.properties │ │ │ │ ├── messages_en.properties │ │ │ │ ├── messages_fr.properties │ │ │ │ ├── none.properties │ │ │ │ ├── theme.properties │ │ │ │ ├── theme_de.properties │ │ │ │ ├── theme_en.properties │ │ │ │ ├── theme_fr.properties │ │ │ │ ├── views-countries.properties │ │ │ │ ├── views-countries_de.properties │ │ │ │ ├── views-countries_en.properties │ │ │ │ └── views-countries_fr.properties │ │ │ ├── countries-servlet.xml │ │ │ ├── views │ │ │ │ ├── jsp │ │ │ │ │ ├── common │ │ │ │ │ │ ├── endnav.jsp │ │ │ │ │ │ └── includes.jsp │ │ │ │ │ ├── countries │ │ │ │ │ │ ├── config.jsp │ │ │ │ │ │ ├── config_de.jsp │ │ │ │ │ │ ├── config_fr.jsp │ │ │ │ │ │ ├── copy.jsp │ │ │ │ │ │ ├── home.jsp │ │ │ │ │ │ ├── main │ │ │ │ │ │ │ ├── detail.jsp │ │ │ │ │ │ │ ├── detailnav.jsp │ │ │ │ │ │ │ ├── home.jsp │ │ │ │ │ │ │ └── nav.jsp │ │ │ │ │ │ ├── model.jsp │ │ │ │ │ │ ├── nav.jsp │ │ │ │ │ │ └── top.jsp │ │ │ │ │ └── errors │ │ │ │ │ │ └── http404.jsp │ │ │ │ └── spring.tld │ │ │ └── web.xml │ │ ├── images │ │ │ ├── back.gif │ │ │ ├── de.gif │ │ │ ├── fr.gif │ │ │ └── us.gif │ │ ├── index.jsp │ │ └── themes │ │ │ ├── blue │ │ │ ├── bback_de.gif │ │ │ ├── bback_en.gif │ │ │ ├── bback_fr.gif │ │ │ ├── blue.css │ │ │ └── logo.gif │ │ │ └── white │ │ │ ├── logo.gif │ │ │ ├── wback_de.gif │ │ │ ├── wback_en.gif │ │ │ ├── wback_fr.gif │ │ │ └── white.css │ └── warfile.bat ├── petclinic │ ├── ant.bat │ ├── as │ │ └── jboss │ │ │ ├── 3.2.x │ │ │ ├── install.txt │ │ │ └── mysql-petclinic-ds.xml │ │ │ └── jboss-web.xml │ ├── build.properties │ ├── build.xml │ ├── db │ │ ├── build.xml │ │ ├── hsqldb │ │ │ ├── dropDB.txt │ │ │ ├── initDB.txt │ │ │ ├── manager.bat │ │ │ ├── manager.sh │ │ │ ├── petclinic.data │ │ │ ├── petclinic.properties │ │ │ ├── petclinic.script │ │ │ ├── petclinic_tomcat_hsql.xml │ │ │ ├── server.bat │ │ │ ├── server.properties │ │ │ └── server.sh │ │ ├── mysql │ │ │ ├── dropDB.txt │ │ │ ├── initDB.txt │ │ │ └── petclinic_tomcat_mysql.xml │ │ └── petclinic_tomcat_all.xml │ ├── lib-new │ │ └── mysql-connector-java-3.0.8-stable-bin.jar │ ├── lib │ │ ├── hsqldb.jar │ │ └── mysql-connector-java-2.0.14-bin.jar │ ├── readme.txt │ ├── src │ │ └── petclinic │ │ │ ├── Clinic.java │ │ │ ├── Entity.java │ │ │ ├── NamedEntity.java │ │ │ ├── NoSuchEntityException.java │ │ │ ├── Owner.java │ │ │ ├── Person.java │ │ │ ├── Pet.java │ │ │ ├── Vet.java │ │ │ ├── Visit.java │ │ │ ├── jdbc │ │ │ ├── AbstractJdbcClinic.java │ │ │ ├── HsqlClinic.java │ │ │ ├── MysqlClinic.java │ │ │ └── package.html │ │ │ ├── package.html │ │ │ ├── validation │ │ │ ├── FindOwnersValidator.java │ │ │ ├── OwnerValidator.java │ │ │ ├── PetValidator.java │ │ │ ├── VisitValidator.java │ │ │ └── package.html │ │ │ └── web │ │ │ ├── AbstractClinicForm.java │ │ │ ├── AddOwnerForm.java │ │ │ ├── AddPetForm.java │ │ │ ├── AddVisitForm.java │ │ │ ├── ClinicController.java │ │ │ ├── EditOwnerForm.java │ │ │ ├── EditPetForm.java │ │ │ ├── FindOwnersForm.java │ │ │ └── package.html │ ├── test │ │ └── src │ │ │ ├── petclinic │ │ │ ├── OwnerTest.java │ │ │ └── jdbc │ │ │ │ └── JdbcClinicTest.java │ │ │ └── testContext.xml │ └── war │ │ ├── WEB-INF │ │ ├── applicationContext.xml │ │ ├── classes │ │ │ ├── log4j.properties │ │ │ ├── messages.properties │ │ │ ├── messages_de.properties │ │ │ ├── messages_en.properties │ │ │ └── views.properties │ │ ├── jsp │ │ │ ├── fields │ │ │ │ ├── address.jsp │ │ │ │ ├── city.jsp │ │ │ │ ├── firstName.jsp │ │ │ │ ├── lastName.jsp │ │ │ │ └── telephone.jsp │ │ │ ├── findOwners.jsp │ │ │ ├── includes.jsp │ │ │ ├── owner.jsp │ │ │ ├── ownerForm.jsp │ │ │ ├── owners.jsp │ │ │ ├── petForm.jsp │ │ │ ├── uncaughtException.jsp │ │ │ ├── vets.jsp │ │ │ ├── visitForm.jsp │ │ │ └── welcome.jsp │ │ ├── petclinic-servlet.xml │ │ ├── spring.tld │ │ └── web.xml │ │ ├── html │ │ └── petclinic.html │ │ └── index.jsp └── skeletons │ ├── readme.txt │ ├── webapp-aop │ └── WEB-INF │ │ ├── applicationContext.xml │ │ └── web.xml │ ├── webapp-hibernate │ └── WEB-INF │ │ ├── applicationContext.xml │ │ ├── classes │ │ ├── cache.ccf │ │ └── example.hbm.xml │ │ └── web.xml │ ├── webapp-minimal │ └── WEB-INF │ │ ├── example-servlet.xml │ │ └── web.xml │ └── webapp-typical │ └── WEB-INF │ ├── applicationContext.xml │ ├── classes │ ├── example-messages.properties │ ├── example-messages_de.properties │ ├── log4j.properties │ ├── messages.properties │ ├── messages_de.properties │ ├── views.properties │ └── views_de.properties │ ├── example-servlet.xml │ ├── spring.tld │ └── web.xml ├── sandbox └── com │ └── interface21 │ ├── aop │ └── interceptor │ │ └── EventPublicationInterceptor.java │ ├── beans │ └── factory │ │ └── XmlSubelementPropertyValues.java │ ├── core │ ├── NodeCountVisitor.java │ ├── PrettyPrintVisitor.java │ ├── Visitable.java │ └── Visitor.java │ ├── ejb │ └── support │ │ ├── EJBContainerDetective.java │ │ └── JndiEnvironmentBeanFactory.java │ ├── samples │ └── crud │ │ └── web │ │ ├── AdminUtilisateursControleur.jav │ │ ├── SirenesControleur.jav │ │ ├── crud-servet.xml │ │ ├── desc.jsp │ │ ├── email.jsp │ │ ├── fax.jsp │ │ ├── liste.jsp │ │ ├── nom.jsp │ │ ├── pays.jsp │ │ ├── saisie.jsp │ │ └── tel.jsp │ └── web │ └── servlet │ └── mvc │ ├── AbstractListFormController.java │ └── AbstractParamListFormController.java ├── src └── com │ └── interface21 │ ├── aop │ ├── attributes │ │ ├── Attrib4jAttributeRegistry.java │ │ ├── MapAttributeRegistry.java │ │ ├── WildcardAttributeRegistry.java │ │ └── package.html │ ├── framework │ │ ├── AbstractMethodPointcut.java │ │ ├── AlwaysInvoked.java │ │ ├── AopConfigException.java │ │ ├── AopContext.java │ │ ├── AopProxy.java │ │ ├── AopUtils.java │ │ ├── DefaultProxyConfig.java │ │ ├── DelegatingIntroductionInterceptor.java │ │ ├── DynamicMethodPointcut.java │ │ ├── IntroductionInterceptor.java │ │ ├── InvokerInterceptor.java │ │ ├── MethodInvocationImpl.java │ │ ├── MethodPointcut.java │ │ ├── ProxyConfig.java │ │ ├── ProxyFactory.java │ │ ├── ProxyFactoryBean.java │ │ ├── ProxyInterceptor.java │ │ ├── RegexpMethodPointcut.java │ │ ├── StaticMethodPointcut.java │ │ └── package.html │ └── interceptor │ │ ├── AbstractQaInterceptor.java │ │ ├── ClassLoaderAnalyzerInterceptor.java │ │ ├── DebugInterceptor.java │ │ ├── PerformanceMonitorInterceptor.java │ │ └── package.html │ ├── beans │ ├── AbstractVetoableChangeListener.java │ ├── BeanUtils.java │ ├── BeanWrapper.java │ ├── BeanWrapperImpl.java │ ├── BeansException.java │ ├── CachedIntrospectionResults.java │ ├── ErrorCodedPropertyVetoException.java │ ├── FatalBeanException.java │ ├── InvalidPropertyValuesException.java │ ├── MethodInvocationException.java │ ├── MutablePropertyValues.java │ ├── MutableSortDefinition.java │ ├── NotWritablePropertyException.java │ ├── NullValueInNestedPathException.java │ ├── ParameterizableErrorCodedPropertyVetoException.java │ ├── PropertyAccessException.java │ ├── PropertyComparator.java │ ├── PropertyValue.java │ ├── PropertyValues.java │ ├── PropertyValuesValidator.java │ ├── PropertyVetoExceptionsException.java │ ├── SortDefinition.java │ ├── TypeMismatchException.java │ ├── factory │ │ ├── BeanDefinitionStoreException.java │ │ ├── BeanFactory.java │ │ ├── BeanFactoryAware.java │ │ ├── BeanIsNotAFactoryException.java │ │ ├── BeanNotOfRequiredTypeException.java │ │ ├── DisposableBean.java │ │ ├── FactoryBean.java │ │ ├── HierarchicalBeanFactory.java │ │ ├── InitializingBean.java │ │ ├── ListableBeanFactory.java │ │ ├── NoSuchBeanDefinitionException.java │ │ ├── package.html │ │ ├── support │ │ │ ├── AbstractBeanDefinition.java │ │ │ ├── AbstractBeanFactory.java │ │ │ ├── AbstractFactoryBean.java │ │ │ ├── BeanFactoryBootstrap.java │ │ │ ├── BeanFactoryLoader.java │ │ │ ├── BeanFactoryUtils.java │ │ │ ├── BootstrapException.java │ │ │ ├── ChildBeanDefinition.java │ │ │ ├── ListableBeanFactoryImpl.java │ │ │ ├── ManagedList.java │ │ │ ├── ManagedMap.java │ │ │ ├── RootBeanDefinition.java │ │ │ ├── RuntimeBeanReference.java │ │ │ ├── StaticListableBeanFactory.java │ │ │ └── package.html │ │ └── xml │ │ │ ├── BeansDtdResolver.java │ │ │ ├── XmlBeanFactory.java │ │ │ ├── package.html │ │ │ └── spring-beans.dtd │ ├── package.html │ └── propertyeditors │ │ ├── ClassEditor.java │ │ ├── CustomBooleanEditor.java │ │ ├── CustomDateEditor.java │ │ ├── CustomNumberEditor.java │ │ ├── LocaleEditor.java │ │ ├── PropertiesEditor.java │ │ ├── PropertyValuesEditor.java │ │ ├── StringArrayPropertyEditor.java │ │ ├── StringTrimmerEditor.java │ │ └── package.html │ ├── context │ ├── ApplicationContext.java │ ├── ApplicationContextAware.java │ ├── ApplicationContextException.java │ ├── ApplicationEvent.java │ ├── ApplicationEventMulticaster.java │ ├── ApplicationListener.java │ ├── ContextOptions.java │ ├── MessageSource.java │ ├── MessageSourceResolvable.java │ ├── NestingMessageSource.java │ ├── NoSuchMessageException.java │ ├── package.html │ └── support │ │ ├── AbstractApplicationContext.java │ │ ├── AbstractNestingMessageSource.java │ │ ├── AbstractXmlApplicationContext.java │ │ ├── ApplicationEventMulticasterImpl.java │ │ ├── ApplicationObjectSupport.java │ │ ├── BeanFactoryPostProcessor.java │ │ ├── ClassPathXmlApplicationContext.java │ │ ├── ConsoleListener.java │ │ ├── ContextClosedEvent.java │ │ ├── ContextRefreshedEvent.java │ │ ├── FileSystemXmlApplicationContext.java │ │ ├── MessageSourceResolvableImpl.java │ │ ├── MessageSourceResourceBundle.java │ │ ├── PropertyResourceConfigurer.java │ │ ├── ResourceBaseEntityResolver.java │ │ ├── ResourceBundleMessageSource.java │ │ ├── StaticApplicationContext.java │ │ ├── StaticMessageSource.java │ │ └── package.html │ ├── core │ ├── ErrorCoded.java │ ├── HasRootCause.java │ ├── InternalErrorException.java │ ├── NestedCheckedException.java │ ├── NestedRuntimeException.java │ ├── OrderComparator.java │ ├── Ordered.java │ ├── ParameterizableErrorCoded.java │ ├── TimeStamped.java │ └── package.html │ ├── dao │ ├── CleanupFailureDataAccessException.java │ ├── DataAccessException.java │ ├── DataAccessResourceFailureException.java │ ├── DataIntegrityViolationException.java │ ├── DeadlockLoserDataAccessException.java │ ├── IncorrectUpdateSemanticsDataAccessException.java │ ├── InvalidDataAccessApiUsageException.java │ ├── InvalidDataAccessResourceUsageException.java │ ├── OptimisticLockingFailureException.java │ ├── TypeMismatchDataAccessException.java │ ├── UncategorizedDataAccessException.java │ └── package.html │ ├── ejb │ ├── access │ │ ├── AbstractRemoteSlsbInvokerInterceptor.java │ │ ├── AbstractSlsbInvokerInterceptor.java │ │ ├── LocalSlsbInvokerInterceptor.java │ │ ├── LocalStatelessSessionProxyFactoryBean.java │ │ ├── SimpleRemoteSlsbInvokerInterceptor.java │ │ ├── SimpleRemoteStatelessSessionProxyFactoryBean.java │ │ └── package.html │ └── support │ │ ├── AbstractEnterpriseBean.java │ │ ├── AbstractJmsMessageDrivenBean.java │ │ ├── AbstractMessageDrivenBean.java │ │ ├── AbstractSessionBean.java │ │ ├── AbstractStatefulSessionBean.java │ │ ├── AbstractStatelessSessionBean.java │ │ ├── XmlBeanFactoryLoader.java │ │ └── package.html │ ├── jdbc │ ├── core │ │ ├── BadSqlGrammarException.java │ │ ├── BatchPreparedStatementSetter.java │ │ ├── ColumnExtractor.java │ │ ├── DataFieldMaxValueIncrementer.java │ │ ├── DefaultColumnExtractor.java │ │ ├── InvalidResultSetMethodInvocationException.java │ │ ├── JdbcHelper.java │ │ ├── JdbcTemplate.java │ │ ├── JdbcUpdateAffectedIncorrectNumberOfRowsException.java │ │ ├── PreparedStatementCreator.java │ │ ├── PreparedStatementCreatorFactory.java │ │ ├── PreparedStatementSetter.java │ │ ├── ReadOnlyResultSet.java │ │ ├── ResultReader.java │ │ ├── ResultSetExtracter.java │ │ ├── RowCallbackHandler.java │ │ ├── RowCountCallbackHandler.java │ │ ├── SQLErrorCodeSQLExceptionTranslater.java │ │ ├── SQLErrorCodes.java │ │ ├── SQLExceptionTranslater.java │ │ ├── SQLExceptionTranslaterFactory.java │ │ ├── SQLStateSQLExceptionTranslater.java │ │ ├── SQLWarningException.java │ │ ├── SqlParameter.java │ │ ├── UncategorizedSQLException.java │ │ ├── package.html │ │ ├── sql-error-codes.xml │ │ └── support │ │ │ ├── AbstractDataFieldMaxValueIncrementer.java │ │ │ ├── AbstractNextMaxValueProvider.java │ │ │ ├── HsqlMaxValueIncrementer.java │ │ │ ├── InvalidMaxValueIncrementerApiUsageException.java │ │ │ ├── JdbcBeanFactory.java │ │ │ ├── JdbcDaoSupport.java │ │ │ ├── MySQLMaxValueIncrementer.java │ │ │ ├── OracleSQLExceptionTranslater.java │ │ │ ├── OracleSequenceMaxValueIncrementer.java │ │ │ └── package.html │ ├── datasource │ │ ├── AbstractDataSource.java │ │ ├── CannotCloseJdbcConnectionException.java │ │ ├── CannotGetJdbcConnectionException.java │ │ ├── ConnectionHolder.java │ │ ├── DataSourceTransactionManager.java │ │ ├── DataSourceTransactionObject.java │ │ ├── DataSourceUtils.java │ │ ├── DriverManagerDataSource.java │ │ ├── SingleConnectionDataSource.java │ │ ├── SmartDataSource.java │ │ └── package.html │ ├── object │ │ ├── MappingSqlQuery.java │ │ ├── MappingSqlQueryWithParameters.java │ │ ├── RdbmsOperation.java │ │ ├── ReflectionExtractionSqlQuery.java │ │ ├── ReflectionRowExtractor.java │ │ ├── SqlFunction.java │ │ ├── SqlOperation.java │ │ ├── SqlQuery.java │ │ ├── SqlUpdate.java │ │ ├── StoredProcedure.java │ │ └── package.html │ └── util │ │ ├── JdbcUtils.java │ │ └── package.html │ ├── jndi │ ├── AbstractJndiLocator.java │ ├── ContextCallback.java │ ├── JndiObjectFactoryBean.java │ ├── JndiTemplate.java │ ├── JndiTemplateEditor.java │ ├── package.html │ └── support │ │ ├── ExpectedLookupTemplate.java │ │ ├── SimpleNamingContext.java │ │ ├── SimpleNamingContextBuilder.java │ │ └── package.html │ ├── orm │ ├── hibernate │ │ ├── HibernateAccessor.java │ │ ├── HibernateCallback.java │ │ ├── HibernateInterceptor.java │ │ ├── HibernateJdbcException.java │ │ ├── HibernateSystemException.java │ │ ├── HibernateTemplate.java │ │ ├── HibernateTransactionManager.java │ │ ├── HibernateTransactionObject.java │ │ ├── LocalDataSourceConnectionProvider.java │ │ ├── LocalSessionFactoryBean.java │ │ ├── SessionFactoryUtils.java │ │ ├── SessionHolder.java │ │ ├── package.html │ │ └── support │ │ │ ├── HibernateDaoSupport.java │ │ │ └── package.html │ └── jdo │ │ ├── JdoCallback.java │ │ ├── JdoInterceptor.java │ │ ├── JdoSystemException.java │ │ ├── JdoTemplate.java │ │ ├── JdoTransactionManager.java │ │ ├── JdoTransactionObject.java │ │ ├── JdoUsageException.java │ │ ├── LocalPersistenceManagerFactoryBean.java │ │ ├── PersistenceManagerFactoryUtils.java │ │ ├── PersistenceManagerHolder.java │ │ ├── package.html │ │ └── support │ │ ├── JdoDaoSupport.java │ │ └── package.html │ ├── remoting │ ├── RemoteAccessException.java │ ├── caucho │ │ ├── BurlapProxyFactoryBean.java │ │ ├── BurlapServiceExporter.java │ │ ├── HessianProxyFactoryBean.java │ │ ├── HessianServiceExporter.java │ │ └── package.html │ ├── package.html │ ├── rmi │ │ ├── RemoteInvocationHandler.java │ │ ├── RemoteInvocationWrapper.java │ │ ├── RmiProxyFactoryBean.java │ │ ├── RmiServiceExporter.java │ │ ├── StubInvocationHandler.java │ │ └── package.html │ └── support │ │ ├── AuthorizableRemoteProxyFactoryBean.java │ │ ├── RemoteProxyFactoryBean.java │ │ └── package.html │ ├── transaction │ ├── CannotCreateTransactionException.java │ ├── HeuristicCompletionException.java │ ├── InvalidIsolationException.java │ ├── InvalidTimeoutException.java │ ├── NestedTransactionNotPermittedException.java │ ├── NoTransactionException.java │ ├── PlatformTransactionManager.java │ ├── TransactionDefinition.java │ ├── TransactionException.java │ ├── TransactionStatus.java │ ├── TransactionSystemException.java │ ├── TransactionUsageException.java │ ├── UnexpectedRollbackException.java │ ├── interceptor │ │ ├── AttributeRegistryTransactionAttributeSource.java │ │ ├── DefaultTransactionAttribute.java │ │ ├── MapTransactionAttributeSource.java │ │ ├── NoRollbackRuleAttribute.java │ │ ├── RollbackRuleAttribute.java │ │ ├── RuleBasedTransactionAttribute.java │ │ ├── TransactionAttribute.java │ │ ├── TransactionAttributeEditor.java │ │ ├── TransactionAttributeSource.java │ │ ├── TransactionAttributeSourceEditor.java │ │ ├── TransactionInterceptor.java │ │ └── package.html │ ├── jta │ │ ├── JtaTransactionManager.java │ │ └── package.html │ ├── package.html │ └── support │ │ ├── AbstractPlatformTransactionManager.java │ │ ├── DefaultTransactionDefinition.java │ │ ├── TransactionCallback.java │ │ ├── TransactionCallbackWithoutResult.java │ │ ├── TransactionSynchronization.java │ │ ├── TransactionSynchronizationManager.java │ │ ├── TransactionTemplate.java │ │ └── package.html │ ├── ui │ └── context │ │ ├── NestingThemeSource.java │ │ ├── Theme.java │ │ ├── ThemeSource.java │ │ ├── package.html │ │ └── support │ │ ├── AbstractXmlUiApplicationContext.java │ │ ├── ResourceBundleThemeSource.java │ │ ├── SimpleTheme.java │ │ ├── StaticUiApplicationContext.java │ │ ├── UiApplicationContextUtils.java │ │ └── package.html │ ├── util │ ├── ClassLoaderUtils.java │ ├── ConstantException.java │ ├── Constants.java │ ├── Log4jConfigurer.java │ ├── ObjectArrayUtils.java │ ├── PagedListHolder.java │ ├── PagedListSourceProvider.java │ ├── PathMatcher.java │ ├── RefreshablePagedListHolder.java │ ├── ResponseTimeMonitor.java │ ├── ResponseTimeMonitorImpl.java │ ├── StopWatch.java │ ├── StringUtils.java │ ├── ThreadObjectManager.java │ └── package.html │ ├── validation │ ├── BindException.java │ ├── DataBinder.java │ ├── Errors.java │ ├── FieldError.java │ ├── ObjectError.java │ ├── ValidationUtils.java │ ├── Validator.java │ └── package.html │ └── web │ ├── bind │ ├── BindInitializer.java │ ├── BindUtils.java │ ├── EscapedErrors.java │ ├── RequestUtils.java │ ├── ServletRequestBindingException.java │ ├── ServletRequestDataBinder.java │ ├── ServletRequestParameterPropertyValues.java │ └── package.html │ ├── context │ ├── ContextLoader.java │ ├── ContextLoaderListener.java │ ├── ContextLoaderServlet.java │ ├── WebApplicationContext.java │ ├── package.html │ └── support │ │ ├── PerformanceMonitorListener.java │ │ ├── RequestHandledEvent.java │ │ ├── StaticWebApplicationContext.java │ │ ├── WebApplicationContextUtils.java │ │ ├── XmlWebApplicationContext.java │ │ └── package.html │ ├── servlet │ ├── DispatcherServlet.java │ ├── FrameworkServlet.java │ ├── HandlerAdapter.java │ ├── HandlerExecutionChain.java │ ├── HandlerInterceptor.java │ ├── HandlerMapping.java │ ├── HttpServletBean.java │ ├── LastModified.java │ ├── LocaleResolver.java │ ├── ModelAndView.java │ ├── ResourceServlet.java │ ├── ServletConfigPropertyValues.java │ ├── ThemeResolver.java │ ├── View.java │ ├── ViewResolver.java │ ├── handler │ │ ├── AbstractHandlerMapping.java │ │ ├── AbstractUrlHandlerMapping.java │ │ ├── BeanNameUrlHandlerMapping.java │ │ ├── SimpleUrlHandlerMapping.java │ │ ├── UrlAwareHandler.java │ │ └── package.html │ ├── i18n │ │ ├── AcceptHeaderLocaleResolver.java │ │ ├── CookieLocaleResolver.java │ │ ├── LocaleChangeInterceptor.java │ │ ├── SessionLocaleResolver.java │ │ └── package.html │ ├── mvc │ │ ├── AbstractCommandController.java │ │ ├── AbstractController.java │ │ ├── AbstractFormController.java │ │ ├── AbstractWizardFormController.java │ │ ├── BaseCommandController.java │ │ ├── Controller.java │ │ ├── DemoController.java │ │ ├── ParameterizableViewController.java │ │ ├── SessionRequiredException.java │ │ ├── SimpleControllerHandlerAdapter.java │ │ ├── SimpleFormController.java │ │ ├── WebContentGenerator.java │ │ ├── multiaction │ │ │ ├── InternalPathMethodNameResolver.java │ │ │ ├── MethodNameResolver.java │ │ │ ├── MultiActionController.java │ │ │ ├── NoSuchRequestHandlingMethodException.java │ │ │ ├── ParameterMethodNameResolver.java │ │ │ ├── PropertiesMethodNameResolver.java │ │ │ └── package.html │ │ └── package.html │ ├── package.html │ ├── support │ │ ├── RequestContext.java │ │ ├── RequestContextUtils.java │ │ ├── UserRoleAuthorizationInterceptor.java │ │ └── package.html │ ├── tags │ │ ├── BindErrorsTag.java │ │ ├── BindStatus.java │ │ ├── BindTag.java │ │ ├── HtmlEscapeTag.java │ │ ├── MessageTag.java │ │ ├── RequestContextAwareTag.java │ │ ├── ThemeTag.java │ │ ├── package.html │ │ └── spring.tld │ ├── theme │ │ ├── AbstractThemeResolver.java │ │ ├── CookieThemeResolver.java │ │ ├── FixedThemeResolver.java │ │ ├── SessionThemeResolver.java │ │ ├── ThemeChangeInterceptor.java │ │ └── package.html │ └── view │ │ ├── AbstractCachingViewResolver.java │ │ ├── AbstractView.java │ │ ├── BeanNameViewResolver.java │ │ ├── InternalResourceView.java │ │ ├── InternalResourceViewResolver.java │ │ ├── JstlView.java │ │ ├── RedirectView.java │ │ ├── ResourceBundleViewResolver.java │ │ ├── XmlViewResolver.java │ │ ├── document │ │ ├── AbstractExcelView.java │ │ ├── AbstractPdfView.java │ │ └── package.html │ │ ├── package.html │ │ ├── velocity │ │ ├── CommonsLoggingLogSystem.java │ │ ├── VelocityConfigurer.java │ │ ├── VelocityView.java │ │ └── package.html │ │ └── xslt │ │ ├── AbstractXsltView.java │ │ ├── FormatHelper.java │ │ └── package.html │ └── util │ ├── ExpressionEvaluationUtils.java │ ├── HtmlUtils.java │ ├── Log4jConfigListener.java │ ├── Log4jConfigServlet.java │ ├── Log4jWebConfigurer.java │ ├── WebAppRootListener.java │ ├── WebUtils.java │ └── package.html ├── test ├── com │ └── interface21 │ │ ├── aop │ │ ├── attributes │ │ │ ├── WildcardAttributeRegistryTests.java │ │ │ └── wildcardAtts.xml │ │ └── framework │ │ │ ├── AopProxyTests.java │ │ │ ├── DelegatingIntroductionInterceptorTests.java │ │ │ ├── InvokerInterceptorTests.java │ │ │ ├── LockMixin.java │ │ │ ├── Lockable.java │ │ │ ├── LockedException.java │ │ │ ├── MethodInvocationTests.java │ │ │ ├── ProxyFactoryBeanTests.java │ │ │ ├── ProxyFactoryTests.java │ │ │ ├── RegexpMethodPointcutTests.java │ │ │ ├── TimestampIntroductionInterceptor.java │ │ │ └── test.xml │ │ ├── beans │ │ ├── AbstrVetoableChangeListenerTests.java │ │ ├── AbstractPropertyValuesTests.java │ │ ├── BeanUtilsTests.java │ │ ├── BeanWrapperTestSuite.java │ │ ├── BooleanTestBean.java │ │ ├── CustomEditorTestSuite.java │ │ ├── Employee.java │ │ ├── IOther.java │ │ ├── ITestBean.java │ │ ├── MutablePropertyValuesTests.java │ │ ├── NumberTestBean.java │ │ ├── TestBean.java │ │ ├── factory │ │ │ ├── AbstractBeanFactoryTests.java │ │ │ ├── AbstractListableBeanFactoryTests.java │ │ │ ├── DummyFactory.java │ │ │ ├── HasMap.java │ │ │ ├── KnowsIfInstantiated.java │ │ │ ├── LBIInit.java │ │ │ ├── LifecycleBean.java │ │ │ ├── ListableBeanFactoryImplTestSuite.java │ │ │ ├── MustBeInitialized.java │ │ │ ├── support │ │ │ │ ├── BeanFactoryBootstrapTests.java │ │ │ │ ├── BeanFactoryUtilsTests.java │ │ │ │ ├── leaf.xml │ │ │ │ ├── middle.xml │ │ │ │ └── root.xml │ │ │ └── xml │ │ │ │ ├── DummyReferencer.java │ │ │ │ ├── MixedCollectionBean.java │ │ │ │ ├── XmlBeanFactoryTestSuite.java │ │ │ │ ├── child.xml │ │ │ │ ├── collections.xml │ │ │ │ ├── factoryCircle.xml │ │ │ │ ├── initializers.xml │ │ │ │ ├── invalid.xml │ │ │ │ ├── parent.xml │ │ │ │ ├── reftypes.xml │ │ │ │ └── test.xml │ │ └── propertyeditors │ │ │ └── PropertyEditorTestSuite.java │ │ ├── context │ │ ├── ACATest.java │ │ ├── AbstractApplicationContextTests.java │ │ ├── BeanThatListens.java │ │ ├── TestListener.java │ │ └── support │ │ │ ├── StaticApplicationContextTestSuite.java │ │ │ └── StaticMessageSourceTestSuite.java │ │ ├── ejb │ │ ├── access │ │ │ ├── LocalSlsbInvokerInterceptorTests.java │ │ │ ├── LocalStatelessSessionProxyFactoryBeanTests.java │ │ │ ├── SimpleRemoteSlsbInvokerInterceptorTests.java │ │ │ └── SimpleRemoteStatelessSessionProxyFactoryBeanTests.java │ │ └── support │ │ │ ├── EjbSupportTests.java │ │ │ └── XmlBeanFactoryLoaderTests.java │ │ ├── jdbc │ │ ├── core │ │ │ ├── JdbcTemplateTestSuite.java │ │ │ ├── MockConnectionFactory.java │ │ │ ├── ReadOnlyResultSetTestSuite.java │ │ │ ├── SqlStateExceptionTranslaterTestSuite.java │ │ │ └── support │ │ │ │ ├── JdbcBeanFactoryTests.java │ │ │ │ └── JdbcDaoSupportTests.java │ │ ├── datasource │ │ │ ├── DataSourceTransactionManagerTests.java │ │ │ ├── DataSourceUtilsTests.java │ │ │ └── DriverManagerDataSourceTests.java │ │ ├── mock │ │ │ ├── SpringMockCallableStatement.java │ │ │ ├── SpringMockConnection.java │ │ │ ├── SpringMockDataSource.java │ │ │ ├── SpringMockJdbcFactory.java │ │ │ ├── SpringMockPreparedStatement.java │ │ │ └── SpringMockStatement.java │ │ ├── object │ │ │ ├── RdbmsOperationTestSuite.java │ │ │ ├── SqlFunctionTestSuite.java │ │ │ ├── SqlQueryTestSuite.java │ │ │ ├── SqlUpdateTestSuite.java │ │ │ └── StoredProcedureTestSuite.java │ │ └── util │ │ │ └── JdbcUtilsTests.java │ │ ├── jndi │ │ ├── JndiObjectFactoryBeanTests.java │ │ ├── JndiTemplateEditorTests.java │ │ ├── JndiTemplateTests.java │ │ └── SimpleNamingContextTests.java │ │ ├── orm │ │ ├── hibernate │ │ │ ├── HibernateInterceptorTests.java │ │ │ ├── HibernateTemplateTests.java │ │ │ ├── HibernateTransactionManagerTests.java │ │ │ ├── LocalSessionFactoryBeanTests.java │ │ │ └── support │ │ │ │ └── HibernateDaoSupportTests.java │ │ └── jdo │ │ │ ├── JdoInterceptorTests.java │ │ │ ├── JdoTemplateTests.java │ │ │ ├── JdoTransactionManagerTests.java │ │ │ ├── LocalPersistenceManagerFactoryTests.java │ │ │ ├── support │ │ │ └── JdoDaoSupportTests.java │ │ │ └── test.properties │ │ ├── remoting │ │ └── RemotingTestSuite.java │ │ ├── transaction │ │ ├── JtaTransactionTestSuite.java │ │ ├── TestTransactionManager.java │ │ ├── TransactionTestSuite.java │ │ └── interceptor │ │ │ ├── BeanFactoryTransactionTests.java │ │ │ ├── PlatformTransactionManagerFacade.java │ │ │ ├── RollbackRuleTests.java │ │ │ ├── RuleBasedTransactionAttributeTests.java │ │ │ ├── TransactionAttributeEditorTests.java │ │ │ ├── TransactionAttributeSourceEditorTests.java │ │ │ ├── TransactionInterceptorTests.java │ │ │ └── transactionalBeanFactory.xml │ │ ├── util │ │ ├── ConstantsTests.java │ │ ├── ObjectArrayUtilsTests.java │ │ ├── PagedListHolderTests.java │ │ ├── PathMatcherTestSuite.java │ │ ├── StopWatchTests.java │ │ └── StringUtilsTestSuite.java │ │ ├── validation │ │ └── ValidationTestSuite.java │ │ └── web │ │ ├── bind │ │ ├── BindUtilsTestSuite.java │ │ ├── EscapedErrorsTestSuite.java │ │ ├── RequestUtilsTestSuite.java │ │ └── ServletRequestParameterPropertyValuesTestSuite.java │ │ ├── context │ │ ├── ContextAwareTestConfigBean.java │ │ ├── ContextLoaderTestSuite.java │ │ ├── ResourceBundleMessageSourceTestSuite.java │ │ ├── TestConfigBean.java │ │ ├── WEB-INF │ │ │ ├── applicationContext.xml │ │ │ ├── context-messages.properties │ │ │ ├── context-messages_en_GB.properties │ │ │ ├── context-messages_en_US.properties │ │ │ ├── contextInclude.xml │ │ │ ├── myinit.properties │ │ │ ├── test-messages.properties │ │ │ ├── test-servlet.xml │ │ │ ├── test-theme.properties │ │ │ ├── testNamespace.xml │ │ │ ├── theme.properties │ │ │ ├── theme_en_GB.properties │ │ │ ├── theme_en_US.properties │ │ │ └── web.xml │ │ └── WebApplicationContextTestSuite.java │ │ ├── mock │ │ ├── MockHttpServletRequest.java │ │ ├── MockHttpServletResponse.java │ │ ├── MockHttpSession.java │ │ ├── MockRequestDispatcher.java │ │ ├── MockServletConfig.java │ │ └── MockServletContext.java │ │ └── servlet │ │ ├── ComplexWebApplicationContext.java │ │ ├── DispatcherServletTestSuite.java │ │ ├── LocaleResolverTestSuite.java │ │ ├── SimpleWebApplicationContext.java │ │ ├── ThemeResolverTestSuite.java │ │ ├── complexviews.properties │ │ ├── handler │ │ ├── BeanNameUrlHandlerMappingTestSuite.java │ │ ├── PathMatchingUrlHandlerMappingTestSuite.java │ │ ├── SimpleUrlHandlerMappingTestSuite.java │ │ ├── map1.xml │ │ ├── map2.xml │ │ └── map3.xml │ │ ├── mvc │ │ ├── CommandControllerTestSuite.java │ │ ├── DemoControllerTestSuite.java │ │ ├── FormControllerTestSuite.java │ │ ├── MultiActionControllerTestSuite.java │ │ ├── ParameterizableViewControllerTestSuite.java │ │ └── WizardFormControllerTestSuite.java │ │ ├── tags │ │ └── TagTestSuite.java │ │ └── view │ │ ├── BaseViewTests.java │ │ ├── InternalResourceViewTests.java │ │ ├── RedirectViewTests.java │ │ ├── ResourceBundleViewResolverTestSuite.java │ │ ├── ResourceBundleViewResolverTestSuiteNoCache.java │ │ ├── ViewResolverTestSuite.java │ │ ├── testviews.properties │ │ ├── testviews_fr.properties │ │ ├── views.xml │ │ └── xslt │ │ └── FormatHelperTests.java └── log4j.properties └── xdocs ├── faq.xml ├── features.xml ├── goals.xml ├── images └── logo-blue.png ├── index.xml ├── navigation.xml └── status.xml /docs/MVC-step-by-step/Spring-MVC-Step22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/docs/MVC-step-by-step/Spring-MVC-Step22.png -------------------------------------------------------------------------------- /docs/MVC-step-by-step/Spring-MVC-step-by-step-Part-2_html_1969edd8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/docs/MVC-step-by-step/Spring-MVC-step-by-step-Part-2_html_1969edd8.png -------------------------------------------------------------------------------- /docs/MVC-step-by-step/Spring-MVC-step-by-step-Part-2_html_m3eb7013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/docs/MVC-step-by-step/Spring-MVC-step-by-step-Part-2_html_m3eb7013.png -------------------------------------------------------------------------------- /docs/MVC-step-by-step/Spring-MVC-step-by-step_html_m3871950e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/docs/MVC-step-by-step/Spring-MVC-step-by-step_html_m3871950e.png -------------------------------------------------------------------------------- /docs/MVC-step-by-step/Spring-MVC-step-by-step_html_m5b7553b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/docs/MVC-step-by-step/Spring-MVC-step-by-step_html_m5b7553b2.png -------------------------------------------------------------------------------- /docs/tutorial.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/docs/tutorial.pdf -------------------------------------------------------------------------------- /lib/ant/ant.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/ant/ant.jar -------------------------------------------------------------------------------- /lib/aop-alliance/aopalliance.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/aop-alliance/aopalliance.jar -------------------------------------------------------------------------------- /lib/caucho/burlap-2.1.7.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/caucho/burlap-2.1.7.jar -------------------------------------------------------------------------------- /lib/caucho/hessian-2.1.7.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/caucho/hessian-2.1.7.jar -------------------------------------------------------------------------------- /lib/cglib/bcel-5.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/cglib/bcel-5.1.jar -------------------------------------------------------------------------------- /lib/cglib/cglib-1.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/cglib/cglib-1.0.jar -------------------------------------------------------------------------------- /lib/clover/clover.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/clover/clover.jar -------------------------------------------------------------------------------- /lib/easymock/easymock.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/easymock/easymock.jar -------------------------------------------------------------------------------- /lib/hibernate/commons-collections.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/hibernate/commons-collections.jar -------------------------------------------------------------------------------- /lib/hibernate/commons-lang.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/hibernate/commons-lang.jar -------------------------------------------------------------------------------- /lib/hibernate/dom4j.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/hibernate/dom4j.jar -------------------------------------------------------------------------------- /lib/hibernate/hibernate2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/hibernate/hibernate2.jar -------------------------------------------------------------------------------- /lib/itext-pdf/iText.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/itext-pdf/iText.jar -------------------------------------------------------------------------------- /lib/j2ee/ejb.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/j2ee/ejb.jar -------------------------------------------------------------------------------- /lib/j2ee/jdbc2_0-stdext.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/j2ee/jdbc2_0-stdext.jar -------------------------------------------------------------------------------- /lib/j2ee/jms.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/j2ee/jms.jar -------------------------------------------------------------------------------- /lib/j2ee/jta.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/j2ee/jta.jar -------------------------------------------------------------------------------- /lib/j2ee/servlet.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/j2ee/servlet.jar -------------------------------------------------------------------------------- /lib/j2ee/xml-apis.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/j2ee/xml-apis.jar -------------------------------------------------------------------------------- /lib/jdo/jdo1_0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/jdo/jdo1_0.jar -------------------------------------------------------------------------------- /lib/jstl/jstl.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/jstl/jstl.jar -------------------------------------------------------------------------------- /lib/jstl/standard.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/jstl/standard.jar -------------------------------------------------------------------------------- /lib/junit/junit.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/junit/junit.jar -------------------------------------------------------------------------------- /lib/log4j/commons-logging.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/log4j/commons-logging.jar -------------------------------------------------------------------------------- /lib/log4j/log4j-1.2.8.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/log4j/log4j-1.2.8.jar -------------------------------------------------------------------------------- /lib/mockobjects/mockobjects-0.07-core.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/mockobjects/mockobjects-0.07-core.jar -------------------------------------------------------------------------------- /lib/mockobjects/mockobjects-0.07-j1.3-j2ee1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/mockobjects/mockobjects-0.07-j1.3-j2ee1.3.jar -------------------------------------------------------------------------------- /lib/mockobjects/mockobjects-0.07-jdk1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/mockobjects/mockobjects-0.07-jdk1.3.jar -------------------------------------------------------------------------------- /lib/poi/poi-2.0-pre3-20030728.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/poi/poi-2.0-pre3-20030728.jar -------------------------------------------------------------------------------- /lib/regexp/jakarta-oro-2.0.7.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/regexp/jakarta-oro-2.0.7.jar -------------------------------------------------------------------------------- /lib/velocity/velocity-1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/lib/velocity/velocity-1.3.jar -------------------------------------------------------------------------------- /samples/countries/ant.bat: -------------------------------------------------------------------------------- 1 | set CLASSPATH=%CLASSPATH%;..\..\lib\junit\junit.jar;lib\hsqldb.jar;lib\mysql-connector-java-2.0.14.jar 2 | %JAVA_HOME%/bin/java -cp ../../lib/ant/ant.jar;../../lib/junit/junit.jar;%JAVA_HOME%/lib/tools.jar org.apache.tools.ant.Main %1 3 | -------------------------------------------------------------------------------- /samples/countries/as/jboss/3.0.x/install.txt: -------------------------------------------------------------------------------- 1 | The file has to be put in the JBoss deploy directory. -------------------------------------------------------------------------------- /samples/countries/as/jboss/3.2.x/install.txt: -------------------------------------------------------------------------------- 1 | The file has to be put in the JBoss deploy directory. -------------------------------------------------------------------------------- /samples/countries/as/jboss/3.2.x/mysql-countries-ds.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | MySqlCountriesDS 12 | jdbc:mysql://localhost:3306/test 13 | org.gjt.mm.mysql.Driver 14 | test 15 | test 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /samples/countries/as/jboss/install.txt: -------------------------------------------------------------------------------- 1 | The file has to be put in WEB-INF directory. -------------------------------------------------------------------------------- /samples/countries/as/jboss/jboss-web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 13 | 14 | 15 | 16 | 17 | jdbc/countries-ds 18 | javax.sql.DataSource 19 | java:/DefaultDS 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /samples/countries/db/hsqldb.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/db/hsqldb.jar -------------------------------------------------------------------------------- /samples/countries/db/mysql-connector-java-3.0.8-stable-bin.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/db/mysql-connector-java-3.0.8-stable-bin.jar -------------------------------------------------------------------------------- /samples/countries/lib/content.txt: -------------------------------------------------------------------------------- 1 | Nothing here for now. -------------------------------------------------------------------------------- /samples/countries/src/com/interface21/samples/countries/appli/Country.java: -------------------------------------------------------------------------------- 1 | package com.interface21.samples.countries.appli; 2 | 3 | /** 4 | * @author Jean-Pierre PAWLAK 5 | */ 6 | public class Country implements ICountry { 7 | 8 | //~ Instance fields -------------------------------------------------------- 9 | 10 | private String code; 11 | private String name; 12 | 13 | //~ Constructors ----------------------------------------------------------- 14 | 15 | public Country() { 16 | super(); 17 | } 18 | 19 | public Country(String code, String name) { 20 | super(); 21 | this.code = code; 22 | this.name = name; 23 | } 24 | 25 | //~ Methods ---------------------------------------------------------------- 26 | 27 | public String getCode() { 28 | return code; 29 | } 30 | 31 | public String getName() { 32 | return name; 33 | } 34 | 35 | public void setCode(String code) { 36 | this.code = code; 37 | } 38 | 39 | public void setName(String name) { 40 | this.name = name; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /samples/countries/src/com/interface21/samples/countries/appli/ICountry.java: -------------------------------------------------------------------------------- 1 | package com.interface21.samples.countries.appli; 2 | 3 | /** 4 | * @author Jean-Pierre PAWLAK 5 | */ 6 | public interface ICountry { 7 | 8 | //~ Methods ---------------------------------------------------------------- 9 | 10 | public String getName(); 11 | 12 | public String getCode(); 13 | 14 | public void setName(String nom); 15 | 16 | public void setCode(String code); 17 | } 18 | -------------------------------------------------------------------------------- /samples/countries/src/com/interface21/samples/countries/dao/DaoCountryJdbcMySql.java: -------------------------------------------------------------------------------- 1 | package com.interface21.samples.countries.dao; 2 | 3 | /** 4 | * MySql Subclass for CountryDaoJdbC. 5 | * 6 | * @author Jean-Pierre Pawlak 7 | */ 8 | public class DaoCountryJdbcMySql extends DaoCountryJdbc { 9 | 10 | // MySql specific examples 11 | protected String DROP_SQL = "DROP TABLE IF EXISTS countries"; 12 | protected String CREATE_SQL = "CREATE TABLE countries (lang CHAR(2), code CHAR(2), name VARCHAR(50), PRIMARY KEY (lang,code) ) Type InnoDB"; 13 | // We don't include indexes due to the small size of this table. 14 | 15 | /** 16 | * @see com.interface21.samples.countries.dao.IDaoCountry#initBase() 17 | */ 18 | public void initBase() { 19 | this.setDropSql(DROP_SQL); 20 | this.setCreateSql(CREATE_SQL); 21 | super.initBase(); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /samples/countries/src/com/interface21/samples/countries/web/ErrorsController.java: -------------------------------------------------------------------------------- 1 | package com.interface21.samples.countries.web; 2 | 3 | import javax.servlet.ServletException; 4 | import javax.servlet.http.HttpServletRequest; 5 | import javax.servlet.http.HttpServletResponse; 6 | 7 | import com.interface21.web.servlet.ModelAndView; 8 | import com.interface21.web.servlet.mvc.multiaction.MultiActionController; 9 | 10 | /** 11 | * @author Jean-Pierre Pawlak 12 | */ 13 | public class ErrorsController extends MultiActionController { 14 | // handlers 15 | 16 | /** 17 | * Custom handler for http404 18 | * @param request current HTTP request 19 | * @param response current HTTP response 20 | * @return a ModelAndView to render the response 21 | */ 22 | public ModelAndView handleHttp404(HttpServletRequest request, HttpServletResponse response) throws ServletException { 23 | return new ModelAndView("errorHttp404View"); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/blue.properties: -------------------------------------------------------------------------------- 1 | css=/themes/blue/blue.css 2 | img-back=/themes/blue/bback_en.gif -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/blue_de.properties: -------------------------------------------------------------------------------- 1 | img-back=/themes/blue/bback_de.gif -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/blue_en.properties: -------------------------------------------------------------------------------- 1 | img-back=/themes/blue/bback_en.gif -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/blue_fr.properties: -------------------------------------------------------------------------------- 1 | img-back=/themes/blue/bback_fr.gif -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/log4j.properties: -------------------------------------------------------------------------------- 1 | # For JBoss: Avoid to setup log4j outside $JBOSS_HOME/server/default/deploy/log4j.xml 2 | 3 | # For all other servers: Comment out the Log4J listener in web.xml too 4 | # log4j.rootCategory=INFO, stdout, logfile 5 | 6 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 7 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 8 | log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n 9 | 10 | log4j.appender.logfile=org.apache.log4j.RollingFileAppender 11 | log4j.appender.logfile.File=${countries.root}/WEB-INF/countries.log 12 | log4j.appender.logfile.MaxFileSize=512KB 13 | # Keep three backup files 14 | log4j.appender.logfile.MaxBackupIndex=3 15 | log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 16 | #Pattern to output : date priority [category] - line_separator 17 | log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n 18 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/messages_de.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/WEB-INF/classes/messages_de.properties -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/messages_en.properties: -------------------------------------------------------------------------------- 1 | # All english properties are in main properties file. -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/messages_fr.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/WEB-INF/classes/messages_fr.properties -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/none.properties: -------------------------------------------------------------------------------- 1 | css= 2 | img-back=/images/back.gif -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/theme.properties: -------------------------------------------------------------------------------- 1 | css=/themes/white/white.css 2 | img-back=/themes/white/wback_en.gif -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/theme_de.properties: -------------------------------------------------------------------------------- 1 | img-back=/themes/white/wback_de.gif -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/theme_en.properties: -------------------------------------------------------------------------------- 1 | img-back=/themes/white/wback_en.gif -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/theme_fr.properties: -------------------------------------------------------------------------------- 1 | img-back=/themes/white/wback_fr.gif -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/views-countries_de.properties: -------------------------------------------------------------------------------- 1 | # This takes precedence for german users 2 | configView.attributesCSV=htitle=[config.htitle],nav=[nav.jsp],content=[config_de.jsp] 3 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/views-countries_en.properties: -------------------------------------------------------------------------------- 1 | # This takes precedence for english users 2 | configView.attributesCSV=htitle=[config.htitle],nav=[nav.jsp],content=[config.jsp] 3 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/classes/views-countries_fr.properties: -------------------------------------------------------------------------------- 1 | # This takes precedence for french users 2 | configView.attributesCSV=htitle=[config.htitle],nav=[nav.jsp],content=[config_fr.jsp] 3 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/views/jsp/common/includes.jsp: -------------------------------------------------------------------------------- 1 | <%@ page session="false"%> 2 | 3 | <%@ taglib prefix="spring" uri="/spring" %> 4 | 5 | <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 6 | <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %> 7 | 8 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/views/jsp/countries/config_de.jsp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/WEB-INF/views/jsp/countries/config_de.jsp -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/views/jsp/countries/config_fr.jsp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/WEB-INF/views/jsp/countries/config_fr.jsp -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/views/jsp/countries/copy.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="../common/includes.jsp" %> 2 | 3 |

4 |

 

5 | 6 | 7 |

8 |
9 | 10 |

11 |
12 |
13 |
14 |
15 |
16 | 17 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/views/jsp/countries/home.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="../common/includes.jsp" %> 2 | 3 |

4 |

 

5 |

6 |

version

7 | 8 |
9 | 10 |
11 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/views/jsp/countries/main/detail.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="../../common/includes.jsp" %> 2 | 3 |

4 |

 

5 |

6 | :
7 | 8 |
9 | " alt="gen.back"/> 10 |
11 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/views/jsp/countries/main/detailnav.jsp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/WEB-INF/views/jsp/countries/main/detailnav.jsp -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/views/jsp/countries/main/nav.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="../../common/includes.jsp" %> 2 | 3 | 14 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/views/jsp/countries/model.jsp: -------------------------------------------------------------------------------- 1 | 2 | <%@ include file="../common/includes.jsp" %> 3 | 4 | 5 | 6 | <fmt:message key="${htitle}"/> 7 | 8 | 9 | " type="text/css" /> 10 | 11 | 12 | 13 |
14 |

15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/views/jsp/countries/top.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="../common/includes.jsp" %> 2 | -------------------------------------------------------------------------------- /samples/countries/war/WEB-INF/views/jsp/errors/http404.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="../common/includes.jsp" %> 2 | 3 | 6 |

7 |
8 |
9 |

10 |
11 |
12 | 13 |
14 | -------------------------------------------------------------------------------- /samples/countries/war/images/back.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/images/back.gif -------------------------------------------------------------------------------- /samples/countries/war/images/de.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/images/de.gif -------------------------------------------------------------------------------- /samples/countries/war/images/fr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/images/fr.gif -------------------------------------------------------------------------------- /samples/countries/war/images/us.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/images/us.gif -------------------------------------------------------------------------------- /samples/countries/war/index.jsp: -------------------------------------------------------------------------------- 1 | <%@ page session="false"%> 2 | <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /samples/countries/war/themes/blue/bback_de.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/themes/blue/bback_de.gif -------------------------------------------------------------------------------- /samples/countries/war/themes/blue/bback_en.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/themes/blue/bback_en.gif -------------------------------------------------------------------------------- /samples/countries/war/themes/blue/bback_fr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/themes/blue/bback_fr.gif -------------------------------------------------------------------------------- /samples/countries/war/themes/blue/logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/themes/blue/logo.gif -------------------------------------------------------------------------------- /samples/countries/war/themes/white/logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/themes/white/logo.gif -------------------------------------------------------------------------------- /samples/countries/war/themes/white/wback_de.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/themes/white/wback_de.gif -------------------------------------------------------------------------------- /samples/countries/war/themes/white/wback_en.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/themes/white/wback_en.gif -------------------------------------------------------------------------------- /samples/countries/war/themes/white/wback_fr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/countries/war/themes/white/wback_fr.gif -------------------------------------------------------------------------------- /samples/countries/warfile.bat: -------------------------------------------------------------------------------- 1 | .\ant.bat warfile -------------------------------------------------------------------------------- /samples/petclinic/ant.bat: -------------------------------------------------------------------------------- 1 | set CLASSPATH=%CLASSPATH%;..\..\lib\junit\junit.jar;lib\hsqldb.jar;lib\mysql-connector-java-2.0.14.jar 2 | %JAVA_HOME%/bin/java -cp ../../lib/ant/ant.jar;../../lib/junit/junit.jar;%JAVA_HOME%/lib/tools.jar org.apache.tools.ant.Main %1 3 | -------------------------------------------------------------------------------- /samples/petclinic/as/jboss/3.2.x/install.txt: -------------------------------------------------------------------------------- 1 | The files have to be put in the JBoss deploy directory. -------------------------------------------------------------------------------- /samples/petclinic/as/jboss/3.2.x/mysql-petclinic-ds.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | MySqlPetclinicDS 12 | jdbc:mysql://jppserver:3306/petclinic 13 | org.gjt.mm.mysql.Driver 14 | pc 15 | pc 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /samples/petclinic/as/jboss/jboss-web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | jdbc/petclinicHSQL 7 | javax.sql.DataSource 8 | java:/DefaultDS 9 | 10 | 11 | jdbc/petclinicMYSQL 12 | javax.sql.DataSource 13 | java:/MySqlPetclinicDS 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /samples/petclinic/db/hsqldb/dropDB.txt: -------------------------------------------------------------------------------- 1 | DROP TABLE visits_seq; 2 | DROP TABLE visits; 3 | DROP TABLE vet_specialties; 4 | DROP TABLE specialties_seq; 5 | DROP TABLE specialties; 6 | DROP TABLE vets_seq; 7 | DROP TABLE vets; 8 | DROP TABLE pets_seq; 9 | DROP TABLE pets; 10 | DROP TABLE types_seq; 11 | DROP TABLE types; 12 | DROP TABLE owners_seq; 13 | DROP TABLE owners; 14 | -------------------------------------------------------------------------------- /samples/petclinic/db/hsqldb/manager.bat: -------------------------------------------------------------------------------- 1 | java -cp hsqldb.jar org.hsqldb.util.DatabaseManager 2 | 3 | -------------------------------------------------------------------------------- /samples/petclinic/db/hsqldb/manager.sh: -------------------------------------------------------------------------------- 1 | java -cp ../../lib/hsqldb.jar org.hsqldb.util.DatabaseManager 2 | -------------------------------------------------------------------------------- /samples/petclinic/db/hsqldb/petclinic.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/petclinic/db/hsqldb/petclinic.data -------------------------------------------------------------------------------- /samples/petclinic/db/hsqldb/petclinic.properties: -------------------------------------------------------------------------------- 1 | #HSQL database 2 | #Mon Jun 23 15:34:42 CEST 2003 3 | sql.strict_fk=true 4 | readonly=false 5 | sql.strong_fk=true 6 | hsqldb.version=1.7.1 7 | version=1.7.1 8 | hsqldb.cache_scale=14 9 | sql.compare_in_locale=false 10 | sql.month=true 11 | hsqldb.log_size=200 12 | modified=yes 13 | hsqldb.cache_version=1.7.0 14 | hsqldb.original_version=1.7.1 15 | hsqldb.compatible_version=1.7.0 16 | sql.enforce_size=false 17 | -------------------------------------------------------------------------------- /samples/petclinic/db/hsqldb/server.bat: -------------------------------------------------------------------------------- 1 | java -classpath ..\..\lib\hsqldb.jar org.hsqldb.Server -database petclinic 2 | -------------------------------------------------------------------------------- /samples/petclinic/db/hsqldb/server.properties: -------------------------------------------------------------------------------- 1 | server.trace=true 2 | -------------------------------------------------------------------------------- /samples/petclinic/db/hsqldb/server.sh: -------------------------------------------------------------------------------- 1 | java -classpath ../../lib/hsqldb.jar org.hsqldb.Server -database petclinic 2 | -------------------------------------------------------------------------------- /samples/petclinic/db/mysql/dropDB.txt: -------------------------------------------------------------------------------- 1 | DROP DATABASE petclinic; 2 | -------------------------------------------------------------------------------- /samples/petclinic/lib-new/mysql-connector-java-3.0.8-stable-bin.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/petclinic/lib-new/mysql-connector-java-3.0.8-stable-bin.jar -------------------------------------------------------------------------------- /samples/petclinic/lib/hsqldb.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/petclinic/lib/hsqldb.jar -------------------------------------------------------------------------------- /samples/petclinic/lib/mysql-connector-java-2.0.14-bin.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/petclinic/lib/mysql-connector-java-2.0.14-bin.jar -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/Entity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Entity.java 3 | * 4 | * Created on June 17, 2003, 8:52 AM 5 | */ 6 | 7 | package petclinic; 8 | 9 | /** 10 | * Simple JavaBean business object with an id property. 11 | * Used as a base class for objects needing this property. 12 | * 13 | * @author Ken Krebs 14 | */ 15 | public class Entity { 16 | 17 | /** Holds value of property id. */ 18 | private int id; 19 | 20 | /** Getter for property id. 21 | * @return Value of property id. 22 | */ 23 | public int getId() { 24 | return this.id; 25 | } 26 | 27 | /** Setter for property id. 28 | * @param id New value of property id. 29 | */ 30 | public void setId(int id) { 31 | this.id = id; 32 | } 33 | 34 | /** Method to copy properties from another Entity. 35 | * @param entity Properties source 36 | */ 37 | public void copyPropertiesFrom(Entity entity) { 38 | setId(entity.getId()); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/NamedEntity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * NamedEntity.java 3 | * 4 | */ 5 | 6 | package petclinic; 7 | 8 | /** 9 | * Simple JavaBean business object adds a name property to Entity. 10 | * Used as a base class for objects needing these properties. 11 | * 12 | * @author Ken Krebs 13 | */ 14 | public class NamedEntity extends Entity { 15 | 16 | /** Holds value of property name. */ 17 | private String name; 18 | 19 | /** Getter for property name. 20 | * @return Value of property name. 21 | */ 22 | public String getName() { 23 | return this.name; 24 | } 25 | 26 | /** Setter for property name. 27 | * @param name New value of property name. 28 | */ 29 | public void setName(String name) { 30 | this.name = name; 31 | } 32 | 33 | /** Method to copy properties from another NamedEntity. 34 | * @param entity Properties source 35 | */ 36 | public void copyPropertiesFrom(NamedEntity entity) { 37 | super.copyPropertiesFrom(entity); 38 | setName(entity.getName()); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/NoSuchEntityException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * NoSuchEntityException.java 3 | * 4 | */ 5 | 6 | package petclinic; 7 | 8 | import com.interface21.core.NestedRuntimeException; 9 | 10 | /** 11 | * Exception thrown when an id reference is made to an 12 | * Entity that should be in the system but is not. 13 | * 14 | * @author Ken Krebs 15 | */ 16 | public class NoSuchEntityException extends NestedRuntimeException { 17 | 18 | /** 19 | * Creates a new instance of NoSuchIdException. 20 | */ 21 | public NoSuchEntityException(Entity entity) { 22 | super("No such " + entity.getClass().getName() + " with id " + entity.getId()); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/Vet.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Vet.java 3 | * 4 | */ 5 | 6 | package petclinic; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * Simple JavaBean business object representing a veterinarian. 12 | * 13 | * @author Ken Krebs 14 | */ 15 | public class Vet extends Person { 16 | 17 | /** Holds value of property specialties. */ 18 | private List specialties; 19 | 20 | /** Getter for property specialties. 21 | * @return Value of property specialties. 22 | */ 23 | public List getSpecialties() { 24 | return this.specialties; 25 | } 26 | 27 | /** Setter for property specialties. 28 | * @param specialties New value of property specialties. 29 | */ 30 | public void setSpecialties(List specialties) { 31 | this.specialties = specialties; 32 | } 33 | 34 | /** Method to copy properties from another Vet. 35 | * @param vet Properties source 36 | */ 37 | public void copyPropertiesFrom(Vet vet) { 38 | super.copyPropertiesFrom(vet); 39 | setSpecialties(vet.getSpecialties()); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/jdbc/HsqlClinic.java: -------------------------------------------------------------------------------- 1 | /* 2 | * HsqlClinic.java 3 | * 4 | */ 5 | 6 | package petclinic.jdbc; 7 | 8 | import com.interface21.jdbc.core.support.HsqlMaxValueIncrementer; 9 | 10 | /** 11 | * JavaBean Clinic Hsql implementation 12 | * 13 | * @author Ken Krebs 14 | */ 15 | public class HsqlClinic extends AbstractJdbcClinic { 16 | 17 | /** Method sets up Insert operations with Hsql key generators */ 18 | protected void setupRdbmsOperations() { 19 | OwnerInsert ownerInsert = new OwnerInsert(new HsqlMaxValueIncrementer(getDataSource(), "owners_seq", "seq")); 20 | setOwnerInsert(ownerInsert); 21 | 22 | PetInsert petInsert = new PetInsert(new HsqlMaxValueIncrementer(getDataSource(), "pets_seq", "seq")); 23 | setPetInsert(petInsert); 24 | 25 | VisitInsert visitInsert = new VisitInsert(new HsqlMaxValueIncrementer(getDataSource(), "visits_seq", "seq")); 26 | setVisitInsert(visitInsert); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/jdbc/MysqlClinic.java: -------------------------------------------------------------------------------- 1 | /* 2 | * MysqlClinic.java 3 | * 4 | */ 5 | 6 | package petclinic.jdbc; 7 | 8 | import com.interface21.jdbc.core.support.MySQLMaxValueIncrementer; 9 | 10 | /** 11 | * JavaBean Clinic Mysql implementation 12 | * 13 | * @author Ken Krebs 14 | */ 15 | public class MysqlClinic extends AbstractJdbcClinic { 16 | 17 | /** Method sets up Insert operations with Mysql key generators */ 18 | protected void setupRdbmsOperations() { 19 | OwnerInsert ownerInsert = new OwnerInsert(new MySQLMaxValueIncrementer(getDataSource(), "owners_seq", "seq")); 20 | setOwnerInsert(ownerInsert); 21 | 22 | PetInsert petInsert = new PetInsert(new MySQLMaxValueIncrementer(getDataSource(), "pets_seq", "seq")); 23 | setPetInsert(petInsert); 24 | 25 | VisitInsert visitInsert = new VisitInsert(new MySQLMaxValueIncrementer(getDataSource(), "visits_seq", "seq")); 26 | setVisitInsert(visitInsert); 27 | } 28 | 29 | } 30 | 31 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/jdbc/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The classes in this package represent the implementation of the primary Business API 5 | and Persistence Layers of Petclinic. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The classes in this package represent the Business Layer of Petclinic. 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/validation/FindOwnersValidator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * FindOwnersValidator.java 3 | * 4 | */ 5 | 6 | package petclinic.validation; 7 | 8 | import petclinic.Owner; 9 | 10 | import com.interface21.validation.Errors; 11 | import com.interface21.validation.Validator; 12 | 13 | /** 14 | * JavaBean Validator for FindOwnerForm. 15 | * 16 | * @author Ken Krebs 17 | */ 18 | public class FindOwnersValidator implements Validator { 19 | 20 | public boolean supports(Class clazz) { 21 | return clazz.equals(Owner.class); 22 | } 23 | 24 | public void validate(Object obj, Errors errors) { 25 | Owner owner = (Owner) obj; 26 | String lastName = owner.getLastName(); 27 | if(lastName == null || "".equals(lastName)) { 28 | errors.rejectValue("lastName", "required", null, "required"); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/validation/PetValidator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * PetValidator.java 3 | * 4 | */ 5 | 6 | package petclinic.validation; 7 | 8 | import petclinic.Pet; 9 | 10 | import com.interface21.validation.Errors; 11 | import com.interface21.validation.Validator; 12 | 13 | /** 14 | * JavaBean Validator for Pet Forms. 15 | * 16 | * @author Ken Krebs 17 | */ 18 | public class PetValidator implements Validator { 19 | 20 | public boolean supports(Class clazz) { 21 | return clazz.equals(Pet.class); 22 | } 23 | 24 | public void validate(Object obj, Errors errors) { 25 | Pet pet = (Pet) obj; 26 | String name = pet.getName(); 27 | if (name == null || "".equals(name)) { 28 | errors.rejectValue("name", "required", null, "required"); 29 | } 30 | if (pet.getId() == 0 && pet.getOwner().hasPet(name)) { 31 | errors.rejectValue("name", "duplicate", null, "already exists"); 32 | } 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/validation/VisitValidator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * VisitValidator.java 3 | * 4 | */ 5 | 6 | package petclinic.validation; 7 | 8 | import petclinic.Visit; 9 | 10 | import com.interface21.validation.Errors; 11 | import com.interface21.validation.Validator; 12 | 13 | /** 14 | * JavaBean Validator for Visit Forms. 15 | * 16 | * @author Ken Krebs 17 | */ 18 | public class VisitValidator implements Validator { 19 | 20 | public boolean supports(Class clazz) { 21 | return clazz.equals(Visit.class); 22 | } 23 | 24 | public void validate(Object obj, Errors errors) { 25 | Visit visit = (Visit) obj; 26 | String description = visit.getDescription(); 27 | if(description == null || "".equals(description)) { 28 | errors.rejectValue("description", "required", null, "required"); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/validation/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The classes in this package represent the set of Validator objects 5 | the Business Layer makes available to the Presentation Layer. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /samples/petclinic/src/petclinic/web/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The classes in this package represent a Web Application implementation of 5 | the Presentation Layer of Petclinic. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /samples/petclinic/test/src/petclinic/OwnerTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * OwnerTest.java 3 | * 4 | */ 5 | 6 | package petclinic; 7 | 8 | import junit.framework.*; 9 | 10 | /** 11 | * JUnit test for Owner 12 | * 13 | * @author Ken Krebs 14 | */ 15 | public class OwnerTest extends TestCase { 16 | 17 | /** Test of hasPet method, of class Owner. */ 18 | public void testHasPet() { 19 | System.out.println("testHasPet"); 20 | 21 | Owner owner = new Owner(); 22 | Pet fido = new Pet(); 23 | fido.setName("Fido"); 24 | assertFalse(owner.hasPet("Fido")); 25 | assertFalse(owner.hasPet("fido")); 26 | owner.addPet(fido); 27 | assertTrue(owner.hasPet("Fido")); 28 | assertTrue(owner.hasPet("fido")); 29 | } 30 | 31 | 32 | } 33 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/classes/log4j.properties: -------------------------------------------------------------------------------- 1 | # For JBoss: Avoid to setup log4j outside $JBOSS_HOME/server/default/deploy/log4j.xml 2 | 3 | # For all other servers: Comment out the Log4J listener in web.xml too 4 | # log4j.rootCategory=INFO, stdout, logfile 5 | 6 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 7 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 8 | log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n 9 | 10 | log4j.appender.logfile=org.apache.log4j.RollingFileAppender 11 | log4j.appender.logfile.File=${petclinic.root}/WEB-INF/petclinic.log 12 | log4j.appender.logfile.MaxFileSize=512KB 13 | # Keep three backup files 14 | log4j.appender.logfile.MaxBackupIndex=3 15 | log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 16 | #Pattern to output : date priority [category] - line_separator 17 | log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n 18 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/classes/messages.properties: -------------------------------------------------------------------------------- 1 | welcome=Welcome 2 | required=is required 3 | notFound=has not been found 4 | duplicate=is already in use 5 | nonNumeric=must be all numeric 6 | duplicateFormSubmission=Duplicate form submission is not allowed 7 | typeMismatch.date=invalid date 8 | typeMismatch.birthDate=invalid date 9 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/classes/messages_de.properties: -------------------------------------------------------------------------------- 1 | welcome=Willkommen 2 | required=is required 3 | notFound=has not been found 4 | duplicate=is already in use 5 | nonNumeric=must be all numeric 6 | duplicateFormSubmission=Duplicate form submission is not allowed 7 | typeMismatch.date=invalid date 8 | typeMismatch.birthDate=invalid date 9 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/classes/messages_en.properties: -------------------------------------------------------------------------------- 1 | welcome=Welcome 2 | required=is required 3 | notFound=has not been found 4 | duplicate=is already in use 5 | nonNumeric=must be all numeric 6 | duplicateFormSubmission=Duplicate form submission is not allowed 7 | typeMismatch.date=invalid date 8 | typeMismatch.birthDate=invalid date 9 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/jsp/fields/address.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/jsp/includes.jsp" %> 2 | 3 | Address: 4 | 5 | 6 | 7 | 8 |
" > 9 |
10 |

11 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/jsp/fields/city.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/jsp/includes.jsp" %> 2 | 3 | City: 4 | 5 | 6 | 7 | 8 |
" > 9 |
10 |

11 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/jsp/fields/firstName.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/jsp/includes.jsp" %> 2 | 3 | First Name: 4 | 5 | 6 | 7 | 8 |
" > 9 |
10 |

11 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/jsp/fields/lastName.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/jsp/includes.jsp" %> 2 | 3 | Last Name: 4 | 5 | 6 | 7 | 8 |
" > 9 |
10 |

11 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/jsp/fields/telephone.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/jsp/includes.jsp" %> 2 | 3 | Telephone: 4 | 5 | 6 | 7 | 8 |
" > 9 |
10 |

11 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/jsp/findOwners.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/jsp/includes.jsp" %> 2 | 3 |

4 |

Find Owners:

5 | 6 | 7 | 8 | 9 | 10 |

11 |

12 | 13 | 14 | 15 |

16 |
17 | ">Add Owner 18 |

19 |
20 | ">Home 21 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/jsp/includes.jsp: -------------------------------------------------------------------------------- 1 | <%@ page session="false"%> 2 | 3 | <%@ taglib prefix="spring" uri="/spring" %> 4 | 5 | <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 6 | <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %> 7 | 8 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/jsp/ownerForm.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/jsp/includes.jsp" %> 2 | 3 |

4 |

New Owner:

5 | 6 | 7 | 8 | 9 | 10 |

11 |

12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |

25 |
26 | ">Home 27 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/jsp/owners.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/jsp/includes.jsp" %> 2 | 3 |

4 |

Owners:

5 | 6 | 7 | 8 | 9 | 15 | 16 | 17 | 18 | 23 | 24 | 25 |
NameAddressCityTelephonePets
10 |
"> 11 | "/> 12 | "/> 13 | 14 |
19 | 20 | 21 | 22 |
26 |

27 |
28 | ">Home 29 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/jsp/vets.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/jsp/includes.jsp" %> 2 | 3 |

4 |

Veterinarians:

5 | 6 | 7 | 8 | 9 | 10 | 15 | 16 | 17 |
NameSpecialties
11 | 12 | 13 | 14 |
18 |

19 |
20 | ">Home 21 | -------------------------------------------------------------------------------- /samples/petclinic/war/WEB-INF/jsp/welcome.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/jsp/includes.jsp" %> 2 | 3 |

4 |

5 | ">Find owner 6 |

7 | ">Display all veterinarians 8 |

9 | ">Tutorial 10 |

11 | ">Documentation 12 | 13 | -------------------------------------------------------------------------------- /samples/petclinic/war/index.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/jsp/includes.jsp" %> 2 | 3 | <%-- Redirected because we can't set the welcome page to a virtual URL. --%> 4 | 5 | 6 | -------------------------------------------------------------------------------- /samples/skeletons/readme.txt: -------------------------------------------------------------------------------- 1 | -- Spring application skeletons -- 2 | @author Juergen Hoeller 3 | 4 | This directory contains application skeletons for various scenarios, 5 | each in its own subdirectory. Those are not executable apps but just 6 | intended as configuration showcases that can serve as starting point 7 | for custom projects. All config files are extensively documented. 8 | 9 | For further details on the mentioned framework classes, consult the 10 | Spring Javadocs in the /docs/api directory. The class descriptions 11 | do not only present the respective features, they also give usage 12 | hints and illustrate general best practices. 13 | 14 | Note that the sample application classes in the "example" package 15 | that are mentioned in the config files are not included, as those 16 | definitions just serve as configuration blueprints. Some hints 17 | on how they might be implemented are given in the comments. 18 | -------------------------------------------------------------------------------- /samples/skeletons/webapp-hibernate/WEB-INF/classes/example.hbm.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | 11 | 12 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /samples/skeletons/webapp-typical/WEB-INF/classes/example-messages.properties: -------------------------------------------------------------------------------- 1 | # Sample Spring message definitions 2 | 3 | # For example-servlet application context 4 | # For English language (default) 5 | 6 | # Standard ResourceBundle syntax applies 7 | 8 | myOtherKey=my other message 9 | required=must be specified 10 | typeMismatch.date=invalid date 11 | -------------------------------------------------------------------------------- /samples/skeletons/webapp-typical/WEB-INF/classes/example-messages_de.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/skeletons/webapp-typical/WEB-INF/classes/example-messages_de.properties -------------------------------------------------------------------------------- /samples/skeletons/webapp-typical/WEB-INF/classes/log4j.properties: -------------------------------------------------------------------------------- 1 | # Sample Log4J configuration for a typical Spring web app 2 | 3 | # Standard Log4J syntax applies 4 | 5 | 6 | # Log all messages down to level INFO 7 | # Write messages to console and to example.log file 8 | 9 | log4j.rootCategory=INFO, stdout, examplefile 10 | 11 | 12 | # Defines the console logger 13 | 14 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 15 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 16 | log4j.appender.stdout.layout.ConversionPattern=%d %p %c - %m%n 17 | 18 | 19 | # Defines the file logger, using the "web app root" system property 20 | # (set by Log4jConfigListener) for a log file relative to the web app 21 | 22 | log4j.appender.examplefile=org.apache.log4j.FileAppender 23 | log4j.appender.examplefile.File=${example.root}/WEB-INF/example.log 24 | log4j.appender.examplefile.layout=org.apache.log4j.PatternLayout 25 | log4j.appender.examplefile.layout.ConversionPattern=%d %p %c - %m%n 26 | -------------------------------------------------------------------------------- /samples/skeletons/webapp-typical/WEB-INF/classes/messages.properties: -------------------------------------------------------------------------------- 1 | # Sample Spring message definitions 2 | 3 | # For root application context 4 | # For English language (default) 5 | 6 | # Standard ResourceBundle syntax applies 7 | 8 | myKey=my message 9 | required=must not be empty 10 | typeMismatch=invalid field content 11 | -------------------------------------------------------------------------------- /samples/skeletons/webapp-typical/WEB-INF/classes/messages_de.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/samples/skeletons/webapp-typical/WEB-INF/classes/messages_de.properties -------------------------------------------------------------------------------- /samples/skeletons/webapp-typical/WEB-INF/classes/views.properties: -------------------------------------------------------------------------------- 1 | # Sample Spring view definitions 2 | 3 | # For English language (default) 4 | 5 | # Standard ResourceBundle syntax applies 6 | 7 | # Format is 8 | # viewName.class= 9 | # viewName.= 10 | # ...more property settings 11 | 12 | 13 | # Defines view with symbolic name "example1" 14 | 15 | example1.class=com.interface21.web.servlet.view.InternalResourceView 16 | example1.url=/WEB-INF/jsp/example1.jsp 17 | 18 | 19 | # Defines view with symbolic name "example2" 20 | # specifies JstlView for exporting message source and user locale to JSTL 21 | # automatically adds a RequestContext instance as request attribute "rc" 22 | 23 | example2.class=com.interface21.web.servlet.view.JstlView 24 | example2.requestContextAttribute=rc 25 | example2.url=/WEB-INF/jsp/example2_new.jsp 26 | -------------------------------------------------------------------------------- /samples/skeletons/webapp-typical/WEB-INF/classes/views_de.properties: -------------------------------------------------------------------------------- 1 | # Sample Spring view definitions 2 | 3 | # For German language 4 | 5 | # Standard ResourceBundle syntax applies 6 | 7 | # Format is 8 | # viewName.class= 9 | # viewName.= 10 | # ...more property settings 11 | 12 | 13 | # Defines view with symbolic name "example1" 14 | 15 | example1.class=com.interface21.web.servlet.view.InternalResourceView 16 | example1.url=/WEB-INF/jsp/example1_de.jsp 17 | 18 | 19 | # Defines view with symbolic name "example2" 20 | 21 | example2.class=com.interface21.web.servlet.view.JstlView 22 | example2.requestContextAttribute=rc 23 | example2.url=/WEB-INF/jsp/example2_new_de.jsp 24 | -------------------------------------------------------------------------------- /sandbox/com/interface21/aop/interceptor/EventPublicationInterceptor.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.aop.interceptor; 3 | 4 | import org.aopalliance.intercept.MethodInterceptor; 5 | import org.aopalliance.intercept.MethodInvocation; 6 | 7 | 8 | /** 9 | * Should really move to context package. AOP 10 | * shouldn't depend on context... 11 | */ 12 | public class EventPublicationInterceptor implements MethodInterceptor { 13 | 14 | /** 15 | * @see Interceptor#invoke(Invocation) 16 | */ 17 | public Object invoke(MethodInvocation invocation) throws Throwable { 18 | return null; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /sandbox/com/interface21/core/NodeCountVisitor.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.core; 3 | import java.util.LinkedList; 4 | import java.util.List; 5 | 6 | /** 7 | * Test Visitor. Useful for testing. 8 | */ 9 | public class NodeCountVisitor implements Visitor { 10 | 11 | private int nodeCount; 12 | 13 | private List visited = new LinkedList(); 14 | 15 | /** 16 | * @see Visitor#enterComposite(Visitable, int) 17 | */ 18 | public boolean enterComposite(Visitable host, int depth) { 19 | recordVisit(host); 20 | return true; 21 | } 22 | 23 | protected void recordVisit(Visitable host) { 24 | if (visited.contains(host)) 25 | throw new RuntimeException("Node [" + host + "] visited twice"); 26 | ++nodeCount; 27 | visited.add(host); 28 | } 29 | 30 | /** 31 | * @see Visitor#exitComposite(Visitable) 32 | */ 33 | public void exitComposite(Visitable host) { 34 | } 35 | 36 | /** 37 | * @see Visitor#visitLeaf(Visitable, int) 38 | */ 39 | public void visitLeaf(Visitable host, int depth) { 40 | recordVisit(host); 41 | } 42 | 43 | public int getNodeCount() { 44 | return nodeCount; 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /sandbox/com/interface21/samples/crud/web/AdminUtilisateursControleur.jav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/sandbox/com/interface21/samples/crud/web/AdminUtilisateursControleur.jav -------------------------------------------------------------------------------- /sandbox/com/interface21/samples/crud/web/SirenesControleur.jav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/sandbox/com/interface21/samples/crud/web/SirenesControleur.jav -------------------------------------------------------------------------------- /sandbox/com/interface21/samples/crud/web/crud-servet.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | vueSirene_liste 6 | vueSirene_saisie 7 | 8 | 9 | 12 | 13 | vueAdminUtilisateur_liste 14 | vueAdminUtilisateur_saisie 15 | 16 | -------------------------------------------------------------------------------- /sandbox/com/interface21/samples/crud/web/desc.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/vues/jsp/commun/includes.jsp" %> 2 |

3 | 4 |

5 |

6 | "> 7 | 8 |

9 | -------------------------------------------------------------------------------- /sandbox/com/interface21/samples/crud/web/email.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/vues/jsp/commun/includes.jsp" %> 2 |

3 | 4 | 5 |

6 | "> 7 | 8 |

9 | -------------------------------------------------------------------------------- /sandbox/com/interface21/samples/crud/web/fax.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/vues/jsp/commun/includes.jsp" %> 2 |

3 | 4 | 5 |

6 | "> 7 | 8 |

9 | -------------------------------------------------------------------------------- /sandbox/com/interface21/samples/crud/web/nom.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/vues/jsp/commun/includes.jsp" %> 2 |

3 | 4 | 5 |

6 | "> 7 | 8 |

9 | -------------------------------------------------------------------------------- /sandbox/com/interface21/samples/crud/web/pays.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/vues/jsp/commun/includes.jsp" %> 2 |

3 | 4 | 5 |

6 | 9 | 10 |

11 | -------------------------------------------------------------------------------- /sandbox/com/interface21/samples/crud/web/tel.jsp: -------------------------------------------------------------------------------- 1 | <%@ include file="/WEB-INF/vues/jsp/commun/includes.jsp" %> 2 |

3 | 4 | 5 |

6 | "> 7 | 8 |

9 | -------------------------------------------------------------------------------- /sandbox/com/interface21/web/servlet/mvc/AbstractListFormController.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/sandbox/com/interface21/web/servlet/mvc/AbstractListFormController.java -------------------------------------------------------------------------------- /sandbox/com/interface21/web/servlet/mvc/AbstractParamListFormController.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/sandbox/com/interface21/web/servlet/mvc/AbstractParamListFormController.java -------------------------------------------------------------------------------- /src/com/interface21/aop/attributes/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Package containing AOP support for metadata attributes. 5 | Not fully implemented yet. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/aop/framework/AbstractMethodPointcut.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.aop.framework; 7 | 8 | import org.aopalliance.intercept.MethodInterceptor; 9 | 10 | /** 11 | * Abstract convenience superclass for implementations of 12 | * DynamicMethodPointcut or StaticMethodPointcut. Handles 13 | * interceptor. 14 | * @author Rod Johnson 15 | * @since July 22, 2003 16 | * @version $Id$ 17 | */ 18 | public abstract class AbstractMethodPointcut implements MethodPointcut { 19 | 20 | private MethodInterceptor interceptor; 21 | 22 | protected AbstractMethodPointcut() { 23 | } 24 | 25 | protected AbstractMethodPointcut(MethodInterceptor interceptor) { 26 | this.interceptor = interceptor; 27 | } 28 | /** 29 | * @see com.interface21.aop.framework.MethodPointcut#getInterceptor() 30 | */ 31 | public MethodInterceptor getInterceptor() { 32 | return this.interceptor; 33 | } 34 | 35 | public void setInterceptor(MethodInterceptor interceptor) { 36 | this.interceptor = interceptor; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/com/interface21/aop/framework/AlwaysInvoked.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.aop.framework; 7 | 8 | import java.lang.reflect.Method; 9 | 10 | import org.aopalliance.intercept.AttributeRegistry; 11 | import org.aopalliance.intercept.MethodInterceptor; 12 | 13 | /** 14 | * MethodPointcut implementation wrapping an 15 | * Interceptor that should always run. 16 | * @author Rod Johnson 17 | * @since 04-Apr-2003 18 | * @version $Id$ 19 | */ 20 | public class AlwaysInvoked extends AbstractMethodPointcut implements StaticMethodPointcut { 21 | 22 | public AlwaysInvoked(MethodInterceptor interceptor) { 23 | super(interceptor); 24 | } 25 | 26 | /** 27 | * @see com.interface21.aop.framework.StaticMethodPointcut#applies(java.lang.reflect.Method, AttributeRegistry) 28 | */ 29 | public boolean applies(Method m, AttributeRegistry ar) { 30 | return true; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/com/interface21/aop/framework/AopConfigException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.aop.framework; 7 | 8 | import com.interface21.core.NestedRuntimeException; 9 | 10 | /** 11 | * 12 | * @author Rod Johnson 13 | * @since 13-Mar-2003 14 | * @version $Revision$ 15 | */ 16 | public class AopConfigException extends NestedRuntimeException { 17 | 18 | /** 19 | * @param mesg 20 | */ 21 | public AopConfigException(String mesg) { 22 | super(mesg); 23 | } 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/com/interface21/aop/framework/AopUtils.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.aop.framework; 3 | 4 | import java.util.HashSet; 5 | import java.util.Set; 6 | 7 | /** 8 | * Utility methods used by the AOP framework. 9 | * @author Rod Johnson 10 | * @version $Id$ 11 | */ 12 | public class AopUtils { 13 | 14 | /** 15 | * Get all implemented interfaces, even those implemented by superclasses. 16 | * @param clazz 17 | * @return Set 18 | */ 19 | public static Set findAllImplementedInterfaces(Class clazz) { 20 | Set s = new HashSet(); 21 | Class[] interfaces = clazz.getInterfaces(); 22 | for (int i = 0; i < interfaces.length; i++) { 23 | s.add(interfaces[i]); 24 | } 25 | Class superclass = clazz.getSuperclass(); 26 | if (superclass != null) { 27 | s.addAll(findAllImplementedInterfaces(superclass)); 28 | } 29 | return s; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/com/interface21/aop/framework/IntroductionInterceptor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.aop.framework; 7 | 8 | import org.aopalliance.intercept.MethodInterceptor; 9 | 10 | /** 11 | * Subinterface of MethodInterceptor that allows additional 12 | * interfaces to be implemented by the interceptor, and available 13 | * via a proxy using that interceptor. This is commonly 14 | * referred to as introduction. 15 | * DefaultProxyConfig and subclasses will automatically recognise 16 | * introduction interceptors and expose any interfaces they 17 | * introduce. 18 | * @see DefaultProxyConfig 19 | * @author Rod Johnson 20 | * @version $Id$ 21 | */ 22 | public interface IntroductionInterceptor extends MethodInterceptor { 23 | 24 | /** 25 | * Return the introduced interfaces added by this object 26 | * @return Class[] 27 | */ 28 | Class[] getIntroducedInterfaces(); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/com/interface21/aop/framework/MethodPointcut.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.aop.framework; 7 | 8 | import org.aopalliance.intercept.MethodInterceptor; 9 | 10 | /** 11 | * Interface to be implemented by objects that can cause 12 | * conditional invocation of an Interceptor depending on 13 | * the method, arguments and attributes passed. 14 | * @author Rod Johnson 15 | * @since 03-Apr-2003 16 | * @version $Id$ 17 | */ 18 | public interface MethodPointcut { 19 | 20 | /** 21 | * Return the interceptor to run conditionally 22 | * @return MethodInterceptor 23 | */ 24 | MethodInterceptor getInterceptor(); 25 | 26 | /** 27 | * Arbitrary int value. Depends on other values. 28 | * Higher values cause interceptors to be invoked earlier 29 | * in the invocation chain. 30 | * @return int 31 | */ 32 | //int getPrecedence(); 33 | } 34 | -------------------------------------------------------------------------------- /src/com/interface21/aop/framework/ProxyInterceptor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.aop.framework; 7 | 8 | import org.aopalliance.intercept.Interceptor; 9 | 10 | /** 11 | * Interface to be implemented by interceptors that have 12 | * a proxy target. 13 | * @author Rod Johnson 14 | * @since 14-Mar-2003 15 | * @version $Revision$ 16 | */ 17 | public interface ProxyInterceptor extends Interceptor { 18 | 19 | Object getTarget(); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/com/interface21/aop/framework/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Package containing Spring's basic AOP infrastructure, 5 | compliant with the AOP Alliance interfaces. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/aop/interceptor/AbstractQaInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.interface21.aop.interceptor; 2 | 3 | import org.aopalliance.intercept.MethodInterceptor; 4 | import org.aopalliance.intercept.MethodInvocation; 5 | 6 | public abstract class AbstractQaInterceptor implements MethodInterceptor { 7 | 8 | /** 9 | * @see org.aopalliance.intercept.MethodInterceptor#invoke(MethodInvocation) 10 | */ 11 | public Object invokeInternal(MethodInvocation invocation) throws Throwable { 12 | Object result = invocation.proceed(); 13 | checkInvariants(invocation.getThis()); 14 | return result; 15 | } 16 | 17 | protected abstract void checkInvariants(Object target); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/com/interface21/aop/interceptor/ClassLoaderAnalyzerInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.interface21.aop.interceptor; 2 | 3 | import org.aopalliance.intercept.MethodInterceptor; 4 | import org.aopalliance.intercept.MethodInvocation; 5 | import org.apache.commons.logging.Log; 6 | import org.apache.commons.logging.LogFactory; 7 | 8 | import com.interface21.util.ClassLoaderUtils; 9 | 10 | /** 11 | * Trivial classloader analyzer interceptor. 12 | * @version $Id$ 13 | * @author Rod Johnson 14 | * @author Dmitriy Kopylenko 15 | */ 16 | public class ClassLoaderAnalyzerInterceptor implements MethodInterceptor { 17 | 18 | protected final Log logger = LogFactory.getLog(getClass()); 19 | 20 | public Object invoke(MethodInvocation pInvocation) throws Throwable { 21 | logger.debug("Begin class loader analysis"); 22 | 23 | logger.info(ClassLoaderUtils.showClassLoaderHierarchy( 24 | pInvocation.getThis(), 25 | pInvocation.getThis().getClass().getName(), 26 | "\n", 27 | "-")); 28 | Object rval = pInvocation.proceed(); 29 | 30 | logger.debug("End class loader analysis"); 31 | return rval; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/com/interface21/aop/interceptor/DebugInterceptor.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.aop.interceptor; 3 | 4 | import org.aopalliance.intercept.MethodInterceptor; 5 | import org.aopalliance.intercept.MethodInvocation; 6 | 7 | /** 8 | * Trivial interceptor that can be introduced in a chain to display it. 9 | * 10 | * (c) Rod Johnson, 2003 11 | * @author Rod Johnson 12 | */ 13 | public class DebugInterceptor implements MethodInterceptor { 14 | 15 | // TODO learning interceptor? 16 | // AI? learns usage pattern? 17 | // code metrics 18 | // param values, etc? 19 | 20 | private int count; 21 | 22 | /** 23 | * @see org.aopalliance.intercept.MethodInterceptor#invoke(MethodInvocation) 24 | */ 25 | public Object invoke(MethodInvocation invocation) throws Throwable { 26 | ++count; 27 | System.out.println("Debug interceptor: count=" + count + 28 | " invocation=[" + invocation + "]"); 29 | Object rval = invocation.proceed(); 30 | System.out.println("Debug interceptor: next returned"); 31 | return rval; 32 | } 33 | 34 | public int getCount() { 35 | return this.count; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/com/interface21/aop/interceptor/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Provides miscellaneous interceptor implementations. 5 | More specific interceptors can be found in the respective 6 | functionality packages, like "transaction" and "orm". 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/com/interface21/beans/BeansException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans; 2 | 3 | import com.interface21.core.NestedRuntimeException; 4 | 5 | /** 6 | * Abstract superclass for all exceptions thrown in the beans package 7 | * and subpackages. Note that this is a runtime (unchecked) exception. 8 | * Beans exceptions are usually fatal; there is no reason for them to be 9 | * checked. 10 | * @author Rod Johnson 11 | */ 12 | public abstract class BeansException extends NestedRuntimeException { 13 | 14 | /** 15 | * Constructs an BeansException with the specified message 16 | * and root cause. 17 | * @param msg the detail message. 18 | * @param t the root cause 19 | */ 20 | public BeansException(String msg, Throwable t) { 21 | super(msg, t); 22 | } 23 | 24 | /** 25 | * Constructs an BeansException with the specified message 26 | * and no root cause. 27 | * @param msg the detail message. 28 | */ 29 | public BeansException(String msg) { 30 | super(msg); 31 | } 32 | 33 | } 34 | 35 | 36 | -------------------------------------------------------------------------------- /src/com/interface21/beans/FatalBeanException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans; 2 | 3 | /** 4 | * Thrown on an unrecoverable problem encountered in the 5 | * beans packages or sub-packages: e.g. bad class or field. 6 | * @author Rod Johnson 7 | * @version $Revision$ 8 | */ 9 | public class FatalBeanException extends BeansException { 10 | 11 | /** 12 | * Constructs a FatalBeanException 13 | * with the specified message. 14 | * @param msg the detail message. 15 | */ 16 | public FatalBeanException(String msg) { 17 | super(msg); 18 | } 19 | 20 | /** 21 | * Constructs a FatalBeanException 22 | * with the specified message and root cause. 23 | * @param msg the detail message. 24 | * @param t root cause 25 | */ 26 | public FatalBeanException(String msg, Throwable t) { 27 | super(msg, t); 28 | } 29 | } 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/com/interface21/beans/NotWritablePropertyException.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.beans; 3 | 4 | /** 5 | * Exception thrown on an attempt to set the value of 6 | * a property that isn't writable, because there's no 7 | * setter method. 8 | * @author Rod Johnson 9 | */ 10 | public class NotWritablePropertyException extends BeansException { 11 | 12 | /** 13 | * Creates new NotWritablePropertyException without detail message. 14 | */ 15 | public NotWritablePropertyException(String propertyName, Class beanClass) { 16 | super("Property [" + propertyName + "] is not writable in bean class [" + beanClass.getName() + "]"); 17 | } 18 | } 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/com/interface21/beans/NullValueInNestedPathException.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.beans; 3 | 4 | /** 5 | * Exception thrown when navigation of a valid nested property 6 | * path encounters a null pointer exception. For example, 7 | * navigating spouse.age fails because the spouse property of the 8 | * target object has a null value. 9 | * @author Rod Johnson 10 | */ 11 | public class NullValueInNestedPathException extends FatalBeanException { 12 | 13 | private String property; 14 | 15 | private Class clazz; 16 | 17 | /** 18 | * Constructor for NullValueInNestedPathException. 19 | * @param clazz 20 | * @param propertyName 21 | */ 22 | public NullValueInNestedPathException(Class clazz, String propertyName) { 23 | super("Value of nested property '" + propertyName + "' is null in " + clazz, null); 24 | this.property = propertyName; 25 | this.clazz = clazz; 26 | } 27 | 28 | /** 29 | * @return the name of the offending property 30 | */ 31 | public String getPropertyName() { 32 | return property; 33 | } 34 | 35 | public Class getBeanClass() { 36 | return clazz; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/com/interface21/beans/PropertyAccessException.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.beans; 3 | 4 | import java.beans.PropertyChangeEvent; 5 | 6 | /** 7 | * Superclass for exceptions related to a property access, 8 | * such as type mismatch or invocation target exception. 9 | * @author Rod Johnson 10 | * @version $Revision$ 11 | */ 12 | public abstract class PropertyAccessException extends BeansException { 13 | 14 | private PropertyChangeEvent propertyChangeEvent; 15 | 16 | public PropertyAccessException(String mesg, PropertyChangeEvent propertyChangeEvent, Throwable t) { 17 | super(mesg, t); 18 | this.propertyChangeEvent = propertyChangeEvent; 19 | } 20 | 21 | /** 22 | * @return the PropertyChangeEvent that resulted in the problem 23 | */ 24 | public PropertyChangeEvent getPropertyChangeEvent() { 25 | return propertyChangeEvent; 26 | } 27 | 28 | } 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/com/interface21/beans/SortDefinition.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans; 2 | 3 | /** 4 | * Definition for sorting bean instances by a property. 5 | * @author Juergen Hoeller 6 | * @since 26.05.2003 7 | */ 8 | public interface SortDefinition { 9 | 10 | /** 11 | * Return the name of the property to sort by. 12 | */ 13 | String getProperty(); 14 | 15 | /** 16 | * Return whether upper and lower case in String values should be ignored. 17 | */ 18 | boolean isIgnoreCase(); 19 | 20 | /** 21 | * Return if ascending or descending. 22 | */ 23 | boolean isAscending(); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/com/interface21/beans/TypeMismatchException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans; 2 | 3 | import java.beans.PropertyChangeEvent; 4 | 5 | /** 6 | * Exception thrown on a type mismatch when trying to set a property. 7 | * @author Rod Johnson 8 | * @version $Revision$ 9 | */ 10 | public class TypeMismatchException extends PropertyAccessException { 11 | 12 | public TypeMismatchException(PropertyChangeEvent propertyChangeEvent, Class requiredType, Throwable t) { 13 | super("Failed to convert property value of type [" + 14 | (propertyChangeEvent.getNewValue() != null ? 15 | propertyChangeEvent.getNewValue().getClass().getName() : null) + 16 | "] to required type [" + requiredType.getName() + 17 | "] for property named [" + propertyChangeEvent.getPropertyName() + "]", propertyChangeEvent, t); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/BeanDefinitionStoreException.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.beans.factory; 3 | 4 | import com.interface21.beans.BeansException; 5 | 6 | /** 7 | * Exception thrown when a BeanFactory encounters an internal error, and 8 | * its definitions are invalid: for example, if an XML document containing 9 | * bean definitions isn't well-formed. 10 | * @author Rod Johnson 11 | */ 12 | public class BeanDefinitionStoreException extends BeansException { 13 | 14 | /** 15 | * Constructs a BeanDefinitionStoreException with the specified detail message. 16 | * @param msg the detail message. 17 | * @param t the root cause of the problem with the factory. 18 | */ 19 | public BeanDefinitionStoreException(String msg,Throwable t) { 20 | super(msg, t); 21 | } 22 | } 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/BeanIsNotAFactoryException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.beans.factory; 7 | 8 | /** 9 | * Exception thrown when a bean is not a factory, 10 | * but a user tries to get at the factory for the given bean name. 11 | * Whether a bean is a factory is determined by whether it implements 12 | * the FactoryBean interface. 13 | * @author Rod Johnson 14 | * @since 10-Mar-2003 15 | * @see com.interface21.beans.factory.FactoryBean 16 | * @version $Revision$ 17 | */ 18 | public class BeanIsNotAFactoryException extends BeanNotOfRequiredTypeException { 19 | 20 | public BeanIsNotAFactoryException(String name, Object actualInstance) { 21 | super(name, FactoryBean.class, actualInstance); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/DisposableBean.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans.factory; 2 | 3 | /** 4 | * Interface to be implemented by beans that want to release resources 5 | * on destruction. A BeanFactory is supposed to invoke the destroy 6 | * method if it disposes a cached singleton. An application context 7 | * is supposed to dispose all of its singletons on close. 8 | * @author Juergen Hoeller 9 | * @since 12.08.2003 10 | * @see com.interface21.context.ApplicationContext#close 11 | */ 12 | public interface DisposableBean { 13 | 14 | /** 15 | * Invoked by a BeanFactory on destruction of a singleton. 16 | * @throws Exception in case of shutdown errors. 17 | * Exceptions will get logged but not rethrown to allow 18 | * other beans to release their resources too. 19 | */ 20 | void destroy() throws Exception; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/HierarchicalBeanFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.beans.factory; 7 | 8 | /** 9 | * Subinterface implemented by bean factories that can be part 10 | * of a hierarchy. 11 | * @author Rod Johnson 12 | * @since 07-Jul-2003 13 | * @version $Id$ 14 | */ 15 | public interface HierarchicalBeanFactory extends BeanFactory { 16 | 17 | /** 18 | * Returns the parent bean factory, or null if there is none. 19 | * @return the parent bean factory, or null if there is no parent 20 | */ 21 | BeanFactory getParentBeanFactory(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/InitializingBean.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.beans.factory; 3 | 4 | /** 5 | * Interface to be implemented by beans that need to react 6 | * once all their properties have been set by a BeanFactory: 7 | * for example, to perform initialization, or merely to check 8 | * that all mandatory properties have been set. 9 | * @author Rod Johnson 10 | */ 11 | public interface InitializingBean { 12 | 13 | /** 14 | * Invoked by a BeanFactory after it has set all bean properties supplied. 15 | *

This method allows the bean instance to perform initialization only 16 | * possible when all bean properties have been set and to throw an 17 | * exception in the event of misconfiguration. 18 | * @throws Exception in the event of misconfiguration (such 19 | * as failure to set an essential property) or if initialization fails. 20 | */ 21 | void afterPropertiesSet() throws Exception; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/NoSuchBeanDefinitionException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans.factory; 2 | 3 | import com.interface21.beans.BeansException; 4 | 5 | /** 6 | * Exception thrown when a BeanFactory is asked for a bean 7 | * instance name for which it cannot find a definition. 8 | * @author Rod Johnson 9 | * @version $Id$ 10 | */ 11 | public class NoSuchBeanDefinitionException extends BeansException { 12 | 13 | /** Name of the missing bean */ 14 | private final String name; 15 | 16 | /** 17 | * Creates new NoSuchBeanDefinitionException.. 18 | * @param name the name of the missing bean 19 | * @param message further, detailed message describing the problem. 20 | */ 21 | public NoSuchBeanDefinitionException(String name, String message) { 22 | super("No bean named [" + name + "] is defined {" + message + "}", null); 23 | this.name = name; 24 | } 25 | 26 | /** 27 | * Return the name of the missing bean. 28 | * @return the name of the missing bean 29 | */ 30 | public String getBeanName() { 31 | return name; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/package.html: -------------------------------------------------------------------------------- 1 | Package providing an alternative to the Singleton and Prototype design patterns, including a consistent approach to configuration management. It builds on the com.interface21.beans package.

This package and related packages are discussed in Chapter 11 of Expert One-On-One J2EE Design and Development by Rod Johnson (Wrox, 2002). -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/support/BeanFactoryLoader.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.beans.factory.support; 7 | 8 | import com.interface21.beans.factory.BeanFactory; 9 | 10 | /** 11 | * Interface to be implemented by objects that can load BeanFactories 12 | * (usually on behalf of application components such as EJBs). 13 | * @author Rod Johnson 14 | * @since 20-Jul-2003 15 | * @version $Id$ 16 | */ 17 | public interface BeanFactoryLoader { 18 | 19 | /** 20 | * Load the BeanFactory. 21 | * @return BeanFactory loaded BeanFactory. Never returns null. 22 | * @throws BootstrapException if a BeanFactory cannot be loaded 23 | */ 24 | BeanFactory loadBeanFactory() throws BootstrapException; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/support/BootstrapException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans.factory.support; 2 | 3 | import com.interface21.beans.FatalBeanException; 4 | 5 | /** 6 | * 7 | * @author Rod Johnson 8 | * @since 02-Dec-02 9 | */ 10 | public class BootstrapException extends FatalBeanException { 11 | 12 | /** 13 | * Constructor for BootstrapException. 14 | * @param msg 15 | * @param t 16 | */ 17 | public BootstrapException(String msg, Throwable t) { 18 | super(msg, t); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/support/ManagedList.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.beans.factory.support; 7 | 8 | import java.util.LinkedList; 9 | 10 | /** 11 | * Tag subclass used to hold managed elements, which may 12 | * include runtime bean references 13 | * @author Rod Johnson 14 | * @since 27-May-2003 15 | * @version $Id$ 16 | */ 17 | public class ManagedList extends LinkedList { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/support/ManagedMap.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.beans.factory.support; 7 | 8 | import java.util.HashMap; 9 | 10 | /** 11 | * Tag subclass used to hold managed values, which may 12 | * include runtime bean references 13 | * @author Rod Johnson 14 | * @since 27-May-2003 15 | * @version $Id$ 16 | */ 17 | public class ManagedMap extends HashMap { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/support/RuntimeBeanReference.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans.factory.support; 2 | 3 | /** 4 | * Immutable placeholder class used for the value of a PropertyValue 5 | * object when it's a reference to another bean in this 6 | * factory to be resolved at runtime. 7 | * @author Rod Johnson 8 | */ 9 | public class RuntimeBeanReference { 10 | 11 | private final String beanName; 12 | 13 | /** 14 | * Create a new RuntimeBeanReference to the given bean nam. 15 | * @param beanName name of the target bean. 16 | */ 17 | public RuntimeBeanReference(String beanName) { 18 | this.beanName = beanName; 19 | } 20 | 21 | /** 22 | * Return the target bean name. 23 | * @return the target bean name. 24 | */ 25 | public String getBeanName() { 26 | return beanName; 27 | } 28 | } -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/support/package.html: -------------------------------------------------------------------------------- 1 | Classes supporting the com.interface21.beans.factory package. Contains abstract base classes for BeanFactory implementations. -------------------------------------------------------------------------------- /src/com/interface21/beans/factory/xml/package.html: -------------------------------------------------------------------------------- 1 | Contains an abstract XML-based BeanFactory implementation, including a standard "spring-beans" DTD. -------------------------------------------------------------------------------- /src/com/interface21/beans/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | This package contains interfaces and classes for manipulating Java beans. 5 | It is used by most other Spring packages. 6 | 7 |

A BeanWrapper object may be used to set and get bean properties, 8 | singly or in bulk. 9 | 10 |

The classes in this package are discussed in Chapter 11 of 11 | Expert One-On-One J2EE Design and Development 12 | by Rod Johnson (Wrox, 2002). 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/com/interface21/beans/propertyeditors/ClassEditor.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans.propertyeditors; 2 | 3 | import java.beans.PropertyEditorSupport; 4 | 5 | /** 6 | * Editor for java.lang.Class, to directly feed a Class property 7 | * instead of needing an additional class name property. 8 | * @author Juergen Hoeller 9 | * @since 13.05.2003 10 | */ 11 | public class ClassEditor extends PropertyEditorSupport { 12 | 13 | public void setAsText(String text) throws IllegalArgumentException { 14 | Class clazz = null; 15 | try { 16 | clazz = Class.forName(text); 17 | } 18 | catch (ClassNotFoundException ex) { 19 | throw new IllegalArgumentException("Invalid class name [" + text + "]: " + ex.getMessage()); 20 | } 21 | setValue(clazz); 22 | } 23 | 24 | public String getAsText() { 25 | return ((Class) getValue()).getName(); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/com/interface21/beans/propertyeditors/LocaleEditor.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans.propertyeditors; 2 | 3 | import java.beans.PropertyEditorSupport; 4 | import java.util.Locale; 5 | 6 | import com.interface21.util.StringUtils; 7 | 8 | /** 9 | * Editor for java.util.Locale, to directly feed a Locale property. 10 | * Expects the same syntax as Locale.toString, i.e. language + optionally 11 | * country + optionally variant, separated by "_" (e.g. "en", "en_US"). 12 | * @author Juergen Hoeller 13 | * @since 26.05.2003 14 | */ 15 | public class LocaleEditor extends PropertyEditorSupport { 16 | 17 | public void setAsText(String text) { 18 | String[] parts = StringUtils.delimitedListToStringArray(text, "_"); 19 | String language = parts.length > 0 ? parts[0] : ""; 20 | String country = parts.length > 1 ? parts[1] : ""; 21 | String variant = parts.length > 2 ? parts[2] : ""; 22 | setValue(language.length() > 0 ? new Locale(language, country, variant) : null); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/com/interface21/beans/propertyeditors/StringArrayPropertyEditor.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans.propertyeditors; 2 | 3 | import java.beans.PropertyEditorSupport; 4 | 5 | import com.interface21.util.StringUtils; 6 | 7 | /** 8 | * Properties editor for String[] type. Strings must be in CSV format. 9 | * This property editor is automatically registered by BeanWrapperImpl. 10 | * @author Rod Johnson 11 | * @see com.interface21.beans.BeanWrapperImpl 12 | */ 13 | public class StringArrayPropertyEditor extends PropertyEditorSupport { 14 | 15 | public void setAsText(String s) throws IllegalArgumentException { 16 | String[] sa = StringUtils.commaDelimitedListToStringArray(s); 17 | setValue(sa); 18 | } 19 | 20 | public String getAsText() { 21 | String[] array = (String[]) this.getValue(); 22 | return StringUtils.arrayToCommaDelimitedString(array); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/com/interface21/beans/propertyeditors/package.html: -------------------------------------------------------------------------------- 1 | Properties editors used to convert from String values to object types such as java.util.Properties.

Some of these editors are registered automatically by BeanWrapperImpl. "CustomXxxEditor" classes are intended for manual registration in specific binding processes, as they are localized or the like. -------------------------------------------------------------------------------- /src/com/interface21/context/ApplicationContextException.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.context; 3 | 4 | import com.interface21.core.NestedRuntimeException; 5 | 6 | /** 7 | * Exception thrown during application context initialization. 8 | * @author Rod Johnson 9 | */ 10 | public class ApplicationContextException extends NestedRuntimeException { 11 | 12 | /** 13 | * Constructs an ApplicationContextException 14 | * with the specified detail message and no root cause. 15 | * @param msg the detail message. 16 | */ 17 | public ApplicationContextException(String msg) { 18 | super(msg); 19 | } 20 | 21 | /** 22 | * @see NestedRuntimeException#NestedRuntimeException(String, Throwable) 23 | */ 24 | public ApplicationContextException(String msg, Throwable t) { 25 | super(msg, t); 26 | } 27 | } 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/com/interface21/context/ApplicationEventMulticaster.java: -------------------------------------------------------------------------------- 1 | package com.interface21.context; 2 | 3 | /** 4 | * Subinterface of ApplicationListener to be implemented by 5 | * listeners that can broadcast events to other listeners. 6 | * @author Rod Johnson 7 | */ 8 | public interface ApplicationEventMulticaster extends ApplicationListener { 9 | 10 | /** 11 | * Add a listener to be notified of all events 12 | * @param listener listener to add 13 | */ 14 | void addApplicationListener(ApplicationListener listener); 15 | 16 | /** 17 | * Remove a listener in the notification list] 18 | * @param listener listener to remove 19 | */ 20 | void removeApplicationListener(ApplicationListener listener); 21 | 22 | /** 23 | * Remove all listeners registered with this multicaster. 24 | * It will perform no action on event notification until more 25 | * listeners are registered. 26 | */ 27 | void removeAllListeners(); 28 | 29 | } 30 | 31 | -------------------------------------------------------------------------------- /src/com/interface21/context/ApplicationListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Generic framework code included with 3 | * Expert One-On-One J2EE Design and Development 4 | * by Rod Johnson (Wrox, 2002). 5 | * This code is free to use and modify. 6 | * Please contact rod.johnson@interface21.com 7 | * for commercial support. 8 | */ 9 | 10 | 11 | package com.interface21.context; 12 | 13 | import java.util.EventListener; 14 | 15 | /** 16 | * Interface to be implemented by event listeners. 17 | * Based on standard java.util base class for Observer 18 | * design pattern. 19 | * @author Rod Johnson 20 | */ 21 | public interface ApplicationListener extends EventListener { 22 | 23 | /** 24 | * Handle an application event 25 | * @param e event to respond to 26 | */ 27 | void onApplicationEvent(ApplicationEvent e); 28 | 29 | } 30 | 31 | -------------------------------------------------------------------------------- /src/com/interface21/context/MessageSourceResolvable.java: -------------------------------------------------------------------------------- 1 | package com.interface21.context; 2 | 3 | /** 4 | * Interface for objects that are suitable for message resolution, 5 | * e.g. validation errors. 6 | * @author Tony Falabella 7 | * @see MessageSource#getMessage 8 | */ 9 | public interface MessageSourceResolvable { 10 | 11 | /** 12 | * Return the codes to be used to resolve this message, 13 | * in the order they should get tried. The last code will 14 | * therefore be the default one. 15 | * @return a String code associated with this message 16 | */ 17 | public String[] getCodes(); 18 | 19 | /** 20 | * Return the array of args to be used to resolve this message. 21 | * @return An array of objects to be used as params to replace 22 | * placeholders within the code message text. 23 | */ 24 | public Object[] getArgs(); 25 | 26 | /** 27 | * Return the defaultMessage to be used to resolve this message. 28 | * @return The defaultMessage, or null if no default. 29 | */ 30 | public String getDefaultMessage(); 31 | } 32 | -------------------------------------------------------------------------------- /src/com/interface21/context/NestingMessageSource.java: -------------------------------------------------------------------------------- 1 | package com.interface21.context; 2 | 3 | /** 4 | * Subinterface of MessageSource to be implemented by objects that 5 | * can resolve messages hierarchically. 6 | * @author Rod Johnson 7 | * @version $RevisionId$ 8 | */ 9 | public interface NestingMessageSource extends MessageSource { 10 | 11 | /** 12 | * Set the parent that will be used to try to resolve messages 13 | * that this object can't resolve. 14 | * @param parent parent MessageSource that will be used to 15 | * resolve messages that this object can't resolve. 16 | * May be null, in which case no further resolution is possible. 17 | */ 18 | void setParent(MessageSource parent); 19 | } 20 | 21 | -------------------------------------------------------------------------------- /src/com/interface21/context/NoSuchMessageException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.context; 2 | 3 | import java.util.Locale; 4 | 5 | /** 6 | * Exception thrown when a message can't be resolved. 7 | * @author Rod Johnson 8 | */ 9 | public class NoSuchMessageException extends Exception { 10 | 11 | /** 12 | * Create a new exception. 13 | * @param code code that could not be resolved for given locale 14 | * @param locale locale that was used to search for the code within 15 | */ 16 | public NoSuchMessageException(String code, Locale locale) { 17 | super("No message found under code '" + code + "' for locale '" + locale + "'."); 18 | } 19 | 20 | /** 21 | * Create a new exception. 22 | * @param code code that could not be resolved for given locale 23 | */ 24 | public NoSuchMessageException(String code) { 25 | super("No message found under code '" + code + "' for locale '" + Locale.getDefault() + "'."); 26 | } 27 | 28 | } 29 | 30 | -------------------------------------------------------------------------------- /src/com/interface21/context/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | This package builds on the beans package to add support for 5 | message sources and for the Observer design pattern, and the 6 | ability for application objects to obtain resources using a 7 | consistent API. 8 | 9 |

There is no necessity for Spring applications to depend 10 | on ApplicationContext or even BeanFactory functionality 11 | explicitly. One of the strengths of the Spring architecture 12 | is that application objects can often be configured without 13 | any dependency on Spring-specific APIs. 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/com/interface21/context/support/ConsoleListener.java: -------------------------------------------------------------------------------- 1 | package com.interface21.context.support; 2 | 3 | import com.interface21.context.ApplicationEvent; 4 | import com.interface21.context.ApplicationListener; 5 | 6 | /** 7 | * Simple listener for debug use only that logs messages 8 | * to the console. 9 | * 10 | *

Note: The ApplicationContext implementations included 11 | * in the framework do quite heavy debug-level logging via 12 | * Log4J, including published events. Thus, this listener 13 | * isn't necessary for debug logging. 14 | * 15 | * @author Rod Johnson 16 | * @since January 21, 2001 17 | */ 18 | public class ConsoleListener implements ApplicationListener { 19 | 20 | public void onApplicationEvent(ApplicationEvent e) { 21 | System.out.println(e.toString()); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/com/interface21/context/support/ContextClosedEvent.java: -------------------------------------------------------------------------------- 1 | package com.interface21.context.support; 2 | 3 | import com.interface21.context.ApplicationEvent; 4 | import com.interface21.context.ApplicationContext; 5 | 6 | /** 7 | * Event raised when an ApplicationContext gets closed. 8 | * @author Juergen Hoeller 9 | * @since 12.08.2003 10 | */ 11 | public class ContextClosedEvent extends ApplicationEvent { 12 | 13 | /** 14 | * Creates a new ContextClosedEvent. 15 | * @param source the ApplicationContext 16 | */ 17 | public ContextClosedEvent(ApplicationContext source) { 18 | super(source); 19 | } 20 | 21 | public ApplicationContext getApplicationContext() { 22 | return (ApplicationContext) getSource(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/com/interface21/context/support/ContextRefreshedEvent.java: -------------------------------------------------------------------------------- 1 | package com.interface21.context.support; 2 | 3 | import com.interface21.context.ApplicationEvent; 4 | import com.interface21.context.ApplicationContext; 5 | 6 | /** 7 | * Event raised when an ApplicationContext gets initialized or refreshed. 8 | * @author Juergen Hoeller 9 | * @since 04.03.2003 10 | */ 11 | public class ContextRefreshedEvent extends ApplicationEvent { 12 | 13 | /** 14 | * Creates a new ContextRefreshedEvent. 15 | * @param source the ApplicationContext 16 | */ 17 | public ContextRefreshedEvent(ApplicationContext source) { 18 | super(source); 19 | } 20 | 21 | public ApplicationContext getApplicationContext() { 22 | return (ApplicationContext) getSource(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/com/interface21/context/support/MessageSourceResourceBundle.java: -------------------------------------------------------------------------------- 1 | package com.interface21.context.support; 2 | 3 | import java.util.ResourceBundle; 4 | import java.util.Enumeration; 5 | import java.util.Locale; 6 | 7 | import com.interface21.context.MessageSource; 8 | import com.interface21.context.NoSuchMessageException; 9 | 10 | /** 11 | * Allows for accessing a MessageSource as a ResourceBundle. 12 | * @author Juergen Hoeller 13 | * @since 27.02.2003 14 | */ 15 | public class MessageSourceResourceBundle extends ResourceBundle { 16 | 17 | private MessageSource source; 18 | private Locale locale; 19 | 20 | public MessageSourceResourceBundle(MessageSource source, Locale locale) { 21 | this.source = source; 22 | this.locale = locale; 23 | } 24 | 25 | protected Object handleGetObject(String code) { 26 | try { 27 | return source.getMessage(code, null, locale); 28 | } catch (NoSuchMessageException e) { 29 | return null; 30 | } 31 | } 32 | 33 | public Enumeration getKeys() { 34 | return null; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/com/interface21/context/support/package.html: -------------------------------------------------------------------------------- 1 | Classes supporting the com.interface21.context package, such as abstract base classes for ApplicationContext implementations and a MessageSource implementation. -------------------------------------------------------------------------------- /src/com/interface21/core/ErrorCoded.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.core; 3 | 4 | /** 5 | * Interface that can be implemented by exceptions etc that are error coded. 6 | * The error code is a String, rather than a number, so it can be given 7 | * user-readable values, such as "object.failureDescription". 8 | * These codes will be resolved by a cMessageSource object. 9 | * 10 | *

This interface is necessary because both runtime and checked 11 | * exceptions are useful, and they cannot share a common, 12 | * framework-specific, superclass. 13 | * 14 | * @author Rod Johnson 15 | * @version $Id$ 16 | * @see com.interface21.context.MessageSource 17 | */ 18 | public interface ErrorCoded { 19 | 20 | /** 21 | * Return the error code associated with this failure. 22 | * The GUI can render this anyway it pleases, allowing for Int8ln etc. 23 | * @return a String error code associated with this failure, 24 | * or null if not error-coded 25 | */ 26 | String getErrorCode(); 27 | 28 | } 29 | 30 | -------------------------------------------------------------------------------- /src/com/interface21/core/HasRootCause.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.core; 3 | 4 | /** 5 | * Interface to be implemented by exceptions that have 6 | * a root cause. 7 | * This enables exceptions that don't share a common superclass 8 | * to expose a root cause consistently. 9 | * This will no longer be necessary in Java 1.4, 10 | * although it won't be incompatible. 11 | * @author Rod Johnson 12 | * @version $Id$ 13 | */ 14 | public interface HasRootCause { 15 | 16 | /** 17 | * Return the root cause of this exception 18 | * @return the root cause of this exception, 19 | * or null if there was no root cause 20 | */ 21 | Throwable getRootCause(); 22 | 23 | } 24 | 25 | -------------------------------------------------------------------------------- /src/com/interface21/core/InternalErrorException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.core; 2 | 3 | /** 4 | * InternalErrorException denotes an internal error in the framework. 5 | * Assertions are useful while debugging/testing the code, but a 6 | * different mechanism is needed to catch internal framework errors in 7 | * production. 8 | * @author Isabelle Muszynski 9 | * @since 5 April 2003 10 | */ 11 | 12 | public class InternalErrorException extends NestedRuntimeException { 13 | 14 | /** 15 | * Default constructor 16 | **/ 17 | public InternalErrorException() { 18 | super("Internal error"); 19 | } 20 | 21 | /** 22 | * Constructor 23 | * @param msg the exception message 24 | **/ 25 | public InternalErrorException(String msg) { 26 | super(msg); 27 | } 28 | 29 | /** 30 | * Constructor 31 | * @param msg the exception message 32 | * @param ex the nested exception 33 | **/ 34 | public InternalErrorException(String msg, Throwable ex) { 35 | super(msg, ex); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/com/interface21/core/OrderComparator.java: -------------------------------------------------------------------------------- 1 | package com.interface21.core; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * Comparator implementation for Ordered objects, 7 | * sorting by order value ascending (resp. by priority descending). 8 | * 9 | *

Non-Ordered objects are treated as greatest order values, 10 | * thus ending up at the end of the list, in arbitrary order 11 | * (just like same order values of Ordered objects). 12 | * 13 | * @author Juergen Hoeller 14 | * @since 07.04.2003 15 | * @see Ordered 16 | */ 17 | public class OrderComparator implements Comparator { 18 | 19 | public int compare(Object o1, Object o2) { 20 | int i1 = (o1 instanceof Ordered ? ((Ordered) o1).getOrder() : Integer.MAX_VALUE); 21 | int i2 = (o2 instanceof Ordered ? ((Ordered) o2).getOrder() : Integer.MAX_VALUE); 22 | 23 | // direct evaluation instead of Integer.compareTo to avoid unnecessary object creation 24 | if (i1 < i2) 25 | return -1; 26 | else if (i1 > i2) 27 | return 1; 28 | else 29 | return 0; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/com/interface21/core/Ordered.java: -------------------------------------------------------------------------------- 1 | package com.interface21.core; 2 | 3 | /** 4 | * Interface that can be implemented by objects that should be 5 | * orderable, e.g. in a Collection. The actual order can be 6 | * interpreted as prioritization, the first object (with the 7 | * lowest order value) having the highest priority. 8 | * 9 | * @author Juergen Hoeller 10 | * @since 07.04.2003 11 | */ 12 | public interface Ordered { 13 | 14 | /** 15 | * Return the order value of this object, 16 | * higher value meaning greater in terms of sorting. 17 | * Normally starting with 0 or 1, Integer.MAX_VALUE 18 | * indicating greatest. 19 | * Same order values will result in arbitrary positions 20 | * for the affected objects. 21 | * 22 | *

Higher value can be interpreted as lower priority, 23 | * consequently the first object has highest priority 24 | * (somewhat analogous to Servlet "load-on-startup" values). 25 | * 26 | * @return the order value 27 | */ 28 | public int getOrder(); 29 | } 30 | -------------------------------------------------------------------------------- /src/com/interface21/core/TimeStamped.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.core; 3 | 4 | /** 5 | * This interface can be implemented by cacheable objects 6 | * or cache entries, to enable the freshness of objects 7 | * to be checked. 8 | * @author Rod Johnson 9 | */ 10 | public interface TimeStamped { 11 | 12 | /** 13 | * Return the timestamp for this object 14 | * @return long the timestamp for this object, 15 | * as returned by System.currentTimeMillis() 16 | */ 17 | long getTimeStamp(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/com/interface21/core/package.html: -------------------------------------------------------------------------------- 1 | Some basic classes facilitating exception handling, internationalization, and the Visitor design pattern. -------------------------------------------------------------------------------- /src/com/interface21/dao/DataAccessResourceFailureException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Generic framework code included with 3 | * Expert One-On-One J2EE Design and Development 4 | * by Rod Johnson (Wrox, 2002). 5 | * This code is free to use and modify. 6 | * Please contact rod.johnson@interface21.com 7 | * for commercial support. 8 | */ 9 | 10 | package com.interface21.dao; 11 | 12 | /** 13 | * Data access exception thrown when a resource fails 14 | * completely: for example, if we can't connect to a database 15 | * using JDBC. 16 | * @author Rod Johnson 17 | * @version $Id$ 18 | */ 19 | public class DataAccessResourceFailureException extends DataAccessException { 20 | 21 | /** 22 | * Constructor for ResourceFailureDataAccessException. 23 | * @param msg message 24 | * @param ex root cause from data access API in use 25 | */ 26 | public DataAccessResourceFailureException(String msg, Throwable ex) { 27 | super(msg, ex); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/com/interface21/dao/DataIntegrityViolationException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Generic framework code included with 3 | * Expert One-On-One J2EE Design and Development 4 | * by Rod Johnson (Wrox, 2002). 5 | * This code is free to use and modify. 6 | * Please contact rod.johnson@interface21.com 7 | * for commercial support. 8 | */ 9 | 10 | package com.interface21.dao; 11 | 12 | /** 13 | * Exception thrown when an attempt to insert or update data 14 | * results in violation of an integrity constraint. Note that this 15 | * is not purely a relational concept; unique primary keys are 16 | * required by most database types. 17 | * @author Rod Johnson 18 | * @version $Id$ 19 | */ 20 | public class DataIntegrityViolationException extends DataAccessException { 21 | 22 | /** 23 | * Constructor for DataIntegrityViolationException. 24 | * @param msg mesg 25 | * @param ex root cause 26 | */ 27 | public DataIntegrityViolationException(String msg, Throwable ex) { 28 | super(msg, ex); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/com/interface21/dao/DeadlockLoserDataAccessException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Generic framework code included with 3 | * Expert One-On-One J2EE Design and Development 4 | * by Rod Johnson (Wrox, 2002). 5 | * This code is free to use and modify. 6 | * Please contact rod.johnson@interface21.com 7 | * for commercial support. 8 | */ 9 | 10 | package com.interface21.dao; 11 | 12 | /** 13 | * Generic exception thrown when the current process was 14 | * a deadlock loser, and its transaction rolled back. 15 | * @author Rod Johnson 16 | * @version $Id$ 17 | */ 18 | public class DeadlockLoserDataAccessException extends DataAccessException { 19 | 20 | /** 21 | * Constructor for DeadlockLoserDataAccessException. 22 | * @param msg mesg 23 | * @param ex root cause 24 | */ 25 | public DeadlockLoserDataAccessException(String msg, Throwable ex) { 26 | super(msg, ex); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/com/interface21/dao/TypeMismatchDataAccessException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Generic framework code included with 3 | * Expert One-On-One J2EE Design and Development 4 | * by Rod Johnson (Wrox, 2002). 5 | * This code is free to use and modify. 6 | * Please contact rod.johnson@interface21.com 7 | * for commercial support. 8 | */ 9 | 10 | package com.interface21.dao; 11 | 12 | /** 13 | * Exception thrown on mismatch between Java type and database type: 14 | * for example on an attempt to set an object of the wrong type 15 | * in an RDBMS column. 16 | * @author Rod Johnson 17 | * @version $Id$ 18 | */ 19 | public class TypeMismatchDataAccessException extends DataAccessException { 20 | 21 | /** 22 | * Constructor for TypeMismatchDataAccessException. 23 | * @param msg mesg 24 | * @param ex root cause 25 | */ 26 | public TypeMismatchDataAccessException(String msg, Throwable ex) { 27 | super(msg, ex); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/com/interface21/dao/package.html: -------------------------------------------------------------------------------- 1 | Exception hierarchy enabling sophisticated error handling independent of the data access approach in use. For example, when DAOs and data access frameworks use the exceptions in this package (and custom subclasses), calling code can detect and handle common problems such as deadlocks without being tied to a particular data access strategy, such as JDBC.

All these exceptions are unchecked, meaning that calling code can leave them uncaught and treat all data access exceptions as fatal.

The classes in this package are discussed in Chapter 9 of Expert One-On-One J2EE Design and Development by Rod Johnson (Wrox, 2002). -------------------------------------------------------------------------------- /src/com/interface21/ejb/access/AbstractRemoteSlsbInvokerInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.interface21.ejb.access; 2 | 3 | import javax.ejb.EJBObject; 4 | 5 | /** 6 | * Superclass for interceptors proxying remote EJBs. 7 | * @author Rod Johnson 8 | * @version $Revision$ 9 | */ 10 | public abstract class AbstractRemoteSlsbInvokerInterceptor extends AbstractSlsbInvokerInterceptor { 11 | 12 | /** 13 | * Return a new instance of the stateless session bean. 14 | * Can be overridden to change the algorithm. 15 | * @return EJBObject 16 | */ 17 | protected EJBObject newSessionBeanInstance() { 18 | if (logger.isDebugEnabled()) 19 | logger.debug("Trying to create EJB"); 20 | 21 | EJBObject session = (EJBObject) getHomeBeanWrapper().invoke(CREATE_METHOD, null); 22 | 23 | // if it throws remote exception (wrapped in bean exception, retry?) 24 | 25 | if (logger.isDebugEnabled()) 26 | logger.debug("EJB created OK [" + session + "]"); 27 | return session; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/com/interface21/ejb/support/AbstractJmsMessageDrivenBean.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.ejb.support; 7 | 8 | import javax.jms.MessageListener; 9 | 10 | /** 11 | * Convenient superclass for JMS MDBs. 12 | * Requires subclasses to implement the JMS interface MessageListener. 13 | * @author Rod Johnson 14 | * @version $RevisionId: ResultSetHandler.java,v 1.1 2001/09/07 12:48:57 rod Exp $ 15 | */ 16 | public abstract class AbstractJmsMessageDrivenBean 17 | extends AbstractMessageDrivenBean 18 | implements MessageListener { 19 | 20 | // Empty: the purpose of this class is to ensure 21 | // that subclasses implement javax.jms.MessageListener 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/com/interface21/ejb/support/AbstractStatefulSessionBean.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.ejb.support; 7 | 8 | import javax.ejb.CreateException; 9 | 10 | /** 11 | * Convenient superclass for stateful session beans. 12 | * SFSBs should extend this class, leaving them to implement 13 | * the ejbActivate() and ejbPassivate() lifecycle methods 14 | * to comply with the requirements of the EJB specification. 15 | * 16 | *

NB: Subclasses should invoke the loadBeanFactory() 17 | * method in their custom ejbCreate() methods. 18 | * 19 | * @version $Id$ 20 | * @author Rod Johnson 21 | */ 22 | public abstract class AbstractStatefulSessionBean extends AbstractSessionBean { 23 | 24 | /** 25 | * Load a Spring BeanFactory namespace. Exposed for subclasses 26 | * to load a BeanFactory in their ejbCreate() methods. 27 | */ 28 | protected void loadBeanFactory() throws CreateException { 29 | super.loadBeanFactory(); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/com/interface21/ejb/support/package.html: -------------------------------------------------------------------------------- 1 | Superclasses to make implementing EJBs simpler and less error-prone, as well as guaranteeing a Spring BeanFactory is available to EJBs. This promotes good practice, with EJB services used for transaction management, thread management, and (possibly) remoting, while business logic is implemented in easily testable POJOs.
In this model, the EJB is a facade, with as many POJO helpers behind the BeanFactory as are required.
The classes in this package are discussed in Chapter 11 of Expert One-On-One J2EE Design and Development by Rod Johnson (Wrox, 2002). The present version has changed somewhat, but has the same goals.

Note that the default behaviour is to look for an EJB enviroment variable with name ejb/BeanFactoryPath that specifies the location on the classpath of an XML bean factory definition file (such as /com/mycom/mypackage/mybeans.xml. If this JNDI key is missing, your EJB subclass won't successfully initialize in the container. -------------------------------------------------------------------------------- /src/com/interface21/jdbc/core/ResultReader.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Generic framework code included with 3 | * Expert One-On-One J2EE Design and Development 4 | * by Rod Johnson (Wrox, 2002). 5 | * This code is free to use and modify. 6 | * Please contact rod.johnson@interface21.com 7 | * for commercial support. 8 | */ 9 | 10 | package com.interface21.jdbc.core; 11 | 12 | import java.util.List; 13 | 14 | 15 | /** 16 | * Extension of RowCallbackHandler interfaces that saves the 17 | * accumulated results as a Collection. 18 | * @author Rod Johnson 19 | */ 20 | public interface ResultReader extends RowCallbackHandler { 21 | 22 | /** 23 | * Return all results, disconnected from the JDBC ResultSet. 24 | * @return all results, disconnected from the JDBC ResultSet. 25 | * Never returns null; returns the empty collection if there 26 | * were no results. 27 | */ 28 | List getResults(); 29 | 30 | } 31 | 32 | -------------------------------------------------------------------------------- /src/com/interface21/jdbc/core/SQLWarningException.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.jdbc.core; 3 | 4 | import java.sql.SQLWarning; 5 | 6 | import com.interface21.dao.UncategorizedDataAccessException; 7 | 8 | /** 9 | * Exception thrown when we're not ignoring warnings. 10 | * If such an exception is thrown, the operation completed, 11 | * so we will need to explicitly roll it back if we're not happy 12 | * on looking at the warning. We might choose to ignore (or merely log) 13 | * the warning and throw the exception away. 14 | * @author Rod Johnson 15 | */ 16 | public class SQLWarningException extends UncategorizedDataAccessException { 17 | 18 | /** 19 | * Constructor for ConnectionFactoryException. 20 | * @param s message 21 | * @param ex JDBC warning 22 | */ 23 | public SQLWarningException(String mesg, SQLWarning ex) { 24 | super(mesg, ex); 25 | } 26 | 27 | /** 28 | * Return the SQLWarning. 29 | * @return the SQLWarning 30 | */ 31 | public SQLWarning SQLWarning() { 32 | return (SQLWarning) getRootCause(); 33 | } 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/com/interface21/jdbc/core/package.html: -------------------------------------------------------------------------------- 1 | The classes in this package make JDBC easier to use and reduce the likelihood of common errors. In particular, they:

  • Simplify error handling, avoiding the need for try/catch/final blocks in application code.
  • Present exceptions to application code in a generic hierarchy of unchecked exceptions, enabling applications to catch data access exceptions without being dependent on JDBC, and to ignore fatal exceptions there is no value in catching.
  • Allow the implementation of error handling to be modified to target different RDBMSes without introducing proprietary dependencies into application code.

This package and related packages are discussed in Chapter 9 of Expert One-On-One J2EE Design and Development by Rod Johnson (Wrox, 2002). -------------------------------------------------------------------------------- /src/com/interface21/jdbc/core/support/package.html: -------------------------------------------------------------------------------- 1 | Classes supporting the com.interface21.jdbc.core package. Contains various SQLExceptionTranslater and DataFieldMaxValueIncrementer implementations, and a DAO base class for JdbcTemplate usage. -------------------------------------------------------------------------------- /src/com/interface21/jdbc/datasource/CannotGetJdbcConnectionException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Generic framework code included with 3 | * Expert One-On-One J2EE Design and Development 4 | * by Rod Johnson (Wrox, 2002). 5 | * This code is free to use and modify. 6 | * Please contact rod.johnson@interface21.com 7 | * for commercial support. 8 | */ 9 | 10 | package com.interface21.jdbc.datasource; 11 | 12 | import com.interface21.dao.DataAccessResourceFailureException; 13 | 14 | /** 15 | * Fatal exception thrown when we can't connect to an RDBMS 16 | * using JDBC. 17 | * @author Rod Johnson 18 | */ 19 | public class CannotGetJdbcConnectionException extends DataAccessResourceFailureException { 20 | 21 | /** 22 | * Constructor for CannotGetJdbcConnectionException. 23 | * @param s message 24 | * @param ex root cause 25 | */ 26 | public CannotGetJdbcConnectionException(String s, Throwable ex) { 27 | super(s, ex); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/com/interface21/jdbc/datasource/ConnectionHolder.java: -------------------------------------------------------------------------------- 1 | package com.interface21.jdbc.datasource; 2 | 3 | import java.sql.Connection; 4 | 5 | /** 6 | * Connection holder, wrapping a JDBC Connection. 7 | * Features rollback-only support for nested JDBC transactions. 8 | * 9 | *

DataSourceTransactionManager binds instances of this class 10 | * to the thread, for a given DataSource. 11 | * 12 | *

Note: This is an SPI class, not intended to be used by applications. 13 | * 14 | * @author Juergen Hoeller 15 | * @since 06.05.2003 16 | * @see DataSourceTransactionManager 17 | * @see DataSourceTransactionObject 18 | * @see DataSourceUtils 19 | */ 20 | public class ConnectionHolder { 21 | 22 | private final Connection connection; 23 | 24 | private boolean rollbackOnly; 25 | 26 | public ConnectionHolder(Connection connection) { 27 | this.connection = connection; 28 | } 29 | 30 | public Connection getConnection() { 31 | return connection; 32 | } 33 | 34 | public void setRollbackOnly() { 35 | this.rollbackOnly = true; 36 | } 37 | 38 | public boolean isRollbackOnly() { 39 | return rollbackOnly; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/com/interface21/jdbc/datasource/package.html: -------------------------------------------------------------------------------- 1 | Provides a utility class for easy DataSource access, and various simple DataSource implementations. -------------------------------------------------------------------------------- /src/com/interface21/jdbc/object/package.html: -------------------------------------------------------------------------------- 1 | The classes in this package represent RDBMS queries, updates, and stored procedures as threadsafe, reusable objects. This approach is modelled by JDO, although of course objects returned by queries are "disconnected" from the database.

This higher level of JDBC abstraction depends on the lower-level abstraction in the com.interface21.jdbc.core package. Exceptions thrown are as in the com.interface21.dao package, meaning that code using this package does not need to implement JDBC or RDBMS-specific error handling.

This package and related packages are discussed in Chapter 9 of Expert One-On-One J2EE Design and Development by Rod Johnson (Wrox, 2002). -------------------------------------------------------------------------------- /src/com/interface21/jdbc/util/package.html: -------------------------------------------------------------------------------- 1 | Contains miscellaneous JDBC utilities. -------------------------------------------------------------------------------- /src/com/interface21/jndi/package.html: -------------------------------------------------------------------------------- 1 | The classes in this package make JNDI easier to use, facilitating the accessing of configuration stored in JNDI, and provide useful superclasses for JNDI access classes.

In particular, application classes using this package do not need to catch naming exceptions or obtain JNDI contexts.

The classes in this package are discussed in Chapter 11 of Expert One-On-One J2EE Design and Development by Rod Johnson (Wrox, 2002). -------------------------------------------------------------------------------- /src/com/interface21/jndi/support/package.html: -------------------------------------------------------------------------------- 1 | The simplest implementation of the JNDI SPI that could possibly work.

Useful for setting up a simple JNDI environment for test suites or standalone applications. If e.g. JDBC DataSources get bound to the same JNDI names as within a J2EE container, both application code and configuration can me reused without changes. -------------------------------------------------------------------------------- /src/com/interface21/orm/hibernate/HibernateJdbcException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.orm.hibernate; 2 | 3 | import net.sf.hibernate.JDBCException; 4 | 5 | import com.interface21.dao.UncategorizedDataAccessException; 6 | 7 | /** 8 | * Hibernate-specific subclass of DataAccessException, for JDBC exceptions 9 | * that Hibernate rethrew. Used by HibernateTemplate. 10 | * 11 | *

Part of the general strategy to allow for using Hibernate within 12 | * application service implementations that just feature DataAccessException 13 | * in their interfaces. Clients of these services do not need to be aware of 14 | * the particular data access strategy used by the service implementations. 15 | * 16 | * @author Juergen Hoeller 17 | * @since 02.05.2003 18 | * @see HibernateTemplate 19 | * @see com.interface21.dao 20 | */ 21 | public class HibernateJdbcException extends UncategorizedDataAccessException { 22 | 23 | public HibernateJdbcException(String s, JDBCException ex) { 24 | super(s, ex.getSQLException()); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/com/interface21/orm/hibernate/HibernateSystemException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.orm.hibernate; 2 | 3 | import net.sf.hibernate.HibernateException; 4 | 5 | import com.interface21.dao.UncategorizedDataAccessException; 6 | 7 | /** 8 | * Hibernate-specific subclass of DataAccessException, for Hibernate system 9 | * errors that do not match any concrete com.interface21.dao exceptions. 10 | * Used by HibernateTemplate. 11 | * 12 | *

Part of the general strategy to allow for using Hibernate within 13 | * application service implementations that just feature DataAccessException 14 | * in their interfaces. Clients of these services do not need to be aware of 15 | * the particular data access strategy used by the service implementations. 16 | * 17 | * @author Juergen Hoeller 18 | * @since 02.05.2003 19 | * @see HibernateTemplate 20 | * @see com.interface21.dao 21 | */ 22 | public class HibernateSystemException extends UncategorizedDataAccessException { 23 | 24 | public HibernateSystemException(String msg, HibernateException ex) { 25 | super(msg, ex); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/com/interface21/orm/hibernate/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Package providing integration of Hibernate with Spring concepts. 5 | Contains SessionFactory helper classes, a template plus callback 6 | for Hibernate access, and a Hibernate implementation of Spring's 7 | transaction SPI. 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/com/interface21/orm/hibernate/support/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes supporting the com.interface21.orm.hibernate package. 5 | Contains a DAO base class for HibernateTemplate usage. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/orm/jdo/JdoSystemException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.orm.jdo; 2 | 3 | import com.interface21.dao.UncategorizedDataAccessException; 4 | 5 | /** 6 | * JDO exception that gets thrown on system errors. 7 | * @author Juergen Hoeller 8 | * @since 03.06.2003 9 | */ 10 | public class JdoSystemException extends UncategorizedDataAccessException { 11 | 12 | public JdoSystemException(String s, Throwable ex) { 13 | super(s, ex); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/com/interface21/orm/jdo/JdoUsageException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.orm.jdo; 2 | 3 | import com.interface21.dao.InvalidDataAccessApiUsageException; 4 | 5 | /** 6 | * JDO exception that gets thrown on invalid API usage. 7 | * @author Juergen Hoeller 8 | * @since 03.06.2003 9 | */ 10 | public class JdoUsageException extends InvalidDataAccessApiUsageException { 11 | 12 | public JdoUsageException(String s, Throwable ex) { 13 | super(s, ex); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/com/interface21/orm/jdo/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Package providing integration of JDO with Spring concepts. 5 | Contains PersistenceManagerFactory helper classes, a template plus 6 | callback for JDO access, and a JDO implementation of Spring's 7 | transaction SPI. 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/com/interface21/orm/jdo/support/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes supporting the com.interface21.orm.jdo package. 5 | Contains a DAO base class for JdoTemplate usage. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/remoting/caucho/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Remoting classes for Caucho's Hessian and Burlap protocols. 5 | Provides a proxy factory for accessing Hessian/Burlap services, 6 | and an exporter for making beans available for Hessian/Burlap clients. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/com/interface21/remoting/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exception hierarchy for Spring's remoting infrastructure, 5 | independent of any specific remote method invocation system. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/remoting/rmi/RemoteInvocationHandler.java: -------------------------------------------------------------------------------- 1 | package com.interface21.remoting.rmi; 2 | 3 | import java.rmi.Remote; 4 | 5 | /** 6 | * Interface for RemoteInvocationWrapper instances on the server. 7 | * A client's StubInvocationHandler uses a stub implementing this interface. 8 | * 9 | * @author Juergen Hoeller 10 | * @since 14.05.2003 11 | */ 12 | interface RemoteInvocationHandler extends Remote { 13 | 14 | /** 15 | * Called by the StubInvocationHandler on each invocation. 16 | * Invokes the given method with the given parameters on the actual object. 17 | * @param methodName the name of the invoked method 18 | * @param paramTypes the method's parameter types. 19 | * @param params the method's parameters 20 | * @return the object returned from the invoked method, if any 21 | * @throws Exception in case of invocation or invocation target exceptions 22 | */ 23 | public Object invokeRemote(String methodName, Class[] paramTypes, Object[] params) throws Exception; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/com/interface21/remoting/rmi/RemoteInvocationWrapper.java: -------------------------------------------------------------------------------- 1 | package com.interface21.remoting.rmi; 2 | 3 | import java.lang.reflect.Method; 4 | import java.rmi.RemoteException; 5 | import java.rmi.server.UnicastRemoteObject; 6 | 7 | /** 8 | * Server-side implementation of RemoteInvocationHandler. 9 | * An instance of this class exists for each remote object. 10 | * 11 | * @author Juergen Hoeller 12 | * @since 14.05.2003 13 | */ 14 | class RemoteInvocationWrapper extends UnicastRemoteObject implements RemoteInvocationHandler { 15 | 16 | private Object wrappedObject; 17 | 18 | /** 19 | * Create a new RemoteInvocationWrapper. 20 | * @param wrappedObject the locally wrapped object, on which methods are invoked 21 | */ 22 | public RemoteInvocationWrapper(Object wrappedObject) throws RemoteException { 23 | super(); 24 | this.wrappedObject = wrappedObject; 25 | } 26 | 27 | public Object invokeRemote(String methodName, Class[] paramTypes, Object[] params) throws Exception { 28 | Method method = wrappedObject.getClass().getMethod(methodName, paramTypes); 29 | return method.invoke(wrappedObject, params); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/com/interface21/remoting/rmi/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Remoting classes for transparent RMI. 5 | Provides a proxy factory for accessing RMI services, 6 | and an exporter for making beans available for RMI clients. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/com/interface21/remoting/support/AuthorizableRemoteProxyFactoryBean.java: -------------------------------------------------------------------------------- 1 | package com.interface21.remoting.support; 2 | 3 | /** 4 | * Abstract subclass of RemoteProxyFactoryBean, 5 | * adding support for authorization via username and password. 6 | * @author Juergen Hoeller 7 | * @since 13.05.2003 8 | */ 9 | public abstract class AuthorizableRemoteProxyFactoryBean extends RemoteProxyFactoryBean { 10 | 11 | private String username; 12 | 13 | private String password; 14 | 15 | /** 16 | * Set the username that this factory should use to access the backend service. 17 | */ 18 | public void setUsername(String username) { 19 | this.username = username; 20 | } 21 | 22 | protected String getUsername() { 23 | return username; 24 | } 25 | 26 | /** 27 | * Set the password that this factory should use to access the backend service. 28 | */ 29 | public void setPassword(String password) { 30 | this.password = password; 31 | } 32 | 33 | protected String getPassword() { 34 | return password; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/com/interface21/remoting/support/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Support classes for remoting implementations. 5 | Provides abstract base classes for remote proxy factories. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/CannotCreateTransactionException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.transaction; 7 | 8 | /** 9 | * Exception thrown when a transaction can't be created using an 10 | * underlying transaction API such as JTA. 11 | * @author Rod Johnson 12 | * @since 17-Mar-2003 13 | * @version $Revision$ 14 | */ 15 | public class CannotCreateTransactionException extends TransactionException { 16 | 17 | public CannotCreateTransactionException(String msg) { 18 | super(msg); 19 | } 20 | 21 | public CannotCreateTransactionException(String msg, Throwable ex) { 22 | super(msg, ex); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/InvalidIsolationException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.transaction; 2 | 3 | /** 4 | * Exception that gets thrown when an invalid isolation level is specified, 5 | * i.e. an isolation level that the transaction manager implementation 6 | * doesn't support. 7 | * @author Juergen Hoeller 8 | * @since 12.05.2003 9 | */ 10 | public class InvalidIsolationException extends TransactionUsageException { 11 | 12 | public InvalidIsolationException(String msg) { 13 | super(msg); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/InvalidTimeoutException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.transaction; 2 | 3 | /** 4 | * Exception that gets thrown when an invalid timeout is specified, 5 | * i.e. the transaction manager implementation doesn't support timeouts. 6 | * @author Juergen Hoeller 7 | * @since 12.05.2003 8 | */ 9 | public class InvalidTimeoutException extends TransactionUsageException { 10 | 11 | private int timeout = TransactionDefinition.TIMEOUT_DEFAULT; 12 | 13 | public InvalidTimeoutException(String msg, int timeout) { 14 | super(msg); 15 | this.timeout = timeout; 16 | } 17 | 18 | public int getTimeout() { 19 | return timeout; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/NestedTransactionNotPermittedException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.transaction; 7 | 8 | /** 9 | * Exception thrown when an attempt is made to begin a transaction 10 | * but this would amount to a nested transaction, which is not 11 | * supporting by the underlying transaction implementation. 12 | * @author Rod Johnson 13 | * @since 17-Mar-2003 14 | * @version $Revision$ 15 | */ 16 | public class NestedTransactionNotPermittedException extends CannotCreateTransactionException { 17 | 18 | public NestedTransactionNotPermittedException(String msg) { 19 | super(msg); 20 | } 21 | 22 | public NestedTransactionNotPermittedException(String msg, Throwable ex) { 23 | super(msg, ex); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/NoTransactionException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.transaction; 7 | 8 | /** 9 | * Exception thrown when an operation is attempted that 10 | * relies on an existing transaction (such as setting 11 | * rollback status) and there is no existing transaction. 12 | * This represents an illegal usage of the transaction API. 13 | * @author Rod Johnson 14 | * @since 17-Mar-2003 15 | * @version $Revision$ 16 | */ 17 | public class NoTransactionException extends TransactionUsageException { 18 | 19 | public NoTransactionException(String msg) { 20 | super(msg); 21 | } 22 | 23 | public NoTransactionException(String msg, Throwable ex) { 24 | super(msg, ex); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/TransactionException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.transaction; 7 | 8 | import com.interface21.core.NestedRuntimeException; 9 | 10 | /** 11 | * Superclass for all transaction exceptions. 12 | * @author Rod Johnson 13 | * @since 17-Mar-2003 14 | * @version $Revision$ 15 | */ 16 | public abstract class TransactionException extends NestedRuntimeException { 17 | 18 | public TransactionException(String msg) { 19 | super(msg); 20 | } 21 | 22 | public TransactionException(String msg, Throwable ex) { 23 | super(msg, ex); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/TransactionSystemException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.transaction; 2 | 3 | /** 4 | * Exception thrown when a general transaction system error is encountered, 5 | * like on commit or rollback. 6 | * @author Juergen Hoeller 7 | * @since 24.03.2003 8 | */ 9 | public class TransactionSystemException extends TransactionException { 10 | 11 | public TransactionSystemException(String msg) { 12 | super(msg); 13 | } 14 | 15 | public TransactionSystemException(String msg, Throwable ex) { 16 | super(msg, ex); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/TransactionUsageException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.transaction; 2 | 3 | /** 4 | * Superclass for exceptions caused by inappropriate usage of 5 | * a Spring transaction API. 6 | * @author Rod Johnson 7 | * @since 22-Mar-2003 8 | * @version $Revision$ 9 | */ 10 | public class TransactionUsageException extends TransactionException { 11 | 12 | public TransactionUsageException(String msg) { 13 | super(msg); 14 | } 15 | 16 | public TransactionUsageException(String msg, Throwable ex) { 17 | super(msg, ex); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/UnexpectedRollbackException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.transaction; 7 | 8 | /** 9 | * Thrown when an attempt to commit a transaction resulted 10 | * in an unexpected rollback 11 | * @author Rod Johnson 12 | * @since 17-Mar-2003 13 | * @version $Revision$ 14 | */ 15 | public class UnexpectedRollbackException extends TransactionException { 16 | 17 | public UnexpectedRollbackException(String msg, Throwable ex) { 18 | super(msg, ex); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/interceptor/DefaultTransactionAttribute.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.transaction.interceptor; 7 | 8 | import com.interface21.transaction.support.DefaultTransactionDefinition; 9 | 10 | /** 11 | * Transaction attribute that takes EJB approach to rolling 12 | * back on runtime, but not checked, exceptions. 13 | * @author Rod Johnson 14 | * @since 16-Mar-2003 15 | * @version $Id$ 16 | */ 17 | public class DefaultTransactionAttribute extends DefaultTransactionDefinition 18 | implements TransactionAttribute { 19 | 20 | public DefaultTransactionAttribute() { 21 | } 22 | 23 | public DefaultTransactionAttribute(int propagationBehavior) { 24 | super(propagationBehavior); 25 | } 26 | 27 | /** 28 | * Default behaviour is as with EJB: rollback on unchecked exception. 29 | * Consistent with TransactionTemplate's behavior. 30 | */ 31 | public boolean rollbackOn(Throwable t) { 32 | return (t instanceof RuntimeException); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/interceptor/NoRollbackRuleAttribute.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.transaction.interceptor; 7 | 8 | /** 9 | * Tag class. Its class means it has the opposite 10 | * behaviour to the RollbackRule superclass. 11 | * @author Rod Johnson 12 | * @since 09-Apr-2003 13 | * @version $Revision$ 14 | */ 15 | public class NoRollbackRuleAttribute extends RollbackRuleAttribute { 16 | 17 | /** 18 | * @param exceptionName 19 | */ 20 | public NoRollbackRuleAttribute(String exceptionName) { 21 | super(exceptionName); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/interceptor/TransactionAttribute.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.transaction.interceptor; 7 | 8 | import com.interface21.transaction.TransactionDefinition; 9 | 10 | /** 11 | * This interface adds a rollBackOn specification to TransactionDefinition. 12 | * As custom rollBackOn is only possible with AOP, this class resides 13 | * in the AOP transaction package. 14 | * 15 | * @author Rod Johnson 16 | * @since 16-Mar-2003 17 | * @version $Revision$ 18 | * @see com.interface21.transaction.interceptor.DefaultTransactionAttribute 19 | */ 20 | public interface TransactionAttribute extends TransactionDefinition { 21 | 22 | /** 23 | * Should we roll back on a checked exception? 24 | * @param ex the exception to evaluate 25 | * @return boolean rollback or not 26 | */ 27 | boolean rollbackOn(Throwable ex); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/interceptor/TransactionAttributeSource.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.transaction.interceptor; 7 | 8 | import org.aopalliance.intercept.MethodInvocation; 9 | 10 | /** 11 | * Interface used by TransactionInterceptor. Implementations know 12 | * how to source transaction attributes, whether from configuration, 13 | * metadata attributes at source level, or anywhere else. 14 | * @author Rod Johnson 15 | * @since 15-Apr-2003 16 | * @version $Id$ 17 | */ 18 | public interface TransactionAttributeSource { 19 | 20 | /** 21 | * Return the transaction attribute for this method. 22 | * Return null if the method is non-transactional. 23 | * @param invocation method invocation descriptor 24 | * @return TransactionAttribute transaction attribute or null. 25 | */ 26 | TransactionAttribute getTransactionAttribute(MethodInvocation invocation); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/interceptor/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | AOP-based solution for declarative transaction demarcation. 5 | Builds on the AOP infrastructure in com.interface21.aop.framework. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/jta/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Transaction SPI implementation for JTA. 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exception hierarchy for Spring's transaction infrastructure, 5 | independent of any specific transaction management system. 6 | Contains transaction manager, definition, and status interfaces. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/support/TransactionSynchronization.java: -------------------------------------------------------------------------------- 1 | package com.interface21.transaction.support; 2 | 3 | /** 4 | * Interface for callbacks after transaction completion. 5 | * Supported by AbstractPlatformTransactionManager. 6 | * @author Juergen Hoeller 7 | * @since 02.06.2003 8 | * @see TransactionSynchronizationManager 9 | * @see AbstractPlatformTransactionManager 10 | */ 11 | public interface TransactionSynchronization { 12 | 13 | /** 14 | * Completion status in case of proper commit 15 | */ 16 | int STATUS_COMMITTED = 0; 17 | 18 | /** 19 | * Completion status in case of proper rollback 20 | */ 21 | int STATUS_ROLLED_BACK = 1; 22 | 23 | /** 24 | * Status in case of heuristic mixed completion or system errors 25 | */ 26 | int STATUS_UNKNOWN = 2; 27 | 28 | /** 29 | * Invoked after transaction completion. 30 | * Can e.g. perform proper resource cleanup. 31 | * @param status completion status according to the STATUS_ constants 32 | */ 33 | void afterCompletion(int status); 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/com/interface21/transaction/support/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Support classes for the com.interface21.transaction package. 5 | Provides an abstract base class for transaction manager implementations, 6 | and a template plus callback for transaction demarcation. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/com/interface21/ui/context/NestingThemeSource.java: -------------------------------------------------------------------------------- 1 | package com.interface21.ui.context; 2 | 3 | /** 4 | * Subinterface of ThemeSource to be implemented by objects that 5 | * can resolve messages hierarchically. 6 | * @author Rod Johnson 7 | * @author Jean-Pierre Pawlak 8 | * @version $RevisionId$ 9 | */ 10 | public interface NestingThemeSource extends ThemeSource { 11 | 12 | /** 13 | * Set the parent that will be used to try to resolve theme messages 14 | * that this object can't resolve. 15 | * @param parent parent ThemeSource that will be used to 16 | * resolve messages that this object can't resolve. 17 | * May be null, in which case no further resolution is possible. 18 | */ 19 | void setParent(ThemeSource parent); 20 | } 21 | 22 | -------------------------------------------------------------------------------- /src/com/interface21/ui/context/Theme.java: -------------------------------------------------------------------------------- 1 | package com.interface21.ui.context; 2 | 3 | import com.interface21.context.MessageSource; 4 | 5 | /** 6 | * A Theme can resolve theme-specific messages, codes, file paths, etc 7 | * (e.g. CSS and image files in a web environment). 8 | * The MessageSource supports parameterization and internationalization. 9 | * @author Juergen Hoeller 10 | * @since 17.06.2003 11 | * @see ThemeSource 12 | * @see com.interface21.web.servlet.theme 13 | */ 14 | public interface Theme { 15 | 16 | /** 17 | * Return the name of the theme. 18 | * @return the name of the theme 19 | */ 20 | String getName(); 21 | 22 | /** 23 | * Return the specific MessageSource that resolves messages 24 | * with respect to this theme. 25 | * @return the theme-specific MessageSource 26 | */ 27 | MessageSource getMessageSource(); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/com/interface21/ui/context/ThemeSource.java: -------------------------------------------------------------------------------- 1 | package com.interface21.ui.context; 2 | 3 | /** 4 | * Interface to be implemented by objects that can resolve Themes. 5 | * This enables parameterization and internationalization of messages 6 | * for a given theme. 7 | * @author Jean-Pierre Pawlak 8 | * @author Juergen Hoeller 9 | * @see Theme 10 | */ 11 | public interface ThemeSource { 12 | 13 | /** 14 | * Return the Theme instance for the given theme name. 15 | * The returned Theme will resolve theme-specific messages, codes, 16 | * file paths, etc (e.g. CSS and image files in a web environment). 17 | * @param themeName name of the theme 18 | * @return the respective Theme, or null if none defined 19 | */ 20 | Theme getTheme(String themeName); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/com/interface21/ui/context/support/SimpleTheme.java: -------------------------------------------------------------------------------- 1 | package com.interface21.ui.context.support; 2 | 3 | import com.interface21.ui.context.Theme; 4 | import com.interface21.context.MessageSource; 5 | 6 | /** 7 | * Default Theme implementation, wrapping a name and an 8 | * underlying MessageSource. 9 | * @author Juergen Hoeller 10 | * @since 17.06.2003 11 | */ 12 | public class SimpleTheme implements Theme { 13 | 14 | private String name; 15 | 16 | private MessageSource messageSource; 17 | 18 | public SimpleTheme(String name, MessageSource messageSource) { 19 | this.name = name; 20 | this.messageSource = messageSource; 21 | } 22 | 23 | public String getName() { 24 | return name; 25 | } 26 | 27 | public MessageSource getMessageSource() { 28 | return messageSource; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/com/interface21/ui/context/support/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes supporting the com.interface21.ui.context package. 5 | Provides base classes for specialized UI contexts, e.g. for web UIs. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/util/ConstantException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.util; 7 | 8 | /** 9 | * Exception thrown when the Constants class is asked for an invalid 10 | * constant name. 11 | * @see com.interface21.util.Constants 12 | * @version $Id$ 13 | * @author Rod Johnson 14 | * @since 28-Apr-2003 15 | */ 16 | public class ConstantException extends IllegalArgumentException { 17 | 18 | /** 19 | * Thrown when an invalid constant name is requested 20 | * @param field invalid constant name 21 | * @param clazz class containing the constant definitions 22 | * @param message description of the problem 23 | */ 24 | public ConstantException(String field, Class clazz, String message) { 25 | super("Field '" + field + "' " + message + " in " + clazz); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/com/interface21/util/PagedListSourceProvider.java: -------------------------------------------------------------------------------- 1 | package com.interface21.util; 2 | 3 | import java.util.List; 4 | import java.util.Locale; 5 | 6 | /** 7 | * Callback that provides the source for a reloadable List. 8 | * Used by RefreshablePagedListHolder. 9 | * @author Jean-Pierre PAWLAK 10 | * @author Juergen Hoeller 11 | * @see RefreshablePagedListHolder#setSourceProvider 12 | */ 13 | public interface PagedListSourceProvider { 14 | 15 | /** 16 | * Load the List for the given Locale and filter settings. 17 | * The filter object can be of any custom class, preferably a bean 18 | * for easy data binding from a request. An instance will simply 19 | * get passed through to this callback method. 20 | * @param locale Locale that the List should be loaded for, 21 | * or null if not locale-specific 22 | * @param filter object representing filter settings, 23 | * or null if no filter options are used 24 | * @return the loaded List 25 | * @see RefreshablePagedListHolder#setLocale 26 | * @see RefreshablePagedListHolder#setFilter 27 | */ 28 | public List loadList(Locale locale, Object filter); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/com/interface21/util/package.html: -------------------------------------------------------------------------------- 1 | Miscellaneous utility classes, such as String manipulation utilities, a Log4J configurer, and a state holder for paged lists of objects. -------------------------------------------------------------------------------- /src/com/interface21/validation/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Provides data binding and validation functionality, 5 | for usage in business and/or UI layers. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/web/bind/ServletRequestBindingException.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.web.bind; 3 | 4 | import javax.servlet.ServletException; 5 | 6 | 7 | /** 8 | * Fatal binding exception, thrown when we want to 9 | * treat binding exceptions as unrecoverable. 10 | * @author Rod Johnson 11 | */ 12 | public class ServletRequestBindingException extends ServletException { 13 | 14 | public ServletRequestBindingException(String s) { 15 | super(s); 16 | } 17 | 18 | public ServletRequestBindingException(String s, Throwable t) { 19 | super(s, t); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/com/interface21/web/bind/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Provides web-specific data binding functionality, including a 5 | utility class for easy invocation of binding and validation. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/web/context/ContextLoaderListener.java: -------------------------------------------------------------------------------- 1 | package com.interface21.web.context; 2 | 3 | import javax.servlet.ServletContextEvent; 4 | import javax.servlet.ServletContextListener; 5 | 6 | /** 7 | * Bootstrap listener to start up Spring's root WebApplicationContext. 8 | * Simply delegates to ContextLoader. 9 | * 10 | *

Note: This listener should be registered after Log4jConfigListener, 11 | * if the latter is used. 12 | * 13 | * @author Juergen Hoeller 14 | * @since 17.02.2003 15 | * @see ContextLoader 16 | * @see com.interface21.web.util.Log4jConfigListener 17 | */ 18 | public class ContextLoaderListener implements ServletContextListener { 19 | 20 | /** 21 | * Initialize the root web application context. 22 | */ 23 | public void contextInitialized(ServletContextEvent event) { 24 | ContextLoader.initContext(event.getServletContext()); 25 | } 26 | 27 | /** 28 | * Close the root web application context. 29 | */ 30 | public void contextDestroyed(ServletContextEvent event) { 31 | ContextLoader.closeContext(event.getServletContext()); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/com/interface21/web/context/package.html: -------------------------------------------------------------------------------- 1 | Contains the application context subinterface for web applications, and the ContextLoaderListener that bootstraps the root web application context. -------------------------------------------------------------------------------- /src/com/interface21/web/context/support/package.html: -------------------------------------------------------------------------------- 1 | Classes supporting the com.interface21.web.context package, such as WebApplicationContext implementations, and a utility class for retrieval of the root application context etc. -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/handler/UrlAwareHandler.java: -------------------------------------------------------------------------------- 1 | package com.interface21.web.servlet.handler; 2 | 3 | /** 4 | * Optional interface to be implemented by request handlers in our 5 | * MVC approach that are interested in the URL they are mapped to. 6 | * @author Rod Johnson 7 | */ 8 | public interface UrlAwareHandler { 9 | 10 | /** 11 | * Set the URL this handler is mapped to. 12 | * This interface will only be implemented by some handlers: 13 | * others may be mapped to many URLs, and so cannot 14 | * benefit from knowledge of individual mappings. 15 | * Of course a handler can find out the request URL when it handles 16 | * a request: implementations of this interface want to know 17 | * about a single URL mapping before they begin to handle 18 | * requests. 19 | * @param url the URL this handler is mapped to 20 | */ 21 | void setUrlMapping(String url); 22 | 23 | } 24 | 25 | -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/handler/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Provides standard HandlerMapping implementations, 5 | including abstract base classes for custom implementations. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/i18n/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Locale support classes for Spring's web MVC framework. 5 | Provides standard LocaleResolver implementations, 6 | and a HandlerInterceptor for locale changes. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/mvc/multiaction/NoSuchRequestHandlingMethodException.java: -------------------------------------------------------------------------------- 1 | package com.interface21.web.servlet.mvc.multiaction; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | import javax.servlet.ServletException; 5 | 6 | /** 7 | * Exception thrown when there's no request handling method for 8 | * this request. 9 | * @author Rod Johnson 10 | */ 11 | public class NoSuchRequestHandlingMethodException extends ServletException { 12 | 13 | private String name; 14 | 15 | public NoSuchRequestHandlingMethodException(HttpServletRequest request) { 16 | super("No handling method can be found for request [" + request + "]"); 17 | } 18 | 19 | public NoSuchRequestHandlingMethodException(String name, MultiActionController multiActionRequestController) { 20 | super( 21 | "No request handling method with name '" + name + "' in class " + multiActionRequestController.getClass().getName()); 22 | this.name = name; 23 | } 24 | 25 | public String getName() { 26 | return name; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/package.html: -------------------------------------------------------------------------------- 1 | Provides servlets that integrate with the application context infrastructure, and the core interfaces and classes for the Spring web MVC framework.

This package and related packages are discussed in Chapters 12 and 13 of Expert One-On-One J2EE Design and Development by Rod Johnson (Wrox, 2002). -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/support/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Support classes for Spring's web MVC framework. 5 | Provides easy evaluation of the request context in views, 6 | and miscellaneous HandlerInterceptor implementations. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/tags/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spring's standard custom tag library. 5 | Supports JSP view implementations for Spring's web MVC framework. 6 | See i21.tld for descriptions of the various tags. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/theme/FixedThemeResolver.java: -------------------------------------------------------------------------------- 1 | package com.interface21.web.servlet.theme; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | import javax.servlet.http.HttpServletResponse; 5 | 6 | 7 | /** 8 | * Implementation of ThemeResolver that simply uses a fixed theme. 9 | * The fixed name can be defined via the defaultTheme property. 10 | * 11 | *

Note: Does not support setThemeName, as the theme is fixed. 12 | * 13 | * @author Jean-Pierre Pawlak 14 | * @author Juergen Hoeller 15 | * @since 17.06.2003 16 | * @see #setDefaultThemeName 17 | */ 18 | public class FixedThemeResolver extends AbstractThemeResolver { 19 | 20 | public String resolveThemeName(HttpServletRequest request) { 21 | return getDefaultThemeName(); 22 | } 23 | 24 | public void setThemeName(HttpServletRequest request, HttpServletResponse response, String themeName) { 25 | throw new IllegalArgumentException("Cannot change theme - use a different theme resolution strategy"); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/view/document/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Support classes for document generation, 5 | providing View implementations for PDF and Excel. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/view/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Provides standard View and ViewResolver implementations, 5 | including abstract base classes for custom implementations. 6 | 7 |

Application developers don't usually need to implement views, 8 | as the framework provides standard views for JSPs, Velocity, 9 | XSLT, etc. However, the ability to implement custom views easily 10 | by subclassing the AbstractView class in this package can be 11 | very helpful if an application has unusual view requirements. 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/view/velocity/CommonsLoggingLogSystem.java: -------------------------------------------------------------------------------- 1 | package com.interface21.web.servlet.view.velocity; 2 | 3 | import org.apache.commons.logging.Log; 4 | import org.apache.commons.logging.LogFactory; 5 | import org.apache.velocity.runtime.RuntimeServices; 6 | import org.apache.velocity.runtime.log.LogSystem; 7 | 8 | /** 9 | * Velocity LogSystem implementation for Jakarta Commons Logging. 10 | * Used by VelocityConfigurer to redirect log output. 11 | * @author Juergen Hoeller 12 | * @since 07.08.2003 13 | * @see VelocityConfigurer 14 | */ 15 | public class CommonsLoggingLogSystem implements LogSystem { 16 | 17 | private Log logger = LogFactory.getLog(getClass()); 18 | 19 | public void init(RuntimeServices runtimeServices) { 20 | } 21 | 22 | public void logVelocityMessage(int i, String msg) { 23 | switch (i) { 24 | case ERROR_ID: 25 | logger.error(msg); 26 | break; 27 | case WARN_ID: 28 | logger.warn(msg); 29 | break; 30 | case INFO_ID: 31 | logger.info(msg); 32 | break; 33 | case DEBUG_ID: 34 | logger.debug(msg); 35 | break; 36 | } 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/view/velocity/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Support classes for Velocity, 5 | providing a View implementation for Velocity templates 6 | and a Velocity initialization bean. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/com/interface21/web/servlet/view/xslt/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Support classes for XSLT, 5 | providing a View implementation for XSLT stylesheets. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/com/interface21/web/util/HtmlUtils.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/src/com/interface21/web/util/HtmlUtils.java -------------------------------------------------------------------------------- /src/com/interface21/web/util/Log4jConfigListener.java: -------------------------------------------------------------------------------- 1 | package com.interface21.web.util; 2 | 3 | import javax.servlet.ServletContextEvent; 4 | import javax.servlet.ServletContextListener; 5 | 6 | /** 7 | * Bootstrap listener for custom Log4J initialization in a web environment. 8 | * Simply delegates to Log4jWebConfigurer. 9 | * 10 | *

Note: This listener should be placed before ContextLoaderListener 11 | * in web.xml, when using custom Log4J initialization. 12 | * 13 | * @author Juergen Hoeller 14 | * @since 13.03.2003 15 | * @see com.interface21.web.util.Log4jWebConfigurer 16 | * @see WebAppRootListener 17 | */ 18 | public class Log4jConfigListener implements ServletContextListener { 19 | 20 | public void contextInitialized(ServletContextEvent event) { 21 | Log4jWebConfigurer.initLogging(event.getServletContext()); 22 | } 23 | 24 | public void contextDestroyed(ServletContextEvent event) { 25 | Log4jWebConfigurer.shutdownLogging(event.getServletContext()); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/com/interface21/web/util/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Miscellaneous web utility classes, such as HTML escaping, 5 | Log4J initialization, and cookie handling. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/com/interface21/aop/attributes/wildcardAtts.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | setAgeAtt 11 | 12 | 13 | zero 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Rod 23 | 33 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /test/com/interface21/aop/framework/Lockable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.aop.framework; 7 | 8 | 9 | public interface Lockable { 10 | void lock(); 11 | void unlock(); 12 | boolean locked(); 13 | } -------------------------------------------------------------------------------- /test/com/interface21/aop/framework/LockedException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.aop.framework; 7 | 8 | 9 | public class LockedException extends RuntimeException { 10 | 11 | LockedException() { 12 | } 13 | } -------------------------------------------------------------------------------- /test/com/interface21/aop/framework/TimestampIntroductionInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.interface21.aop.framework; 2 | 3 | 4 | import com.interface21.aop.framework.DelegatingIntroductionInterceptor; 5 | import com.interface21.core.TimeStamped; 6 | 7 | /** 8 | * 9 | */ 10 | public class TimestampIntroductionInterceptor extends DelegatingIntroductionInterceptor 11 | implements TimeStamped { 12 | 13 | private long ts; 14 | 15 | 16 | public TimestampIntroductionInterceptor(long ts) { 17 | this(); 18 | this.ts = ts; 19 | } 20 | 21 | public void setTime(long ts) { 22 | this.ts = ts; 23 | } 24 | /** 25 | * Constructor for TestAspectInterface. 26 | * @param interfacesToPublish 27 | */ 28 | public TimestampIntroductionInterceptor() { 29 | } 30 | 31 | /** 32 | * @see com.interface21.core.TimeStamped#getTimeStamp() 33 | */ 34 | public long getTimeStamp() { 35 | System.out.println("Invoked getTimeStamp method"); 36 | return ts; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /test/com/interface21/beans/BooleanTestBean.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans; 2 | 3 | /** 4 | * @author Juergen Hoeller 5 | * @since 10.06.2003 6 | */ 7 | public class BooleanTestBean { 8 | 9 | private boolean bool1; 10 | 11 | private Boolean bool2; 12 | 13 | public boolean isBool1() { 14 | return bool1; 15 | } 16 | 17 | public void setBool1(boolean bool1) { 18 | this.bool1 = bool1; 19 | } 20 | 21 | public Boolean getBool2() { 22 | return bool2; 23 | } 24 | 25 | public void setBool2(Boolean bool2) { 26 | this.bool2 = bool2; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /test/com/interface21/beans/Employee.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.beans; 3 | 4 | public class Employee extends TestBean { 5 | 6 | private String co; 7 | 8 | /** 9 | * Constructor for Employee. 10 | */ 11 | public Employee() { 12 | super(); 13 | } 14 | 15 | public String getCompany() { 16 | return co; 17 | } 18 | 19 | public void setCompany(String co) { 20 | this.co = co; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /test/com/interface21/beans/IOther.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.beans; 3 | 4 | public interface IOther { 5 | 6 | void absquatulate(); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /test/com/interface21/beans/ITestBean.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.beans; 3 | 4 | public interface ITestBean { 5 | 6 | int getAge(); 7 | 8 | void setAge(int age); 9 | 10 | String getName(); 11 | 12 | void setName(String name); 13 | 14 | ITestBean getSpouse(); 15 | 16 | void setSpouse(ITestBean spouse); 17 | 18 | /** 19 | * t null no error 20 | */ 21 | void exceptional(Throwable t) throws Throwable; 22 | 23 | Object returnsThis(); 24 | 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /test/com/interface21/beans/factory/KnowsIfInstantiated.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.beans.factory; 3 | 4 | public class KnowsIfInstantiated { 5 | 6 | private static boolean instantiated; 7 | 8 | public static void clearInstantiationRecord() { 9 | instantiated = false; 10 | } 11 | 12 | public static boolean wasInstantiated() { 13 | return instantiated; 14 | } 15 | 16 | /** 17 | * Constructor for KnowsIfLoaded. 18 | */ 19 | public KnowsIfInstantiated() { 20 | instantiated = true; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /test/com/interface21/beans/factory/MustBeInitialized.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.beans.factory; 7 | 8 | 9 | /** 10 | * Simple test of BeanFactory initialization 11 | * @author Rod Johnson 12 | * @since 12-Mar-2003 13 | * @version $Revision$ 14 | */ 15 | public class MustBeInitialized implements InitializingBean { 16 | 17 | private boolean inited; 18 | 19 | /** 20 | * @see com.interface21.beans.factory.InitializingBean#afterPropertiesSet() 21 | */ 22 | public void afterPropertiesSet() throws Exception { 23 | this.inited = true; 24 | } 25 | 26 | /** 27 | * Dummy business method that will fail unless the factory 28 | * managed the bean's lifecycle correctly 29 | */ 30 | public void businessMethod() { 31 | if (!this.inited) 32 | throw new RuntimeException("Factory didn't call afterPropertiesSet() on MustBeInitialized object"); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /test/com/interface21/beans/factory/support/leaf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | custom 10 | 25 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/com/interface21/beans/factory/support/middle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | custom 9 | 666 10 | 11 | 12 | 13 | 14 | 18 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /test/com/interface21/beans/factory/support/root.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | custom 19 | 25 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /test/com/interface21/beans/factory/xml/DummyReferencer.java: -------------------------------------------------------------------------------- 1 | package com.interface21.beans.factory.xml; 2 | 3 | import com.interface21.beans.TestBean; 4 | 5 | /** 6 | * @author Juergen Hoeller 7 | * @since 21.07.2003 8 | */ 9 | public class DummyReferencer { 10 | 11 | private TestBean testBean1; 12 | 13 | private TestBean testBean2; 14 | 15 | public TestBean getTestBean1() { 16 | return testBean1; 17 | } 18 | 19 | public void setTestBean1(TestBean testBean1) { 20 | this.testBean1 = testBean1; 21 | } 22 | 23 | public TestBean getTestBean2() { 24 | return testBean2; 25 | } 26 | 27 | public void setTestBean2(TestBean testBean2) { 28 | this.testBean2 = testBean2; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /test/com/interface21/beans/factory/xml/MixedCollectionBean.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The Spring Framework is published under the terms 3 | * of the Apache Software License. 4 | */ 5 | 6 | package com.interface21.beans.factory.xml; 7 | 8 | import java.util.Collection; 9 | 10 | /** 11 | * Bean that exposes a simple property that can be set 12 | * to a mix of references and individual values 13 | * @author Rod Johnson 14 | * @since 27-May-2003 15 | * @version $Id$ 16 | */ 17 | public class MixedCollectionBean { 18 | 19 | private Collection jumble; 20 | 21 | /** 22 | * @return Collection 23 | */ 24 | public Collection getJumble() { 25 | return jumble; 26 | } 27 | 28 | /** 29 | * Sets the jumble. 30 | * @param jumble The jumble to set 31 | */ 32 | public void setJumble(Collection jumble) { 33 | this.jumble = jumble; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /test/com/interface21/beans/factory/xml/factoryCircle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /test/com/interface21/beans/factory/xml/initializers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 7 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /test/com/interface21/beans/factory/xml/invalid.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Jenny 9 | 30 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /test/com/interface21/beans/factory/xml/parent.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | parent 8 | 1 9 | 10 | 11 | 15 | parent 16 | 2 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /test/com/interface21/context/ACATest.java: -------------------------------------------------------------------------------- 1 | package com.interface21.context; 2 | 3 | import java.util.Locale; 4 | 5 | public class ACATest implements ApplicationContextAware { 6 | 7 | private ApplicationContext ac; 8 | 9 | public void setApplicationContext(ApplicationContext ctx) throws ApplicationContextException { 10 | // check reinitialization 11 | if (this.ac != null) { 12 | throw new IllegalStateException("Already initialized"); 13 | } 14 | 15 | // check message source availability 16 | if (ctx != null) { 17 | try { 18 | ctx.getMessage("code1", null, Locale.getDefault()); 19 | } 20 | catch (NoSuchMessageException ex) { 21 | // expected 22 | } 23 | } 24 | 25 | this.ac = ctx; 26 | } 27 | 28 | public ApplicationContext getApplicationContext() { 29 | return ac; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /test/com/interface21/context/BeanThatListens.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.context; 3 | 4 | /** 5 | * Add as a bean. Should also listen. 6 | */ 7 | public class BeanThatListens implements ApplicationListener { 8 | 9 | private int events; 10 | 11 | /** 12 | * Constructor for BeanThatListeners. 13 | */ 14 | public BeanThatListens() { 15 | super(); 16 | } 17 | 18 | public void zero() { 19 | events = 0; 20 | } 21 | 22 | /** 23 | * @see ApplicationListener#onApplicationEvent(ApplicationEvent) 24 | */ 25 | public void onApplicationEvent(ApplicationEvent e) { 26 | ++events; 27 | //System.out.println("Bean that listens heard event"); 28 | } 29 | 30 | public int getEventCount() { 31 | return events; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /test/com/interface21/context/TestListener.java: -------------------------------------------------------------------------------- 1 | package com.interface21.context; 2 | 3 | 4 | /** 5 | * Listener that maintains a global count 6 | * of events. 7 | * @author Rod Johnson 8 | * @since January 21, 2001 9 | */ 10 | public class TestListener implements ApplicationListener { 11 | 12 | // static? 13 | private int eventCount; 14 | 15 | public int getEventCount() { 16 | return eventCount; 17 | } 18 | 19 | public void zeroCounter() { 20 | eventCount = 0; 21 | } 22 | 23 | public TestListener() { 24 | } 25 | 26 | 27 | //--------------------------------------------------------------------- 28 | // Implementation of WebApplicationListener 29 | //--------------------------------------------------------------------- 30 | /** 31 | * Ignore log events 32 | */ 33 | public void onApplicationEvent(ApplicationEvent e) { 34 | //System.out.println("onApplicationEvent of class " + e.getClass().getName()); 35 | ++eventCount; 36 | } 37 | 38 | } // class TestListener 39 | -------------------------------------------------------------------------------- /test/com/interface21/jdbc/mock/SpringMockDataSource.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SpringMockDataSource.java 3 | * 4 | * Copyright (C) 2002 by Interprise Software. All rights reserved. 5 | */ 6 | package com.interface21.jdbc.mock; 7 | 8 | import java.sql.Connection; 9 | 10 | import com.interface21.jdbc.datasource.SmartDataSource; 11 | import com.mockobjects.sql.MockDataSource; 12 | 13 | /** 14 | * @task enter type comments 15 | * 16 | * @author Trevor D. Cook 17 | * @version $Id$ 18 | */ 19 | public class SpringMockDataSource 20 | extends MockDataSource 21 | implements SmartDataSource { 22 | 23 | /** 24 | * Constructor for SpringMockDataSource. 25 | */ 26 | public SpringMockDataSource() { 27 | super(); 28 | } 29 | 30 | /** 31 | * @see com.interface21.jdbc.datasource.SmartDataSource#shouldClose(java.sql.Connection) 32 | */ 33 | public boolean shouldClose(Connection conn) { 34 | return false; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /test/com/interface21/jdbc/mock/SpringMockPreparedStatement.java: -------------------------------------------------------------------------------- 1 | package com.interface21.jdbc.mock; 2 | 3 | import java.sql.SQLException; 4 | import java.sql.SQLWarning; 5 | 6 | import com.mockobjects.sql.MockPreparedStatement; 7 | 8 | /** 9 | * Warning support should really be in Mock objects core 10 | * 11 | * (c) Rod Johnson, 2003 12 | * @author Rod Johnson 13 | */ 14 | public class SpringMockPreparedStatement extends MockPreparedStatement { 15 | 16 | private SQLWarning warning; 17 | 18 | 19 | public void setupReportWarningOnExecute(SQLWarning warnings) { 20 | this.warning = warnings; 21 | } 22 | 23 | /** 24 | * @see java.sql.Statement#getWarnings() 25 | */ 26 | public SQLWarning getWarnings() throws SQLException { 27 | // CHECK NOT BEFORE execute? 28 | 29 | return this.warning; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /test/com/interface21/jdbc/mock/SpringMockStatement.java: -------------------------------------------------------------------------------- 1 | package com.interface21.jdbc.mock; 2 | 3 | import java.sql.SQLException; 4 | import java.sql.SQLWarning; 5 | 6 | import com.mockobjects.sql.MockStatement; 7 | 8 | /** 9 | * Warning support should really be in Mock objects core 10 | * 11 | * (c) Rod Johnson, 2003 12 | * @author Rod Johnson 13 | */ 14 | public class SpringMockStatement extends MockStatement { 15 | 16 | private SQLWarning warning; 17 | 18 | 19 | public void setupReportWarningOnExecute(SQLWarning warnings) { 20 | this.warning = warnings; 21 | } 22 | 23 | /** 24 | * @see java.sql.Statement#getWarnings() 25 | */ 26 | public SQLWarning getWarnings() throws SQLException { 27 | // CHECK NOT BEFORE execute? 28 | 29 | return this.warning; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /test/com/interface21/jndi/JndiObjectFactoryBeanTests.java: -------------------------------------------------------------------------------- 1 | 2 | package com.interface21.jndi; 3 | 4 | import com.interface21.jndi.support.ExpectedLookupTemplate; 5 | 6 | import junit.framework.TestCase; 7 | 8 | /** 9 | * @author Rod Johnson 10 | */ 11 | public class JndiObjectFactoryBeanTests extends TestCase { 12 | 13 | /** 14 | * Constructor for JndiObjectFactoryBeanTests. 15 | * @param arg0 16 | */ 17 | public JndiObjectFactoryBeanTests(String arg0) { 18 | super(arg0); 19 | } 20 | 21 | 22 | public void testNoJndiName() { 23 | JndiObjectFactoryBean jof = new JndiObjectFactoryBean(); 24 | try { 25 | jof.afterPropertiesSet(); 26 | fail(); 27 | } 28 | catch (Exception ex) { 29 | 30 | } 31 | } 32 | 33 | 34 | public void testLookupReturns() throws Exception { 35 | JndiObjectFactoryBean jof = new JndiObjectFactoryBean(); 36 | Object o = new Object(); 37 | jof.setJndiTemplate(new ExpectedLookupTemplate("java:comp/env/foo", o)); 38 | jof.setJndiName("foo"); 39 | jof.afterPropertiesSet(); 40 | assertTrue(jof.getObject() == o); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /test/com/interface21/orm/jdo/test.properties: -------------------------------------------------------------------------------- 1 | myKey=myValue 2 | -------------------------------------------------------------------------------- /test/com/interface21/web/context/WEB-INF/context-messages.properties: -------------------------------------------------------------------------------- 1 | code1=message1 2 | 3 | # Example taken from the javadocs for the java.text.MessageFormat class 4 | message.format.example1=At '{1,time}' on "{1,date}", there was "{2}" on planet {0,number,integer}. 5 | message.format.example2=This is a test message in the message catalog with no args. 6 | -------------------------------------------------------------------------------- /test/com/interface21/web/context/WEB-INF/context-messages_en_GB.properties: -------------------------------------------------------------------------------- 1 | # Example taken from the javadocs for the java.text.MessageFormat class 2 | message.format.example1=At '{1,time}' on "{1,date}", there was "{2}" on station number {0,number,integer}. -------------------------------------------------------------------------------- /test/com/interface21/web/context/WEB-INF/context-messages_en_US.properties: -------------------------------------------------------------------------------- 1 | code1=message1 2 | 3 | # Example taken from the javadocs for the java.text.MessageFormat class 4 | message.format.example1=At '{1,time}' on "{1,date}", there was "{2}" on planet {0,number,integer}. 5 | message.format.example2=This is a test message in the message catalog with no args. -------------------------------------------------------------------------------- /test/com/interface21/web/context/WEB-INF/contextInclude.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | yetanotherdummy 5 | 6 | 7 | -------------------------------------------------------------------------------- /test/com/interface21/web/context/WEB-INF/myinit.properties: -------------------------------------------------------------------------------- 1 | father.name=Albert 2 | rod.age=31 3 | rod.name=Roderick 4 | -------------------------------------------------------------------------------- /test/com/interface21/web/context/WEB-INF/test-messages.properties: -------------------------------------------------------------------------------- 1 | code2=message2 2 | -------------------------------------------------------------------------------- /test/com/interface21/web/context/WEB-INF/test-theme.properties: -------------------------------------------------------------------------------- 1 | theme.example2=test-message2 2 | -------------------------------------------------------------------------------- /test/com/interface21/web/context/WEB-INF/testNamespace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Rod 8 | 31 9 | 10 | 11 | 12 | Kerry 13 | 34 14 | 15 | 16 | 17 | 18 | 19 | listenerVeto 20 | 66 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /test/com/interface21/web/context/WEB-INF/theme.properties: -------------------------------------------------------------------------------- 1 | theme.example1=This is a test message in the theme message catalog with no args. 2 | theme.example2=message2 3 | -------------------------------------------------------------------------------- /test/com/interface21/web/context/WEB-INF/theme_en_GB.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/test/com/interface21/web/context/WEB-INF/theme_en_GB.properties -------------------------------------------------------------------------------- /test/com/interface21/web/context/WEB-INF/theme_en_US.properties: -------------------------------------------------------------------------------- 1 | theme.example1=This is a test message in the theme message catalog. -------------------------------------------------------------------------------- /test/com/interface21/web/mock/MockRequestDispatcher.java: -------------------------------------------------------------------------------- 1 | package com.interface21.web.mock; 2 | 3 | import java.io.IOException; 4 | 5 | import javax.servlet.RequestDispatcher; 6 | import javax.servlet.ServletException; 7 | import javax.servlet.ServletRequest; 8 | import javax.servlet.ServletResponse; 9 | 10 | /** 11 | * 12 | * @author Rod Johnson 13 | * @version $RevisionId$ 14 | */ 15 | public class MockRequestDispatcher implements RequestDispatcher { 16 | 17 | private String url; 18 | 19 | public MockRequestDispatcher(String url) { 20 | this.url = url; 21 | } 22 | 23 | public void forward(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { 24 | ((MockHttpServletResponse) servletResponse).forwarded = url; 25 | System.out.println("RequestDispatcher -- FORWARDING to [" + url + "]"); 26 | } 27 | 28 | public void include(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { 29 | ((MockHttpServletResponse) servletResponse).included = url; 30 | System.out.println("RequestDispatcher -- INCLUDING [" + url + "]"); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /test/com/interface21/web/servlet/complexviews.properties: -------------------------------------------------------------------------------- 1 | form.class=com.interface21.web.servlet.view.InternalResourceView 2 | form.requestContextAttribute=rc 3 | form.url=myform.jsp 4 | -------------------------------------------------------------------------------- /test/com/interface21/web/servlet/handler/map1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/com/interface21/web/servlet/view/BaseViewTests.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/test/com/interface21/web/servlet/view/BaseViewTests.java -------------------------------------------------------------------------------- /test/com/interface21/web/servlet/view/ResourceBundleViewResolverTestSuiteNoCache.java: -------------------------------------------------------------------------------- 1 | package com.interface21.web.servlet.view; 2 | 3 | public class ResourceBundleViewResolverTestSuiteNoCache extends ResourceBundleViewResolverTestSuite { 4 | 5 | protected boolean getCache() { 6 | return false; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /test/com/interface21/web/servlet/view/testviews.properties: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Format is 4 | # viewName=:classname dependent string 5 | 6 | # for JSPView, classname dependent string is 7 | # /property1=value1,...,propertyn=valuen 8 | 9 | 10 | debugView.class=com.interface21.web.servlet.view.InternalResourceView 11 | debugView.url=jsp/debug/debug.jsp 12 | debugView.attributesCSV=foo=[bar],\ 13 | postcode=[SE10 9JY] 14 | 15 | test.class=com.interface21.web.servlet.view.ResourceBundleViewResolverTestSuite$TestView 16 | 17 | 18 | VintResultView.class=com.interface21.web.servlet.view.velocity.VelocityView 19 | VintResultView.templateName=/velocity_templates/interestResultBig.vm 20 | 21 | #CONTENTTYPE 22 | #static atts 23 | 24 | XintResultView.class=com.interface21.web.servlet.view.RedirectView 25 | 26 | 27 | XintResultView3.class=com.interface21.web.servlet.view.RedirectView 28 | 29 | 30 | XintResultView2.class=com.interface21.web.servlet.view.RedirectView 31 | -------------------------------------------------------------------------------- /test/com/interface21/web/servlet/view/testviews_fr.properties: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Format is 4 | # viewName=:classname dependent string 5 | 6 | # for JSPView, classname dependent string is 7 | # /property1=value1,...,propertyn=valuen 8 | 9 | 10 | debugView.class=com.interface21.web.servlet.view.InternalResourceView 11 | debugView.url=jsp/debug/deboug.jsp 12 | debugView.contentType=text/xml; charset=ISO-8859-1 13 | 14 | -------------------------------------------------------------------------------- /test/com/interface21/web/servlet/view/views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | /example1.jsp 8 | 9 | 10 | 11 | /example2new.jsp 12 | 13 | 14 | testvalue1 15 | testvalue2 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /test/log4j.properties: -------------------------------------------------------------------------------- 1 | # Configure logging for testing 2 | 3 | log4j.rootCategory=WARN, stdout 4 | 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d %p %c - %m%n 8 | -------------------------------------------------------------------------------- /xdocs/features.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Luke Taylor 6 | Features 7 | 8 | 9 | 10 |

11 |

12 |

    13 |
  • 14 | This document should (probably) provide an overview of the problem domains Spring 15 | tackles and a brief explanation of the approach taken in each case and why it is 16 | superior to conventional development practices. 17 |
  • 18 |
19 |

20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /xdocs/goals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Luke 6 | Spring's Goals 7 | 8 | 9 | 10 |
11 |

12 | Spring's main goal is to provide a framework which simplifies the development of J2EE 13 | applications. To achieve this it addresses issues such as: 14 |

    15 |
  • List of key areas of Spring concern
  • 16 |
17 |

18 | 19 |
20 | 21 |
22 | -------------------------------------------------------------------------------- /xdocs/images/logo-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cbeams/spring-framework-i21/ed27de6d3e2246b2e6d7538e1fe7f7226d11ec3d/xdocs/images/logo-blue.png -------------------------------------------------------------------------------- /xdocs/index.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Spring Framework 7 | Luke 8 | 9 | 10 | 11 | 12 |
13 |

14 | Spring is a framework for developing J2EE applications. It is based on the code published in the book 15 | Expert One-on-One J2EE Design and Development written by 16 | Rod Johnson. It includes code for JavaBeans-based configuration management and a JDBC abstraction layer. 17 |

18 |

19 |

20 |
21 | 22 | 29 | 30 |
31 | -------------------------------------------------------------------------------- /xdocs/navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spring 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /xdocs/status.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | News and Status 7 | Luke 8 | 9 | 10 | 11 | 12 |
13 |

14 | This document contains the latest news and status reports from the 15 | Spring Framework project. 16 |

17 | 18 | 19 |

20 | No news yet. 21 |

22 |
23 | 24 |
25 | 26 | 27 |
28 | --------------------------------------------------------------------------------