Ok here are the samples.  I apologize for taking a while but we have a pretty 
deep parent hierarchy and I had to scrub these files to make them generic.  
Also let me take a second to explain  how we use appfuse so you can understand 
some of the modifications we have made.  W

We have a number of company databases and we wanted to provide a management 
application for each and we also did not want our developers writing their own 
SQL or creating their own hibernate layer.  We decided that if there was a 
central kit for data access for each database we could tune that layer and 
every application that leveraged that layer could take advantage of the 
improvement.  This has been in place for a little over a year and is working 
well.  We ran under maven-1 and recently converted to maven-2 but have been 
using a version of the maven-2 appfuse plugin for quite sometime.  

The first step is to use appfuse to generate the management application for 
each database.  This is fairly straightforward since it follows very closely to 
the appfuse tutorial.   Then for composite applications that need to access 
multiple databases from inside that application they merely have to import the 
database access layer jar for each database.  These jars are the standard 
appfuse data layer jars that include the hibernate layer (dao and hibernatedao) 
and the spring layer (manager and managerimpl).  We also support multiple 
schemas per kit which is why we changed from middlegen to hibernate-tools

To avoid collisions we needed to do 3 things:

1) Place the applicationContest-persist.xml and applicationContext-service.xml 
in their own package structure.  (i.e. 
com.scryan.datakit.dao.hibernatedao.applicationContext.xml)
2) Create a property management system that allowed us to dynamically configure 
the sessionFactory datasource for each jar and each environment (dev, test, 
stage and prod) for both runtime and testing.
3) Insure all bean names are unique so there is no collision during spring load 
time if the tablenames are the same.  This also meant that our sessionFactories 
and transactionManagerProxies must have unique names across kits and that the 
correct dependencies were injected to the correct beans.

That said here is how we set up the maven-1 and maven-2 projects to support 
testing and runtime with one set of context files and multiple datasources


applicationContext-persist.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd";>
<beans>
    <!-- Hibernate SessionFactory -->
    <bean id="sessionFactoryUnique" 
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation">
            
<value>classpath:com/scryan/datakit/properties/hibernate.cfg.xml</value>
        </property>
        <property name="mappingLocations">
            <value>classpath*:com/scryan/datakit/model/**/*.hbm.xml</value>
        </property>
    </bean>
    <!-- Make sure to make the proper changes in the service xml to use this 
transaction manager -->
    <bean id="transactionManagerUnique"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref local="sessionFactory" />
        </property>
    </bean>
    !-- Generic DAO - can be used when doing standard CRUD -->
    <bean id="dao" class="com.scryan.datakit.dao.hibernate.BaseDAOHibernate">
        <property name="sessionFactory" ref="sessionFactoryUnique" />
    </bean>
    <!-- Add new DAOs here -->
    <!--CreditReportValue-START-->
    <bean id="creditReportValueDAO" 
class="com.scryan.datakit.dao.jdbc.CreditReportValueDAOJdbc"
        autowire="byName" >
       <property name="sessionFactory" ref="sessionFactoryUnique" />
   </bean>

hibernate.cfg.xml for runtime using a jndi datasource from weblogic located in 
src/main/resources/properties/com/scryan/datakit/properties

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration 
DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd";>
<hibernate-configuration>
    <session-factory>
        <property 
name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property>
        <property 
name="hibernate.connection.datasource">jdbc/SAMPLEDATASOURCE</property>
        <!-- We use the old parser to get around an issue with weblogic and 
ANTLR -->
        <property name="hibernate.query.factory_class">
            org.hibernate.hql.classic.ClassicQueryTranslatorFactory
        </property>
        <property name="hibernate.generate_statistics">true</property>
    </session-factory>
</hibernate-configuration>


hibernate.cfg.xml for test located in 
src/test/resources/properties/com/scryan/datakit/properties

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration 
DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd";>
<hibernate-configuration>
        <session-factory>
                <property 
name="hibernate.connection.username">SAMPLEUSERNAME</property>
                <property 
name="hibernate.connection.password">SAMPLEPASSWORD</property>
                <property 
name="hibernate.connection.url">jdbc:db2://SAMPLEMACHINENAME:SAMPLEPORT/SAMPLEDATABASENAME</property>
                <property 
name="hibernate.connection.driver_class">com.ibm.db2.jcc.DB2Driver</property>
                <property name="hibernate.connection.isolation">1</property>
                <property 
name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property>
                <!-- We use the old parser to get around an issue with weblogic 
and ANTLR -->
                <property 
name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
                <property name="hibernate.generate_statistics">true</property>
        </session-factory>
</hibernate-configuration>

pom.xml build section for both runtime and test


          <build>
                <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
                <testResources>                 
                  <!-- This grabs any test specific properties for the test run 
-->
                        <testResource>
                                
<directory>${basedir}/src/test/resources/properties</directory>
                                <includes>
                                        <include>**/*.*</include>
                                </includes>
                                <filtering>false</filtering>
                        </testResource>
                  <!-- This grabs any environment specific test specific files 
(build env could be dev,test,stage,prod)  Should be using profiles here. -->
                        <testResource>
                                
<directory>${basedir}/src/test/resources/${maven.build.environment}</directory>
                                <includes>
                                        <include>**/*.*</include>
                                </includes>
                                <filtering>false</filtering>
                        </testResource>
                </testResources>
                <resources>
                  <!-- This grabs environment specific properties and should be 
replaced with profiles. -->
                        <resource>
                                
<directory>${basedir}/src/main/resources/${maven.build.environment}</directory>
                                <includes>
                                        <include>**/*.*</include>
                                </includes>
                                <filtering>false</filtering>
                        </resource>
                  <!-- This grabs non environment specific properties including 
the applicationContext xml files. -->
                        <resource>
                                
<directory>${basedir}/src/main/resources/properties</directory>
                                <includes>
                                        <include>**/*.*</include>
                        </includes>
                                <filtering>false</filtering>
                        </resource> 
                  <!-- This makes sure all the hbm.xml files are included in 
the jar.  The applicationContext xml files are in resources. -->
                  <resource>
                                <directory>${basedir}/src/main/java</directory>
                                <includes>
                                        <include>**/*.hbm.xml</include>
                        </includes>
                                <filtering>false</filtering>
                        </resource>         
             </resources>
        </build>

Scott Ryan
Chief Technology Officer
Soaring Eagle L.L.C.
[EMAIL PROTECTED]
www.soaringeagleco.com
(303) 263-3044 

-----Original Message-----
From: Daniel Serodio [mailto:[EMAIL PROTECTED]
Sent: Friday, August 25, 2006 7:33 AM
To: Maven Users List
Subject: Re: Better to use variables or hard-coded paths?


Scott Ryan wrote:
> We actually use the same application context but use the test resources 
> construct to pull it out of the main build path for use during testing.  You 
> just need to include the xml files from the main tree in your resources 
> during testing and it works very nice.  We use a different hibernate 
> configuration since in one case we are using a JNDI lookup in production and 
> during testing just a direct jdbc connection.  The xml is configured to build 
> the session factory from the data source we define in the properties file.  
> If you like I can send you the maven 1 or 2 config we are using.
>   
Can you please send me the m2 config? I don't understand what you mean
by "pull it out of the main build path".
> Scott Ryan
> Chief Technology Officer
> Soaring Eagle L.L.C.
> [EMAIL PROTECTED]
> www.soaringeagleco.com
> (303) 263-3044 
>
> -----Original Message-----
> From: Matt Raible [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, August 23, 2006 10:58 AM
> To: Maven Users List
> Subject: Re: Better to use variables or hard-coded paths?
>
>
> On 8/23/06, Daniel Serodio <[EMAIL PROTECTED]> wrote:
>   
>> Matt Raible wrote:
>>     
>>> I'm customizing my pom.xml so XML files are available on my classpath
>>> (at /WEB-INF/*.xml) when testing. My question is (hopefully) simple.
>>>
>>> Is it better to use:
>>>       
>> <snip/>
>>
>> I think using "Hard-coded directories" is more "Maven-like", while using
>> variables is more "Ant-like". I'd stick with the hard-coded directories,
>> or better yet, use Maven's "stardard directory layout"
>> http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
>>     
>
> I am using this layout, I just need to include src/main/webapp in my
> classpath so I can use /WEB-INF/applicationContext.xml in my tests -
> w/o having duplicate context files.
>
> Thanks for your advice Daniel.
>
> Matt
>
>   
>> HTH,
>> Daniel Serodio
>>     


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




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

Reply via email to