XML рдХреЗ рдмрд┐рдирд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ ... рдмрд┐рд▓реНрдХреБрд▓!

рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдФрд░ рд╕рдм рдХреБрдЫ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд░реНрддрдорд╛рди рдпреБрдЧ рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдПрдиреЛрдЯреЗрдЯрд┐рдВрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВред рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕ред

рд╢реБрд░реБрдЖрдд рдореЗрдВ EJB 2.1 рдерд╛, рдЬрд╣рд╛рдБ рднреА рд╕рдВрднрд╡ рд╣реЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ XML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рдеред рдпрд╣ рдХрд╣рдирд╛ рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА рдХрд┐ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдЖрдкрдХреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдХреЛрдб рдХреА рдХрдо рд╕реЗ рдХрдо 10 рд▓рд╛рдЗрдиреЗрдВ рдФрд░ рджреЛ XML рдкреЗрдЬ рд▓рд┐рдЦрдиреЗ рд╣реЛрдВрдЧреЗред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рдЗрдВрдЯрд░рдлреЗрд╕, рдореИрдиреБрдЕрд▓ JNDI- рд▓реБрдХрд┐рдВрдЧ, рдорд▓реНрдЯреА-рд▓реЗрд╡рд▓ рдЯреНрд░рд╛рдп-рдХреИрдЪ, рд░рд┐рдореЛрдЯрдПрдХреНрд╕реИрдкреНрд╢рди ... рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдХреЗ рд▓рд┐рдП рдЪреЗрдХред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдкрдХрд░рдг рдЗрд╕ рдкреВрд░реЗ "рд░рд╕реЛрдИ" рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдереЗред



рдлрд┐рд░ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдирд╛рдпрд╛ред PortableRemoteObject.narrow () рдХреА рдЕрд╕реНрдкрд╖реНрдЯ рдЬрд╛рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж, рдпрд╣ рддрд╛рдЬреА рд╣рд╡рд╛ рдХреА рд╕рд╛рдВрд╕ рдмрди рдЧрдпрд╛ред рд╕рдордп рдмреАрдд рдЧрдпрд╛ (рд╡реИрд╕реЗ, рдХрд┐рд╕реА рдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рд╕рд╛рд▓ рдкрд╣рд▓реЗ JRE рдХреА рдЖрдЦрд┐рд░реА рдмрдбрд╝реА рд░рд┐рд▓реАрдЬрд╝ рд╣реБрдИ рдереА?) рдФрд░ рд╕реВрд░рдЬ рдХреЛ рд╕рдмрдХ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖред EJB 3.0 рд╕реНрдкреНрд░рд┐рдВрдЧ, рдПрдХреНрд╕рдПрдордПрд▓-рдлреНрд░реА рд╕реЗ рднреА рд╕рд░рд▓ рдерд╛, рдПрдиреЛрдЯреЗрд╢рди, рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рдеред 3.1 рд╕рд░рд▓реАрдХрд░рдг рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдФрд░ рдмрдбрд╝рд╛ рдХрджрдо рдерд╛ред рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ, EJB рдХреЛ рдЕрдм рд╕реНрдкреНрд░рд┐рдВрдЧ рдСрдлрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдХрд╛рдлреА рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рд╕рд╛рджреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдХреЛрдИ EJB рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ (рдУрд╣, рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ ...), рдмреЙрдХреНрд╕ JPA 1.0 / 2.0, JSR-250 рд╕реЗ рдЕрдкрдирд╛ рд╕рдорд░реНрдерди рджрд┐рдпрд╛ , JSR-330, JAX-WS / RS рдФрд░ рдЕрдзрд┐рдХред рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдЬ рдПрдХ рдзреАрдореА, рднрд╛рд░реА рдФрд░ рдлреНрд░реЗрдо рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЦреНрдпрддрдГ рдПрдХреНрд╕рдПрдордПрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рдХрд╛рд░рдгред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдХ рдЬреЗрдкрд┐рдВрдЧ рд▓рдбрд╝рдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЗрдИрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИред



рдореБрдЭреЗ рд░рд╛рдЬрдиреАрддрд┐ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдФрд░ рдореИрдВ рд▓рдВрдмреЗ рдирд┐рдмрдВрдз рд▓рд┐рдЦрдХрд░ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдврд╛рдВрдЪреЗ рдХрд╛ рдмрдЪрд╛рд╡ рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓реЗрдХрд┐рди рддреБрдЪреНрдЫ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╣реАрдВ рд▓реВрдВрдЧрд╛ рдФрд░ XML рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛ред рдПрдХреНрд╕рдПрдордПрд▓ рдХреЗ рдмрд┐рдирд╛ рдмрд┐рд▓реНрдХреБрд▓, рдПрдХ рднреА рд▓рд╛рдЗрди рдХреЗ рдмрд┐рдирд╛ред

рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ JDBC, JMS рдФрд░ JMX рдХреЗ рд╕рд╛рде рдмрд╕рдВрдд (xml рд╢рд╛рдЦрд╛ рдореЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг, рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг) рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрд╛, рддрд╛рдХрд┐ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛, рдФрд░, рдХрджрдо рд╕реЗ рдХрджрдо, рдореИрдВ XML рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдКрдВрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:amq="http://activemq.apache.org/schema/core" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:mbean-export /> <bean id="fooService" class="com.blogspot.nurkiewicz.FooService"> <property name="jmsOperations" ref="jmsTemplate" /> </bean> <bean id="fooRequestProcessor" class="com.blogspot.nurkiewicz.FooRequestProcessor"> <property name="fooRepository" ref="fooRepository" /> </bean> <bean id="fooRepository" class="com.blogspot.nurkiewicz.FooRepository" init-method="init"> <property name="jdbcOperations" ref="jdbcTemplate" /> </bean> <!-- JDBC --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.h2.Driver" /> <property name="url" value="jdbc:h2:~/workspace/h2/spring-noxmal;DB_CLOSE_ON_EXIT=FALSE;TRACE_LEVEL_FILE=4;AUTO_SERVER=TRUE" /> <property name="username" value="sa" /> <property name="password" value="" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <constructor-arg ref="dataSource" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <constructor-arg ref="dataSource" /> </bean> <tx:annotation-driven /> <!-- JMS --> <bean id="jmsConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> <constructor-arg> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> </constructor-arg> </bean> <amq:queue id="requestsQueue" physicalName="requests" /> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <constructor-arg ref="jmsConnectionFactory" /> <property name="defaultDestination" ref="requestsQueue" /> </bean> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsConnectionFactory" /> <property name="destination" ref="requestsQueue" /> <property name="sessionTransacted" value="true"/> <property name="concurrentConsumers" value="5"/> <property name="messageListener"> <bean class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <constructor-arg ref="fooRequestProcessor" /> <property name="defaultListenerMethod" value="process"/> </bean> </property> </bean> </beans>
      
      





рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреАрдиреНрд╕ рдХреА рдПрдХ рдЬреЛрдбрд╝реА, рд▓реЗрдирджреЗрди рдФрд░ рдЬреЗрдПрдордПрд╕ рдХреЗ рд╕рд╛рде рдЬреЗрдбреАрдмреАрдПрд╕, рднреЗрдЬрдирд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рд╡рд┐рд╡рд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ - рдЬреЗрдПрдордПрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдо рдореЗрдВ рд╕реЗ рдПрдХ рдЬреЗрдПрдордПрд╕ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ, рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд╛рд░реА)ред



рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХреНрд╕рдПрдордПрд▓ рдкрд░рдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗрд╡рд╛ рдФрд░ рд╕рдВрд╕рд╛рдзрди рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ <рд╕рдВрджрд░реНрдн: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреАрдиреНрд╕ ( рдкрд░рд┐рд╡рд░реНрддрди ) рдХреЗ рд▓рд┐рдП рдШрдЯрдХ-рд╕реНрдХреИрди />:

 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:amq="http://activemq.apache.org/schema/core" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:mbean-export /> <context:component-scan base-package="com.blogspot.nurkiewicz"/> <!-- JDBC --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.h2.Driver" /> <property name="url" value="jdbc:h2:~/workspace/h2/spring-noxmal;DB_CLOSE_ON_EXIT=FALSE;TRACE_LEVEL_FILE=4;AUTO_SERVER=TRUE" /> <property name="username" value="sa" /> <property name="password" value="" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <constructor-arg ref="dataSource" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <constructor-arg ref="dataSource" /> </bean> <tx:annotation-driven /> <!-- JMS --> <bean id="jmsConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> <constructor-arg> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> </constructor-arg> </bean> <amq:queue id="requestsQueue" physicalName="requests" /> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <constructor-arg ref="jmsConnectionFactory" /> <property name="defaultDestination" ref="requestsQueue" /> </bean> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsConnectionFactory" /> <property name="destination" ref="requestsQueue" /> <property name="sessionTransacted" value="true"/> <property name="concurrentConsumers" value="5"/> <property name="messageListener"> <bean class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <constructor-arg ref="fooRequestProcessor" /> <property name="defaultListenerMethod" value="process"/> </bean> </property> </bean> </beans>
      
      





XML рдХреА рдХрдо 10 рд▓рд╛рдЗрдиреЗрдВ, рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ ... рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕реЗрдо?

 @Service public class FooRepository { @Resource private JdbcOperations jdbcOperations; @PostConstruct public void init() { log.info("Database server time is: {}", jdbcOperations.queryForObject("SELECT CURRENT_TIMESTAMP", Date.class)); } //... }
      
      





рд╕реЗрдЯрд░ рдФрд░ рдЗрдирд┐рдЯ рдореЗрдердб рдХреЛ рдПрдиреЛрдЯреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ-рдЬреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ-рдПрдиреЛрдЯреЗрд╢рди рдЙрдирдХреЗ рд▓реЙрд░реЗрд▓ рдкрд░ рдЖрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдПрдХреНрд╕рдПрдордПрд▓ рд░рд╣рддреЗ рд╣реИрдВред рдЕрдм рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдЪреАрдЬреЗрдВ рдЬреИрд╕реЗ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓, рдЖрджрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП?

рдпрд╣реАрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдорд╕реНрддреАред рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд XML рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдФрд░ рдЗрди рд╕рднреА рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ... ( рдкрд░рд┐рд╡рд░реНрддрди )

 import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ContextConfiguration { @Bean public DataSource dataSource() { final BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("org.h2.Driver"); ds.setUrl("jdbc:h2:~/workspace/h2/spring-noxmal;DB_CLOSE_ON_EXIT=FALSE;TRACE_LEVEL_FILE=4;AUTO_SERVER=TRUE"); ds.setUsername("sa"); return ds; } }
      
      





@Configuration, Bean , dataSource (), рдпрд╣ рдХреНрдпрд╛ рд╣реИ ...?!? рд▓реЗрдХрд┐рди рдпрд╣ рд╡реИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рд╕реЛрдЪрд╛ рдерд╛: рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЙрдиреНрдЯреЗрдХреНрдЯрдХреЛрдирдлрд┐рдЧрд░реЗрд╢рди рдХреНрд▓рд╛рд╕ рдФрд░ рдмреАрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдП рдЧрдП рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдРрд╕реА рд╡рд┐рдзрд┐ XML-ev <bean ...> (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдХреЛрдк , @DendendsOn рдФрд░ Lazy ) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдмреАрди рдХреА XML рдШреЛрд╖рдгрд╛ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджреНрдпрдкрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк JdbcTemplate рдФрд░ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрдХ ( рдкрд░рд┐рд╡рд░реНрддрди ) рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 @Bean public JdbcOperations jdbcOperations() { return new JdbcTemplate(dataSource()); } @Bean public PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); }
      
      





рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд-рдмрд┐рди рдХреЛ рдЕрдиреНрдп рдбрд┐рдмреНрдмреЗ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдмрдирд╛рддреА рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд (JdbcTemplate рдФрд░ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрдХ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрднреА рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдЖрдкрдХреА рдкреНрд░реЗрдорд┐рдХрд╛ рдиреЗ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди (рдЙрдо, рдЧреБрдЗрд╕реЗ? ) рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ред



рдПрдХ рдмрд╛рдд рдЕрдм рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ... рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ () рдХреЛ рджреЛ рдмрд╛рд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдП рдЧрдП рд╣реИрдВ? рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдиреЗ рдореБрдЭреЗ рд╣реИрд░рд╛рди рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╡рд╕рдВрдд рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЬрд╛рдирд╡рд░ рдмрди рдЧрдпрд╛ред рд╕реНрдХреЛрдк рдПрдиреЛрдЯреЗрд╢рди рдирд╣реАрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░, рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд () рд╡рд┐рдзрд┐ рдкрд░ рдереЛрдбрд╝рд╛ рд╕реАрдЬреАрдПрд▓рдЖрдИрдмреА рдкреНрд░реЙрдХреНрд╕рд┐рдВрдЧ рдЬрд╛рджреВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП, рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдПрдХ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдк рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрд╕реА рдмреАрди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреВрд▓!

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, XML рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд┐рдореНрди рдХреЗ рд▓рд┐рдП:

 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:amq="http://activemq.apache.org/schema/core" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:mbean-export /> <context:component-scan base-package="com.blogspot.nurkiewicz"/> <!-- JDBC --> <tx:annotation-driven /> <!-- JMS --> <bean id="jmsConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> <constructor-arg> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> </constructor-arg> </bean> <amq:queue id="requestsQueue" physicalName="requests" /> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <constructor-arg ref="jmsConnectionFactory" /> <property name="defaultDestination" ref="requestsQueue" /> </bean> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsConnectionFactory" /> <property name="destination" ref="requestsQueue" /> <property name="sessionTransacted" value="true"/> <property name="concurrentConsumers" value="5"/> <property name="messageListener"> <bean class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <constructor-arg ref="fooRequestProcessor" /> <property name="defaultListenerMethod" value="process"/> </bean> </property> </bean> </beans>
      
      





рдЕрдм рдЖрдк рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╢реЗрд╖ рд╕реЗрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдПред рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рд╕рдм рдХреБрдЫ рдкрд╛рд░рджрд░реНрд╢реА ( рдкрд░рд┐рд╡рд░реНрддрди ) рд╣реИред

 @Bean public ConnectionFactory jmsConnectionFactory() { final ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(); factory.setBrokerURL("tcp://localhost:61616"); return new PooledConnectionFactory(factory); } @Bean public Queue requestsQueue() { return new ActiveMQQueue("requests"); } @Bean public JmsOperations jmsOperations() { final JmsTemplate jmsTemplate = new JmsTemplate(jmsConnectionFactory()); jmsTemplate.setDefaultDestination(requestsQueue()); return jmsTemplate; }
      
      





DefaultMessageListenerContainer рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЕрдирд╛рдо рдЖрдВрддрд░рд┐рдХ рдбрд┐рдмреНрдмреЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рдмреАрди рдХреЗ рдЕрдВрджрд░ рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХреНрд░рдо рдореЗрдВ рдирд┐рдЬреА рд╡рд┐рдзрд┐ ( рдкрд░рд┐рд╡рд░реНрддрди ):

 @Bean public AbstractJmsListeningContainer jmsContainer() { final DefaultMessageListenerContainer container = new DefaultMessageListenerContainer(); container.setConnectionFactory(jmsConnectionFactory()); container.setDestination(requestsQueue()); container.setSessionTransacted(true); container.setConcurrentConsumers(5); container.setMessageListener(messageListenerAdapter()); return container; } private MessageListenerAdapter messageListenerAdapter() { final MessageListenerAdapter adapter = new MessageListenerAdapter(fooRequestProcessor); adapter.setDefaultListenerMethod("process"); return adapter; }
      
      







рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╕рдВрдд рдореЗрдВ рд╕рд╛рджреЗ рдЬрд╛рд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддреБрдЪреНрдЫ рдФрд░ рд╕рд░рд▓ рд╣реИ - рдХреЛрдб рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИред рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдП, рд╣рдо рдЗрд╕ рдкрд░ рдЖрдП:



<? xml рд╕рдВрд╕реНрдХрд░рдг = "1.0" рдПрдиреНрдХреЛрдбрд┐рдВрдЧ = "UTF-8"?>

<рд╕реЗрдо xmlns = " www.springframework.org/schema/beans "

xmlns: xsi = " www.w3.org/2001/XMLSchema-instance "

xmlns: tx = " www.springframework.org/schema/tx "

xmlns: рд╕рдВрджрд░реНрдн = " www.springframework.org/schema/context "

xsi: schemaLocation = " www.springframework.org/schema/beans www.springframework.org/schema/beans/spring-beans-3.0.xsd

www.springframework.org/schema/tx www.springframework.org/schema/tx/spring-tx-2.5.xsd

www.springframework.org/schema/context www.springframework.org/schema/context/spring-context.xsd ┬╗>



<рд╕рдВрджрд░реНрдн: mbean-export />



<рд╕рдВрджрд░реНрдн: рдШрдЯрдХ-рд╕реНрдХреИрди рдмреЗрд╕-рдкреИрдХреЗрдЬ = "com.blogspot.nurkiewicz" />



<tx: рдПрдиреЛрдЯреЗрд╢рди-рдЪрд╛рд▓рд┐рдд />







рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдпрд╣ рд╕рдм рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди XML рдХреА рдЖрдЦрд┐рд░реА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдерд╛ред рдореЗрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЛ, рдЖрдк рдЗрди рд╕реБрдВрджрд░ рдЫреЛрдЯреЗ рдирд╛рдо-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд╡рд╣ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗред рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЗ рдмрд╛рдж, рдмреБрд░реЗ рдЕрдиреБрднрд╡реЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ, рдФрд░ рд╕реНрдХреИрди рдХрд┐рдП рдЧрдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛, рдореИрдВрдиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЬреЗрдПрдордПрдХреНрд╕ рдШреЛрд╖рдгрд╛рдУрдВ ( рдкрд░рд┐рд╡рд░реНрддрди ) рдФрд░ рд▓реЗрдирджреЗрди ( рдкрд░рд┐рд╡рд░реНрддрди ) рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдпрд╣ рдирд┐рд░реНрджреЛрд╖ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛрдб рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА:

 @Bean public AnnotationMBeanExporter annotationMBeanExporter() { return new AnnotationMBeanExporter(); } @Bean public TransactionAttributeSource annotationTransactionAttributeSource() { return new AnnotationTransactionAttributeSource(); } @Bean public TransactionInterceptor transactionInterceptor() { return new TransactionInterceptor(transactionManager(), annotationTransactionAttributeSource()); }
      
      





рд╡рд╣рд╛рдВ рддреБрдо рдЬрд╛рдУред рдпрд╣ рд╕реЗрдо рдФрд░ web.xml рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП XML рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:

 <context:component-scan base-package="com.blogspot.nurkiewicz"/> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
      
      





рд╡реЗрдм рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╡реЗрдм рдХрдВрдЯреЗрдирд░ рдХреЛ рдпрд╣ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдХреЛрдИ рдПрдХреНрд╕рдПрдордПрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдЭреВрда рдмреЛрд▓рд╛, рдФрд░ рдЕрдм ... рдорд╛рдл рдХрд░рдирд╛, рдареАрдХ рд╣реИ? рд╡реНрдпрд╛рдкрд╛рд░ ... рд╣рд╛рдБ, рдмрд╕ рдордЬрд╛рдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВред яБК рдЖрдЗрдП рдЗрд╕рд╕реЗ рднреА рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВред рд╕реЗрдХрдВрдб рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ! рдЦреИрд░ ... рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рддрдиреА рдЬрд▓реНрджреА рдирд╡реАрдирддрдо рдЯреЙрд╕реНрдХ 7 рдпрд╛ рджреВрд╕рд░реЗ рдЬреЗрдПрд╕рдЖрд░ 315 рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ- рд╕рдХреНрд╖рдо (рд╕рд░реНрд╡рд▓реЗрдЯ 3.0 рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ) рд╡реЗрдм рд╕рд░реНрд╡рд░ ...



рд╡реЗрдм рдЯреБрдХрдбрд╝реЗ рдПрдХ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд▓реЗрдЯ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЪреМрдЦрдЯреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рд╣реИ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрди рд╕рднреА рдХреЛ рд╡реЗрдм .xml рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд░реНрд╡рд▓реЗрдЯ, рдлрд╝рд┐рд▓реНрдЯрд░ рдпрд╛ рд╢реНрд░реЛрддрд╛ рд╡рд┐рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕рдордп рд╣реИ рдЬрдм рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рдирд┐рд░реНрднрд░рддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИред рд╡реЗрдм рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕рд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рд░реНрд╡рд▓реЗрдЯ 3.0 рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╕рднреА JAR / WEB-INF / lib рдореЗрдВ рд╕реНрдХреИрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрджрд┐ рдХрд┐рд╕реА рднреА JAR рдореЗрдВ web-fragment.xml / META-INF рд╣реИ, рддреЛ рдпрд╣ web.xml рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдЧрд╛ред



рд╕рдордЭ рдЧрдпрд╛, рдореИрдВ рдХрд╣рд╛рдБ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ? рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо XML рдХреЗ рдмрд┐рдирд╛ рдмрд╕ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреЗ рд╡реЗрдм рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ JAR рдмрдирд╛рдПрдВ? рддрд╛рд░ рд╕рдВрд░рдЪрдирд╛:

 . |-- META-INF `-- WEB-INF |-- classes | |-- com | | `-- blogspot | | `-- nurkiewicz | | |-- ContextConfiguration.class | | |-- FooRepository.class | | |-- FooRequestProcessor.class | | |-- FooService$1.class | | `-- FooService.class | `-- logback.xml |-- lib | |-- spring-web-3.0.5.RELEASE.jar | |-- spring-web-fragment-0.0.1-SNAPSHOT.jar | | `-- META-INF | | |-- MANIFEST.MF | | |-- web-fragment-context.xml | | `-- web-fragment.xml | `-- spring-beans-3.0.5.RELEASE.jar `-- web.xml
      
      





рд╡рд╕рдВрдд-рд╡реЗрдм-рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЙрджреНрджреЗрд╢реНрдп * рд╣реИред рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╡реЗрдм-рдЯреБрдХрдбрд╝рд╛ -xml рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдЬрд╛рд░:

 <web-fragment xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd" version="3.0"> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/META-INF/web-fragment-context.xml</param-value> </context-param> </web-fragment>
      
      





рдПрдХ рдирдпрд╛ рддрддреНрд╡ рд╡реЗрдм-рдЯреБрдХрдбрд╝рд╛-рд╕рдВрджрд░реНрдн рд╣реИред xml рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдлрд╝рд╛рдЗрд▓ред рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ (/WEB-INF/applicationContext.xml) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЕрдм (!) рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рдЫреЛрдЯрд╛ JAR рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рдереА:

 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <context:component-scan base-package="." /> </beans>
      
      





рдкреИрдХреЗрдЬ рдХреА рдШреЛрд╖рдгрд╛ " рд╕рддрд░реНрдХрддрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рджреБрдЦрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреИрдХреЗрдЬ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╢рд╛рдпрдж рдЙрдЪрд┐рдд рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CLASSPATH рд╕реНрдХреИрди рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛, рдЕрдиреНрдпрдерд╛ рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдШреЛрд╖рдгрд╛ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╡реЗрдм рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдореБрдЦреНрдп рд▓рд╛рдн рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рддрд╛ рд╣реИ - рдЬрдм рджреЛ рдЫреЛрдЯреЗ XML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрдкрдиреЗ WAR рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдФрд░ POJO рдХреЛ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреЛрдЯреЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ (рдФрд░ / рдпрд╛ @Configuration рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред



рдпрджрд┐ рдпрд╣ рдмреЙрдХреНрд╕ рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд┐рдЪрд╛рд░, рд╡реЛрдЯ рдкрд╕рдВрдж рд╣реИ ) рдХреЗ рдмреАрдЪ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рддреЛ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧ рд╡рд╕рдВрдд рдореЗрдВ рдпрд╛рддреНрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдЬреИрд╕реЗ рд╣реА рд╡реЗ pom.xml рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, pom.xml рдХреЛ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ , logback.xml рдХреА рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрд░реЗ, рдХреЛрдИ рдПрдХреНрд╕рдПрдордПрд▓ рдирд╣реАрдВ! рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрдХреАрди рд╣реИ? рдХреНрдпрд╛ рдЖрдкрдХреЛ XML рдпрд╛ Java рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рд╣реИ? рдпрд╛ рд╢рд╛рдпрдж рдЧреНрд░реВрд╡реА? рдХреГрдкрдпрд╛ рдЪреБрдк рд░рд╣реЗрдВред рд╕реНрдкреНрд░рд┐рдВрдЧ рдЖрдкрдХреЛ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдФрд░ рд╕рд░рд▓ рд╣реЛрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИред рдЗрддрдирд╛ рд╕рд░рд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред




All Articles