You can subscribe to this list here.
| 2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(6) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2006 |
Jan
(178) |
Feb
(169) |
Mar
(286) |
Apr
(117) |
May
(98) |
Jun
(68) |
Jul
(63) |
Aug
(121) |
Sep
(88) |
Oct
(124) |
Nov
(2) |
Dec
(111) |
| 2007 |
Jan
(224) |
Feb
(69) |
Mar
(10) |
Apr
(72) |
May
(7) |
Jun
(21) |
Jul
(33) |
Aug
(35) |
Sep
(12) |
Oct
(22) |
Nov
(5) |
Dec
(6) |
| 2008 |
Jan
(2) |
Feb
(10) |
Mar
(39) |
Apr
(58) |
May
(34) |
Jun
(9) |
Jul
(27) |
Aug
(10) |
Sep
(3) |
Oct
|
Nov
|
Dec
|
|
From: Vance K. <va...@us...> - 2007-02-04 04:18:23
|
User: vancek
Date: 07/02/03 20:18:19
Modified: andromda-ejb3/src/site/axdoc howto.xml howto21.xml
andromda-ejb3/conf/howto andromda.xml
andromda-ejb3/src/site site.xml
Added: andromda-ejb3/src/site/axdoc howto22.xml
Log:
add test framework docs
Revision Changes Path
1.4 +8 -0 cartridges/andromda-ejb3/src/site/axdoc/howto.xml
Index: howto.xml
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/site/axdoc/howto.xml,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -w -r1.3 -r1.4
--- howto.xml 19 Jan 2007 13:16:58 -0000 1.3
+++ howto.xml 4 Feb 2007 04:18:18 -0000 1.4
@@ -227,6 +227,14 @@
<li><a href="howto21.html#Seam_Profile">EJB3 Seam Profile</a></li>
</ul>
</li>
+ <li>
+ <a href="howto22.html">TestNG with JBoss Embeddable EJB3 Microcontainer</a>
+ <ul>
+ <li><a href="howto22.html#Setup">Setup</a></li>
+ <li><a href="howto22.html#Configuration">Configuration</a></li>
+ <li><a href="howto22.html#Session_Tests">Session Tests</a></li>
+ </ul>
+ </li>
</ul>
</p>
<p>
1.5 +6 -0 cartridges/andromda-ejb3/src/site/axdoc/howto21.xml
Index: howto21.xml
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/site/axdoc/howto21.xml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -w -r1.4 -r1.5
--- howto21.xml 19 Jan 2007 13:16:58 -0000 1.4
+++ howto21.xml 4 Feb 2007 04:18:18 -0000 1.5
@@ -304,5 +304,11 @@
</p>
</subsection>
</section>
+ <section name="Next">
+ <p>
+ To read about the test framework using TestNG and JBoss Embeddable microcontainer, click
+ <a href="howto22.html">here</a>.
+ </p>
+ </section>
</body>
</document>
1.1 cartridges/andromda-ejb3/src/site/axdoc/howto22.xml
Index: howto22.xml
===================================================================
<?xml version="1.0" encoding="iso-8859-1"?>
<document>
<properties>
<author email="va...@us...">Vance Karimi</author>
<title>AndroMDA - EJB3 - TestNG with JBoss Embeddable EJB3 Microcontainer</title>
</properties>
<body>
<section name="TestNG with JBoss Embeddable EJB3 Microcontainer">
<p>
As a developer, you are always tempted to get by with smallest amount of unit testing...some
even avoid the subject all together. With the introduction of EJB 3.0, it was intended to make
things easier, including testing. Setting up the right test environment was always a difficult,
specially when you don't always have the luxury of time to get it right!
</p>
<p>
The EJB3 cartridge now provides a basic test framework for your session beans. You can now
use the popular TestNG framework, along with JBoss Embeddable EJB3 Microcontainer to perform
your tests outside of the application server.
</p>
<p>
Read up on the <a href="http://docs.jboss.org/ejb3/embedded/embedded.html">JBoss Embedded container</a>.
Read about the <a href="http://www.testng.org/">TestNG framework</a>.
</p>
<p>
The example widely available on the internet use JUnit in combination with TestNG. The EJB3 cartridge
only uses TestNG with Maven2. It is currently using TestNG version 4.7-jdk15 and JBoss Embeddable
ALPHA_9.
</p>
<a name="Setup"/>
<subsection name="Setup">
<p>
You do not need to download any of the tools mentioned above. The cartridge will generate
all the required configuration necessary for the JBoss Embeddable container. All the
required artifacts are also available from the AndroMDA repository.
</p>
<p>
Because we consider testing such a key component of a project, there is no option to enable or
disable the test framework with an EJB3 project. Everything is generated whether you want it
or not. However, all the tests will finish successuflly (as there is not implementation for them).
</p>
<p>
All you need to do is follow the <a href="project.html">project howto</a> to generate your
EJB3 project. Make sure you are running the latest AndroMDA since the test framework is only
available from AndroMDA version 3.3-SNAPSHOT onwards.
</p>
<p>
The test framework will be generated as long as you have at least 1 session bean modelled
in your project.
</p>
</subsection>
<a name="Configuration"/>
<subsection name="Configuration">
<p>
When you first run <i>mvn</i> over your project, the cartridge will generate all the
JBoss Embeddable container configuration files in <code>core/src/test/resources</code>.
All these files are generated ONCE ONLY and will NOT be over-written. You can safely make
any modifications to any of these files.
</p>
<p>
There is one exception to the latter. The <code>testng.xml</code> configuration file is also
generated in <code>core/src/test/resource</code>, however, this is over-written on every
run over your model. This is because when you add a new session bean, the trigger to
run the tests for this new bean is inserted into the <code>testng.xml</code> file.
</p>
<p>
Once of the most interesting configuration files generated is the <code>embedded-jboss-beans.xml</code>.
Take a look at your project's file and notice that the EJB3 cartridge has added
your datasource to this file, along with the existing <code>DefaultDS</code> datasource, which
is used by the JMS provider. You are free to modify the connection settings so that
you point this to your development database server.
</p>
<p>
The <code>log4j.xml</code> file in this directory sets the <i>Threshold</i> to <code>WARN</code>
by default. If you want to see more detailed log information to the console while the tests
are running, change this to something like <code>DEBUG</code>.
</p>
<p>
The <code>login-config.xml</code> sets up the JAAS environment for your tests. If you had
enabled security before running maven over your project the first time, everything will be
generated for you and you don't need to worry about the following.
If you had not
enable security for your project on the first run, a relevent security context will not be
generated for you in this file. Say that you want to enable security at a later point, then
by simply following <a href="howto8.html">the security howto</a>, you uncomment the
<code>securityRealm</code> property in the <b>ejb3</b> and the web framework namespaces. You
must then copy the last <code>application-policy</code> section of the <code>login-config.xml</code>
and change the name property to your <code>application.id</code>. If your project application id
name is <b>howtomodel</b>, the <code>login-config.xml</code> should contain the following:
<source language="xml"><![CDATA[
<application-policy name="howtomodel">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag="required"/>
</authentication>
</application-policy>
]]></source>
</p>
<p>
The cartridge will also generate a <code>roles.properties</code> and <code>users.properties</code>
which will help provide basic JAAS authentication for users/roles.
</p>
</subsection>
<a name="Session_Tests"/>
<subsection name="Session Tests">
<p>
Now take a look in your source folder <code>core/src/test/java</code>. You should have a file
named <code>EJB3Container.java</code> in one of the packages here. This file starts and
shuts down the embeddable container before and after running any tests respectively. It also
provides helper static methods to get the <code>InitialContext</code> so you can retrive
the stub for the session bean (local or remote interface) from JNDI.
</p>
<p>
It is important to note that if you want to propogate security credentials (principal and password)
because you have enable security and secured your session beans by modelling actors to the class
or operations, you must use the overloaded <code>getInitialContext</code> methods with signature
that allows you to provide a username and password. The generated tests actually provide a basic
template that shows you how to do this.
</p>
<p>
In case you did not enable security on the first generation run, and find you need it later,
apart from following the instructions above to modify the <code>login-config.xml</code>,
you must also modify the <code>EJB3Container.java</code> to uncomment the following section
in the <i>startup</i> method:
<source><![CDATA[
logger.info("==>Deploying security-beans");
EJB3StandaloneBootstrap.deployXmlResource("security-beans.xml");
logger.info("==>Deployed security-beans");
]]></source>
</p>
<p>
Now open up any of the test classes. These are generated to the <code>core/src/test/java</code>
source folder in the corresponding package. You will notice the EJB3 cartridge just creates
one test case per session bean business operation. The the test source files will NOT be
over-written, so if you add or delete business operations from your model, you must make the
changes to these files manually.
</p>
<p>
You may have noticed how simple these test sources really are and you may be wondering how
we start and stop the embeddable microcontainer and deploy our archives which contain the EJB 3
beans. Take a look at your <code>testng.xml</code> in <code>core/src/test/resources</code>.
The first class listed to run is the <code>EJB3Container</code>. This will call the
annotated methods to start and shutdown the embeddable container before and after your tests
respectively.
</p>
<p>
You can now open the tests and add your implementation before running maven over the <i>core</i>
project or running the tests.
</p>
</subsection>
</section>
</body>
</document>
1.2 +3 -0 cartridges/andromda-ejb3/conf/howto/andromda.xml
Index: andromda.xml
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/conf/howto/andromda.xml,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -r1.1 -r1.2
--- andromda.xml 19 Jan 2007 14:35:43 -0000 1.1
+++ andromda.xml 4 Feb 2007 04:18:19 -0000 1.2
@@ -54,6 +54,9 @@
<property name="services">${howto.output.dir}</property>
<property name="application-config">${howto.output.dir}/org/andromda/test</property>
<property name="application-metainf">${application.metainf.dir}</property>
+ <property name="test-config">${howto.output.dir}/org/andromda/test</property>
+ <property name="tests">${howto.output.dir}</property>
+ <property name="test-impls">${howto.output.dir}</property>
<property name="ejb3TypesPackage">org.andromda.test</property>
<property name="persistenceContainerName">jboss</property>
<property name="persistenceContextUnitName">howtomodel</property>
1.21 +1 -0 cartridges/andromda-ejb3/src/site/site.xml
Index: site.xml
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/site/site.xml,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -w -r1.20 -r1.21
--- site.xml 18 Dec 2006 02:02:34 -0000 1.20
+++ site.xml 4 Feb 2007 04:18:19 -0000 1.21
@@ -48,6 +48,7 @@
<item name="Webservices" href="howto18.html"/>
<item name="Embeddable Value Objects" href="howto20.html"/>
<item name="JBoss Seam" href="howto21.html"/>
+ <item name="Test Framework" href="howto22.html"/>
<item name="Tips & Tricks" href="tips.html"/>
</menu>
<menu name="Support">
|
|
From: Vance K. <va...@us...> - 2007-02-04 02:45:12
|
User: vancek
Date: 07/02/03 18:45:08
Modified: andromda-ejb3/src/main/java/org/andromda/cartridges/ejb3/metafacades
EJB3SessionOperationFacadeLogicImpl.java
EJB3SessionFacadeLogicImpl.java
andromda-ejb3/src/main/resources/META-INF/andromda
cartridge.xml metafacades.xml namespace.xml
andromda-ejb3/src/site changes.xml
andromda-ejb3/src/main/uml EJB3MetafacadeModel.xml.zip
Added: andromda-ejb3/src/main/resources/templates/ejb3/microcontainer
ejb3-interceptors-aop.xml.vsl jndi.properties.vsl
login-config.xml.vsl log4j.xml.vsl
default.persistence.properties.vsl
embedded-jboss-beans.xml.vsl users.properties.vsl
security-beans.xml.vsl jboss-jms-beans.xml.vsl
roles.properties.vsl
andromda-ejb3/src/main/resources/templates/ejb3/test
SessionTest.vsl EJB3Container.vsl testng.xml.vsl
Log:
add TestNG and JBoss Embeddable Microcontainer support for generating basic testng tests for each modelled session bean
Revision Changes Path
1.1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/microcontainer/ejb3-interceptors-aop.xml.vsl
Index: ejb3-interceptors-aop.xml.vsl
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE aop PUBLIC
"-//JBoss//DTD JBOSS AOP 1.0//EN"
"http://www.jboss.org/aop/dtd/jboss-aop_1_0.dtd">
<aop>
<interceptor class="org.jboss.aspects.remoting.InvokeRemoteInterceptor" scope="PER_VM"/>
<interceptor class="org.jboss.aspects.security.SecurityClientInterceptor" scope="PER_VM"/>
<interceptor class="org.jboss.aspects.tx.ClientTxPropagationInterceptor" scope="PER_VM"/>
<interceptor class="org.jboss.ejb3.remoting.IsLocalInterceptor" scope="PER_VM"/>
<interceptor class="org.jboss.aspects.remoting.ClusterChooserInterceptor" scope="PER_VM"/>
<interceptor class="org.jboss.aspects.tx.TxPropagationInterceptor" scope="PER_VM"/>
<stack name="ServiceClientInterceptors">
<interceptor-ref name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
<interceptor-ref name="org.jboss.aspects.security.SecurityClientInterceptor"/>
<interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
</stack>
<stack name="AsynchronousStatelessSessionClientInterceptors">
<interceptor-ref name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
<interceptor-ref name="org.jboss.aspects.security.SecurityClientInterceptor"/>
<interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
</stack>
<stack name="AsynchronousStatefulSessionClientInterceptors">
<interceptor-ref name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
<interceptor-ref name="org.jboss.aspects.security.SecurityClientInterceptor"/>
<interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
</stack>
<stack name="StatelessSessionClientInterceptors">
<interceptor-ref name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
<interceptor-ref name="org.jboss.aspects.security.SecurityClientInterceptor"/>
<interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
</stack>
<stack name="StatefulSessionClientInterceptors">
<interceptor-ref name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
<interceptor-ref name="org.jboss.aspects.security.SecurityClientInterceptor"/>
<interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
</stack>
<stack name="ClusteredStatelessSessionClientInterceptors">
<interceptor-ref name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
<interceptor-ref name="org.jboss.aspects.security.SecurityClientInterceptor"/>
<interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.aspects.remoting.ClusterChooserInterceptor"/>
<interceptor-ref name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
</stack>
<stack name="ClusteredStatefulSessionClientInterceptors">
<interceptor-ref name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
<interceptor-ref name="org.jboss.aspects.security.SecurityClientInterceptor"/>
<interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.aspects.remoting.ClusterChooserInterceptor"/>
<interceptor-ref name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
</stack>
<interceptor class="org.jboss.ejb3.asynchronous.AsynchronousInterceptor" scope="PER_CLASS"/>
<interceptor class="org.jboss.ejb3.ENCPropagationInterceptor" scope="PER_VM"/>
<interceptor name="Basic Authorization" factory="org.jboss.ejb3.security.RoleBasedAuthorizationInterceptorFactory" scope="PER_CLASS"/>
<interceptor name="JACC Authorization" factory="org.jboss.ejb3.security.JaccAuthorizationInterceptorFactory" scope="PER_CLASS"/>
<interceptor factory="org.jboss.ejb3.security.AuthenticationInterceptorFactory" scope="PER_CLASS"/>
<interceptor factory="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory" scope="PER_CLASS"/>
<interceptor class="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor" scope="PER_VM"/>
<interceptor class="org.jboss.ejb3.stateless.StatelessInstanceInterceptor" scope="PER_VM"/>
<interceptor class="org.jboss.ejb3.stateful.StatefulInstanceInterceptor" scope="PER_VM"/>
<interceptor class="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor" scope="PER_VM"/>
<interceptor class="org.jboss.ejb3.service.ServiceSingletonInterceptor" scope="PER_VM"/>
<interceptor class="org.jboss.ejb3.cache.StatefulReplicationInterceptor" scope="PER_VM"/>
<interceptor factory="org.jboss.ejb3.stateful.StatefulRemoveFactory" scope="PER_CLASS_JOINPOINT"/>
<interceptor factory="org.jboss.ejb3.tx.TxInterceptorFactory" scope="PER_CLASS_JOINPOINT"/>
<interceptor factory="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory" scope="PER_CLASS_JOINPOINT"/>
<interceptor factory="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory" scope="PER_CLASS"/>
<interceptor class="org.jboss.ejb3.AllowedOperationsInterceptor" scope="PER_VM"/>
<interceptor factory="org.jboss.ejb3.mdb.CurrentMessageInjectorInterceptorFactory" scope="PER_CLASS"/>
<interceptor class="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor" scope="PER_VM"/>
<domain name="Stateless Bean">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.security.SecurityDomain->*(..))">
<interceptor-ref name="Basic Authorization"/>
</bind>
<bind pointcut="execution(public * @javax.annotation.security.RunAs->*(..))">
<interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.ejb.Clustered->*(..))">
<interceptor-ref name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
<interceptor-ref name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
</bind>
<annotation expr="!class(@org.jboss.annotation.ejb.PoolClass)">
@org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class, maxSize=30, timeout=10000)
</annotation>
</domain>
<domain name="JACC Stateless Bean">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.security.SecurityDomain->*(..))">
<interceptor-ref name="JACC Authorization"/>
</bind>
<bind pointcut="execution(public * @javax.annotation.security.RunAs->*(..))">
<interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.ejb.Clustered->*(..))">
<interceptor-ref name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
<interceptor-ref name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
</bind>
<annotation expr="!class(@org.jboss.annotation.ejb.PoolClass)">
@org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class, maxSize=30, timeout=10000)
</annotation>
</domain>
<domain name="Base Stateful Bean">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.security.SecurityDomain->*(..))">
<interceptor-ref name="Basic Authorization"/>
</bind>
<bind pointcut="execution(public * @javax.annotation.security.RunAs->*(..))">
<interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.ejb.Clustered->*(..))">
<interceptor-ref name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * *->@javax.ejb.Remove(..))">
<interceptor-ref name="org.jboss.ejb3.stateful.StatefulRemoveFactory"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.stateful.StatefulInstanceInterceptor"/>
<interceptor-ref name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
</bind>
#set ($tmpstr = "$")
<bind pointcut="execution(public * ${tmpstr}instanceof{javax.ejb.SessionSynchronization}->*(..))">
<interceptor-ref name="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.ejb.Clustered->*(..)) AND !execution(public * *->@javax.ejb.Remove(..))">
<interceptor-ref name="org.jboss.ejb3.cache.StatefulReplicationInterceptor"/>
</bind>
<annotation expr="!class(@org.jboss.annotation.ejb.PoolClass)">
@org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class, maxSize=30, timeout=10000)
</annotation>
</domain>
<domain name="Stateful Bean" extends="Base Stateful Bean" inheritBindings="true">
<!-- NON Clustered cache configuration -->
<annotation expr="!class(@org.jboss.annotation.ejb.cache.Cache) AND !class(@org.jboss.annotation.ejb.Clustered)">
@org.jboss.annotation.ejb.cache.Cache (org.jboss.ejb3.cache.simple.SimpleStatefulCache.class)
</annotation>
<annotation expr="!class(@org.jboss.annotation.ejb.cache.simple.PersistenceManager) AND !class(@org.jboss.annotation.ejb.Clustered)">
@org.jboss.annotation.ejb.cache.simple.PersistenceManager (org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager.class)
</annotation>
<annotation expr="!class(@org.jboss.annotation.ejb.cache.simple.CacheConfig) AND !class(@org.jboss.annotation.ejb.Clustered)">
@org.jboss.annotation.ejb.cache.simple.CacheConfig (maxSize=100000, idleTimeoutSeconds=300)
</annotation>
<!-- Clustered cache configuration -->
<annotation expr="!class(@org.jboss.annotation.ejb.cache.Cache) AND class(@org.jboss.annotation.ejb.Clustered)">
@org.jboss.annotation.ejb.cache.Cache (org.jboss.ejb3.cache.tree.StatefulTreeCache.class)
</annotation>
<annotation expr="!class(@org.jboss.annotation.ejb.cache.tree.CacheConfig) AND class(@org.jboss.annotation.ejb.Clustered)">
@org.jboss.annotation.ejb.cache.tree.CacheConfig (name="jboss.cache:service=EJB3SFSBClusteredCache", maxSize=100000, idleTimeoutSeconds=300)
</annotation>
</domain>
<domain name="JACC Stateful Bean">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.security.SecurityDomain->*(..))">
<interceptor-ref name="JACC Authorization"/>
</bind>
<bind pointcut="execution(public * @javax.annotation.security.RunAs->*(..))">
<interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.ejb.Clustered->*(..))">
<interceptor-ref name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * *->@javax.ejb.Remove(..))">
<interceptor-ref name="org.jboss.ejb3.stateful.StatefulRemoveFactory"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.stateful.StatefulInstanceInterceptor"/>
<interceptor-ref name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
</bind>
<bind pointcut="execution(public * ${tmpstr}instanceof{javax.ejb.SessionSynchronization}->*(..))">
<interceptor-ref name="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.ejb.Clustered->*(..)) AND !execution(public * *->@javax.ejb.Remove(..))">
<interceptor-ref name="org.jboss.ejb3.cache.StatefulReplicationInterceptor"/>
</bind>
<annotation expr="!class(@org.jboss.annotation.ejb.PoolClass)">
@org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class, maxSize=30, timeout=10000)
</annotation>
<!-- NON Clustered cache configuration -->
<annotation expr="!class(@org.jboss.annotation.ejb.cache.Cache) AND !class(@org.jboss.annotation.ejb.Clustered)">
@org.jboss.annotation.ejb.cache.Cache (org.jboss.ejb3.cache.simple.SimpleStatefulCache.class)
</annotation>
<annotation expr="!class(@org.jboss.annotation.ejb.cache.simple.PersistenceManager) AND !class(@org.jboss.annotation.ejb.Clustered)">
@org.jboss.annotation.ejb.cache.simple.PersistenceManager (org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager.class)
</annotation>
<annotation expr="!class(@org.jboss.annotation.ejb.cache.simple.CacheConfig) AND !class(@org.jboss.annotation.ejb.Clustered)">
@org.jboss.annotation.ejb.cache.simple.CacheConfig (maxSize=100000, idleTimeoutSeconds=300)
</annotation>
<!-- Clustered cache configuration -->
<annotation expr="!class(@org.jboss.annotation.ejb.cache.Cache) AND class(@org.jboss.annotation.ejb.Clustered)">
@org.jboss.annotation.ejb.cache.Cache (org.jboss.ejb3.cache.tree.StatefulTreeCache.class)
</annotation>
<annotation expr="!class(@org.jboss.annotation.ejb.cache.tree.CacheConfig) AND class(@org.jboss.annotation.ejb.Clustered)">
@org.jboss.annotation.ejb.cache.tree.CacheConfig (name="jboss.cache:service=EJB3SFSBClusteredCache", maxSize=100000, idleTimeoutSeconds=300)
</annotation>
</domain>
<domain name="Embedded Stateful Bean" extends="Base Stateful Bean" inheritBindings="true">
<!-- NON Clustered cache configuration -->
<annotation expr="!class(@org.jboss.annotation.ejb.cache.Cache)">
@org.jboss.annotation.ejb.cache.Cache (org.jboss.ejb3.cache.NoPassivationCache.class)
</annotation>
</domain>
<domain name="Message Driven Bean">
<bind pointcut="execution(public * @javax.annotation.security.RunAs->*(..))">
<interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
</bind>
<annotation expr="!class(@org.jboss.annotation.ejb.PoolClass)">
@org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class, maxSize=30, timeout=10000)
</annotation>
</domain>
<domain name="Consumer Bean">
<bind pointcut="execution(public * @javax.annotation.security.RunAs->*(..))">
<interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
</bind>
<bind pointcut="execution(public * *->*(..)) AND (has(* *->@org.jboss.annotation.ejb.CurrentMessage(..)) OR hasfield(* *->@org.jboss.annotation.ejb.CurrentMessage))">
<interceptor-ref name="org.jboss.ejb3.mdb.CurrentMessageInjectorInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
</bind>
<annotation expr="!class(@org.jboss.annotation.ejb.PoolClass)">
@org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class, maxSize=30, timeout=10000)
</annotation>
</domain>
<domain name="Service Bean">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
</bind>
<bind pointcut="!execution(* *->create()) AND !execution(* *->start()) AND !execution(*->new(..))">
<interceptor-ref name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.security.SecurityDomain->*(..))">
<interceptor-ref name="Basic Authorization"/>
</bind>
<bind pointcut="execution(public * @javax.annotation.security.RunAs->*(..))">
<interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
</bind>
<bind pointcut="execution(public * *->*(..)) AND !execution(* *->create()) AND !execution(* *->start())">
<interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
</bind>
</domain>
<domain name="JACC Service Bean">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
</bind>
<bind pointcut="!execution(* *->create()) AND !execution(* *->start()) AND !execution(*->new(..))">
<interceptor-ref name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.annotation.security.SecurityDomain->*(..))">
<interceptor-ref name="Basic Authorization"/>
</bind>
<bind pointcut="execution(public * @javax.annotation.security.RunAs->*(..))">
<interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
</bind>
<bind pointcut="execution(public * *->*(..)) AND !execution(* *->create()) AND !execution(* *->start())">
<interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
</bind>
</domain>
</aop>
1.1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/microcontainer/jndi.properties.vsl
Index: jndi.properties.vsl
===================================================================
java.naming.factory.initial=org.jnp.interfaces.LocalOnlyContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
1.1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/microcontainer/login-config.xml.vsl
Index: login-config.xml.vsl
===================================================================
<?xml version='1.0'?>
<!DOCTYPE policy PUBLIC
"-//JBoss//DTD JBOSS Security Config 3.0//EN"
"http://www.jboss.org/j2ee/dtd/security_config.dtd">
<!-- The XML based JAAS login configuration read by the
org.jboss.security.auth.login.XMLLoginConfig mbean. Add
an application-policy element for each security domain.
The outline of the application-policy is:
<application-policy name="security-domain-name">
<authentication>
<login-module code="login.module1.class.name" flag="control_flag">
<module-option name = "option1-name">option1-value</module-option>
<module-option name = "option2-name">option2-value</module-option>
...
</login-module>
<login-module code="login.module2.class.name" flag="control_flag">
...
</login-module>
...
</authentication>
</application-policy>
$Revision: 1.1 $
-->
<policy>
<!-- Used by clients within the application server VM such as
mbeans and servlets that access EJBs.
-->
<application-policy name="client-login">
<authentication>
<login-module code="org.jboss.security.ClientLoginModule"
flag="required">
<!-- Any existing security context will be restored on logout -->
<module-option name="restore-login-identity">true</module-option>
</login-module>
</authentication>
</application-policy>
<application-policy name="other">
<!-- A simple server login module, which can be used when the number
of users is relatively small. It uses two properties files:
users.properties, which holds users (key) and their password (value).
roles.properties, which holds users (key) and a comma-separated list of
their roles (value).
The unauthenticatedIdentity property defines the name of the principal
that will be used when a null username and password are presented as is
the case for an unuathenticated web client or MDB. If you want to
allow such users to be authenticated add the property, e.g.,
unauthenticatedIdentity="nobody"
-->
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag="required"/>
</authentication>
</application-policy>
#if ($stringUtils.isNotBlank(${securityRealm}))
<application-policy name="${securityRealm}">
<!-- A simple server login module, which can be used when the number
of users is relatively small. It uses two properties files:
users.properties, which holds users (key) and their password (value).
roles.properties, which holds users (key) and a comma-separated list of
their roles (value).
The unauthenticatedIdentity property defines the name of the principal
that will be used when a null username and password are presented as is
the case for an unuathenticated web client or MDB. If you want to
allow such users to be authenticated add the property, e.g.,
unauthenticatedIdentity="nobody"
-->
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag="required"/>
</authentication>
</application-policy>
#end
</policy>
1.1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/microcontainer/log4j.xml.vsl
Index: log4j.xml.vsl
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!-- ===================================================================== -->
<!-- -->
<!-- Log4j Configuration -->
<!-- -->
<!-- ===================================================================== -->
<!-- $Id: log4j.xml.vsl,v 1.1 2007/02/04 02:45:05 vancek Exp $ -->
<!--
| For more configuration infromation and examples see the Jakarta Log4j
| owebsite: http://jakarta.apache.org/log4j
-->
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="Target" value="System.out"/>
<param name="Threshold" value="WARN"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Messagen -->
<!--
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
-->
<param name="ConversionPattern" value="%-5p %d{dd-MM HH:mm:ss,SSS} (%F:%M:%L) -%m%n"/>
</layout>
</appender>
<root>
<appender-ref ref="CONSOLE"/>
</root>
</log4j:configuration>
1.1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/microcontainer/default.persistence.properties.vsl
Index: default.persistence.properties.vsl
===================================================================
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
#hibernate.connection.release_mode=after_statement
#hibernate.transaction.flush_before_completion=false
#hibernate.transaction.auto_close_session=false
#hibernate.query.factory_class=org.hibernate.hql.ast.ASTQueryTranslatorFactory
#hibernate.hbm2ddl.auto=create-drop
#hibernate.hbm2ddl.auto=create
hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
# Clustered cache with TreeCache
#hibernate.cache.provider_class=org.jboss.ejb3.entity.TreeCacheProviderHook
#hibernate.treecache.mbean.object_name=jboss.cache:service=EJB3EntityTreeCache
#hibernate.dialect=org.hibernate.dialect.HSQLDialect
hibernate.jndi.java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
hibernate.jndi.java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
hibernate.bytecode.use_reflection_optimizer=false
# I don't think this is honored, but EJB3Deployer uses it
hibernate.bytecode.provider=javassist
1.1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/microcontainer/embedded-jboss-beans.xml.vsl
Index: embedded-jboss-beans.xml.vsl
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
xmlns="urn:jboss:bean-deployer:2.0">
<bean name="Naming" class="org.jnp.server.SingletonNamingServer"/>
<bean name="InitialContextProperties" class="java.util.Hashtable">
<constructor>
<parameter class="java.util.Map">
<map keyClass="java.lang.String" valueClass="java.lang.String">
<entry>
<key>java.naming.factory.initial</key>
<value>org.jnp.interfaces.LocalOnlyContextFactory</value>
</entry>
<entry>
<key>java.naming.factory.url.pkgs</key>
<value>org.jboss.naming:org.jnp.interfaces</value>
</entry>
</map>
</parameter>
</constructor>
</bean>
<bean name="java:comp/Initializer" class="org.jboss.ejb3.embedded.JavaCompInitializer">
<property name="jndiProperties"><inject bean="InitialContextProperties"/></property>
</bean>
<bean name="XidFactory" class="org.jboss.tm.XidFactoryImpl"/>
<bean name="XidFactoryMBean" class="org.jboss.ejb3.embedded.XidFactoryMBean">
<constructor>
<parameter class="org.jboss.tm.XidFactoryBase">
<inject bean="XidFactory"/>
</parameter>
</constructor>
</bean>
<bean name="TransactionManagerInitializer" class="org.jboss.tm.TransactionManagerInitializer">
<property name="xidFactory"><inject bean="XidFactory"/></property>
<property name="initialContextProperties"><inject bean="InitialContextProperties"/></property>
</bean>
<bean name="UserTransaction" class="org.jboss.ejb3.embedded.UserTransactionImpl">
<demand>TransactionManagerInitializer</demand>
</bean>
<bean name="UserTransactionBinding" class="org.jboss.ejb3.embedded.JndiBinder">
<property name="jndiProperties"><inject bean="InitialContextProperties"/></property>
<property name="target"><inject bean="UserTransaction"/></property>
<property name="bindTo">UserTransaction</property>
<property name="serializable">false</property>
</bean>
<bean name="TransactionManager" class="java.lang.Object">
<constructor factoryMethod="getTransactionManager">
<factory bean="TransactionManagerInitializer"/>
</constructor>
</bean>
<bean name="CachedConnectionManager" class="org.jboss.resource.connectionmanager.CachedConnectionManagerReference">
<property name="transactionManager"><inject bean="TransactionManager"/></property>
</bean>
<!--
<bean class="org.jboss.jdbc.HypersonicDatabase"
name="jboss:service=Hypersonic,database=localDB">
<property name="database">localDB</property>
<property name="inProcessMode">true</property>
<property name="dbDataDir">.</property>
</bean>
-->
<bean name="DefaultDSBootstrap" class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
<property name="driverClass">org.hsqldb.jdbcDriver</property>
<property name="connectionURL">jdbc:hsqldb:.</property>
<!-- <property name="connectionURL">jdbc:hsqldb:./hypersonic/localDB</property> -->
<property name="userName">sa</property>
<property name="jndiName">java:/DefaultDS</property>
<property name="minSize">0</property>
<property name="maxSize">10</property>
<property name="blockingTimeout">1000</property>
<property name="idleTimeout">100000</property>
<property name="transactionManager"><inject bean="TransactionManager"/></property>
<property name="cachedConnectionManager"><inject bean="CachedConnectionManager"/></property>
<property name="initialContextProperties"><inject bean="InitialContextProperties"/></property>
</bean>
<bean name="DefaultDS" class="java.lang.Object">
<constructor factoryMethod="getDatasource">
<factory bean="DefaultDSBootstrap"/>
</constructor>
</bean>
#if ($stringUtils.isNotBlank(${entityManagerName}))
<bean name="${entityManagerName}DatasourceBootstrap" class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="connectionURL">jdbc:mysql://localhost:3306/${entityManagerName}</property>
<!-- <property name="connectionURL">jdbc:hsqldb:./hypersonic/localDB</property> -->
<property name="userName">sa</property>
<property name="jndiName">java:/jdbc/${entityManagerName}</property>
<property name="minSize">0</property>
<property name="maxSize">10</property>
<property name="blockingTimeout">1000</property>
<property name="idleTimeout">100000</property>
<property name="transactionManager"><inject bean="TransactionManager"/></property>
<property name="cachedConnectionManager"><inject bean="CachedConnectionManager"/></property>
<property name="initialContextProperties"><inject bean="InitialContextProperties"/></property>
</bean>
<bean name="jdbc/${entityManagerName}" class="java.lang.Object">
<constructor factoryMethod="getDatasource">
<factory bean="${entityManagerName}DatasourceBootstrap"/>
</constructor>
</bean>
#end
<!--
<bean name="TimerServiceFactory" class="org.jboss.ejb3.timerservice.quartz.QuartzTimerServiceFactory">
<property name="properties">
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreCMT
org.quartz.jobStore.nonManagedTXDataSource=myDS
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.HSQLDBDelegate
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.dataSource=myDS
# To get it to work with hypersonic
# FIXME: this doesn't lock the row
org.quartz.jobStore.selectWithLockSQL=SELECT * FROM qrtz_locks WHERE lock_name = ?
# from quartz.properties
org.quartz.scheduler.instanceName=JBossEJB3QuartzScheduler
org.quartz.scheduler.rmi.export=false
org.quartz.scheduler.rmi.proxy=false
org.quartz.scheduler.wrapJobExecutionInUserTransaction=false
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=10
org.quartz.threadPool.threadPriority=5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
org.quartz.jobStore.misfireThreshold=60000
</property>
<property name="dataSource">java:/DefaultDS</property>
<property name="sqlProperties">
CREATE_DB_ON_STARTUP = TRUE
CREATE_TABLE_JOB_DETAILS = CREATE TABLE qrtz_job_details(JOB_NAME VARCHAR(80) NOT NULL, JOB_GROUP VARCHAR(80) NOT NULL, \
DESCRIPTION VARCHAR(120) NULL, JOB_CLASS_NAME VARCHAR(128) NOT NULL, IS_DURABLE VARCHAR(1) NOT NULL, \
IS_VOLATILE VARCHAR(1) NOT NULL, IS_STATEFUL VARCHAR(1) NOT NULL, REQUESTS_RECOVERY VARCHAR(1) NOT NULL, \
JOB_DATA BINARY NULL, PRIMARY KEY (JOB_NAME,JOB_GROUP))
CREATE_TABLE_JOB_LISTENERS = CREATE TABLE qrtz_job_listeners(JOB_NAME VARCHAR(80) NOT NULL, JOB_GROUP VARCHAR(80) NOT NULL, \
JOB_LISTENER VARCHAR(80) NOT NULL, PRIMARY KEY (JOB_NAME,JOB_GROUP,JOB_LISTENER), FOREIGN KEY (JOB_NAME,JOB_GROUP) \
REFERENCES QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP))
CREATE_TABLE_TRIGGERS = CREATE TABLE qrtz_triggers(TRIGGER_NAME VARCHAR(80) NOT NULL, TRIGGER_GROUP VARCHAR(80) NOT NULL, \
JOB_NAME VARCHAR(80) NOT NULL, JOB_GROUP VARCHAR(80) NOT NULL, IS_VOLATILE VARCHAR(1) NOT NULL, DESCRIPTION VARCHAR(120) NULL, \
NEXT_FIRE_TIME NUMERIC(13) NULL, PREV_FIRE_TIME NUMERIC(13) NULL, TRIGGER_STATE VARCHAR(16) NOT NULL, \
TRIGGER_TYPE VARCHAR(8) NOT NULL, START_TIME NUMERIC(13) NOT NULL, END_TIME NUMERIC(13) NULL, CALENDAR_NAME VARCHAR(80) NULL, \
MISFIRE_INSTR NUMERIC(2) NULL, JOB_DATA BINARY NULL, PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (JOB_NAME,JOB_GROUP) \
REFERENCES QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP))
CREATE_TABLE_SIMPLE_TRIGGERS = CREATE TABLE qrtz_simple_triggers(TRIGGER_NAME VARCHAR(80) NOT NULL, \
TRIGGER_GROUP VARCHAR(80) NOT NULL, REPEAT_COUNT NUMERIC(7) NOT NULL, REPEAT_INTERVAL NUMERIC(12) NOT NULL, \
TIMES_TRIGGERED NUMERIC(7) NOT NULL, PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) \
REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP))
CREATE_TABLE_CRON_TRIGGERS = CREATE TABLE qrtz_cron_triggers(TRIGGER_NAME VARCHAR(80) NOT NULL, \
TRIGGER_GROUP VARCHAR(80) NOT NULL, CRON_EXPRESSION VARCHAR(80) NOT NULL, TIME_ZONE_ID VARCHAR(80), \
PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) \
REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP))
CREATE_TABLE_BLOB_TRIGGERS = CREATE TABLE qrtz_blob_triggers(TRIGGER_NAME VARCHAR(80) NOT NULL, \
TRIGGER_GROUP VARCHAR(80) NOT NULL, BLOB_DATA BINARY NULL, PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), \
FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP))
CREATE_TABLE_TRIGGER_LISTENERS = CREATE TABLE qrtz_trigger_listeners(TRIGGER_NAME VARCHAR(80) NOT NULL, \
TRIGGER_GROUP VARCHAR(80) NOT NULL, TRIGGER_LISTENER VARCHAR(80) NOT NULL, \
PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_LISTENER), FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) \
REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP))
CREATE_TABLE_CALENDARS = CREATE TABLE qrtz_calendars(CALENDAR_NAME VARCHAR(80) NOT NULL, CALENDAR BINARY NOT NULL, \
PRIMARY KEY (CALENDAR_NAME))
CREATE_TABLE_PAUSED_TRIGGER_GRPS = CREATE TABLE qrtz_paused_trigger_grps(TRIGGER_GROUP VARCHAR(80) NOT NULL, \
PRIMARY KEY (TRIGGER_GROUP))
CREATE_TABLE_FIRED_TRIGGERS = CREATE TABLE qrtz_fired_triggers(ENTRY_ID VARCHAR(95) NOT NULL, TRIGGER_NAME VARCHAR(80) NOT NULL, \
TRIGGER_GROUP VARCHAR(80) NOT NULL, IS_VOLATILE VARCHAR(1) NOT NULL, INSTANCE_NAME VARCHAR(80) NOT NULL, \
FIRED_TIME NUMERIC(13) NOT NULL, STATE VARCHAR(16) NOT NULL, JOB_NAME VARCHAR(80) NULL, JOB_GROUP VARCHAR(80) NULL, \
IS_STATEFUL VARCHAR(1) NULL, REQUESTS_RECOVERY VARCHAR(1) NULL, PRIMARY KEY (ENTRY_ID))
CREATE_TABLE_SCHEDULER_STATE = CREATE TABLE qrtz_scheduler_state(INSTANCE_NAME VARCHAR(80) NOT NULL, \
LAST_CHECKIN_TIME NUMERIC(13) NOT NULL, CHECKIN_INTERVAL NUMERIC(13) NOT NULL, RECOVERER VARCHAR(80) NULL, \
PRIMARY KEY (INSTANCE_NAME))
CREATE_TABLE_LOCKS = CREATE TABLE qrtz_locks(LOCK_NAME VARCHAR(40) NOT NULL, PRIMARY KEY (LOCK_NAME))
INSERT_TRIGGER_ACCESS = INSERT INTO qrtz_locks values('TRIGGER_ACCESS')
INSERT_JOB_ACCESS = INSERT INTO qrtz_locks values('JOB_ACCESS')
INSERT_CALENDAR_ACCESS = INSERT INTO qrtz_locks values('CALENDAR_ACCESS')
INSERT_STATE_ACCESS = INSERT INTO qrtz_locks values('STATE_ACCESS')
INSERT_MISFIRE_ACCESS = INSERT INTO qrtz_locks values('MISFIRE_ACCESS')
</property>
</bean>
-->
</deployment>
1.1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/microcontainer/users.properties.vsl
Index: users.properties.vsl
===================================================================
admin=admin
user=password
1.1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/microcontainer/security-beans.xml.vsl
Index: security-beans.xml.vsl
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
xmlns="urn:jboss:bean-deployer:2.0">
<bean class="org.jboss.ejb3.embedded.JaasSecurityManagerService"
name="jboss.security:service=JaasSecurityManager">
<property name="initialContextProperties">
<inject bean="InitialContextProperties"/>
</property>
</bean>
</deployment>
1.1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/microcontainer/jboss-jms-beans.xml.vsl
Index: jboss-jms-beans.xml.vsl
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
xmlns="urn:jboss:bean-deployer">
<bean name="jboss.mq:service=JMSProviderLoader,name=JMSProvider" class="org.jboss.jms.jndi.JNDIProviderAdapter">
<property name="factoryRef">java:/XAConnectionFactory</property>
<property name="queueFactoryRef">java:/XAConnectionFactory</property>
<property name="topicFactoryRef">java:/XAConnectionFactory</property>
<property name="properties" class="java.util.Properties">
<map keyClass="java.lang.String" valueClass="java.lang.String">
<entry>
<key>java.naming.factory.initial</key>
<value>org.jnp.interfaces.LocalOnlyContextFactory</value>
</entry>
<entry>
<key>java.naming.factory.url.pkgs</key>
<value>org.jboss.naming:org.jnp.interfaces</value>
</entry>
</map>
</property>
</bean>
<bean name="b1" class="org.jboss.ejb3.embedded.JndiBinder">
<property name="jndiProperties"><inject bean="InitialContextProperties"/></property>
<property name="target"><inject bean="jboss.mq:service=JMSProviderLoader,name=JMSProvider"/></property>
<property name="bindTo">java:/DefaultJMSProvider</property>
<property name="serializable">true</property>
</bean>
<bean name="jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool" class="org.jboss.jms.asf.StdServerSessionPoolFactory">
<property name="name">StdJMSPool</property>
<property name="xidFactory"><inject bean="XidFactoryMBean"/></property>
<property name="transactionManager"><inject bean="TransactionManager"/></property>
</bean>
<bean name="b2" class="org.jboss.ejb3.embedded.JndiBinder">
<property name="jndiProperties"><inject bean="InitialContextProperties"/></property>
<property name="target"><inject bean="jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool"/></property>
<property name="bindTo">java:/StdJMSPool</property>
<property name="serializable">false</property>
</bean>
<bean name="jboss.mq:service=PersistenceManager" class="org.jboss.mq.kernel.JDBC2PersistenceManager">
<property name="transactionManager">
<inject bean="TransactionManager"/>
</property>
<property name="datasource">
<inject bean="DefaultDS"/>
</property>
<property name="sqlProperties">
BLOB_TYPE=OBJECT_BLOB
INSERT_TX = INSERT INTO JMS_TRANSACTIONS (TXID) values(?)
INSERT_MESSAGE = INSERT INTO JMS_MESSAGES (MESSAGEID, DESTINATION, MESSAGEBLOB, TXID, TXOP) VALUES(?,?,?,?,?)
SELECT_ALL_UNCOMMITED_TXS = SELECT TXID FROM JMS_TRANSACTIONS
SELECT_MAX_TX = SELECT MAX(TXID) FROM JMS_MESSAGES
SELECT_MESSAGES_IN_DEST = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGES WHERE DESTINATION=?
SELECT_MESSAGE = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGES WHERE MESSAGEID=? AND DESTINATION=?
MARK_MESSAGE = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE MESSAGEID=? AND DESTINATION=?
UPDATE_MESSAGE = UPDATE JMS_MESSAGES SET MESSAGEBLOB=? WHERE MESSAGEID=? AND DESTINATION=?
UPDATE_MARKED_MESSAGES = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=?
UPDATE_MARKED_MESSAGES_WITH_TX = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=? AND TXID=?
DELETE_MARKED_MESSAGES_WITH_TX = DELETE FROM JMS_MESSAGES WHERE TXOP=? AND JMS_MESSAGES.TXID IN (SELECT TXID FROM JMS_TRANSACTIONS)
DELETE_TX = DELETE FROM JMS_TRANSACTIONS WHERE TXID = ?
DELETE_MARKED_MESSAGES = DELETE FROM JMS_MESSAGES WHERE TXID=? AND TXOP=?
DELETE_MESSAGE = DELETE FROM JMS_MESSAGES WHERE MESSAGEID=? AND DESTINATION=?
CREATE_MESSAGE_TABLE = CREATE CACHED TABLE JMS_MESSAGES ( MESSAGEID INTEGER NOT NULL, \
DESTINATION VARCHAR(255) NOT NULL, TXID INTEGER, TXOP CHAR(1), \
MESSAGEBLOB OBJECT, PRIMARY KEY (MESSAGEID, DESTINATION) )
CREATE_IDX_MESSAGE_TXOP_TXID = CREATE INDEX JMS_MESSAGES_TXOP_TXID ON JMS_MESSAGES (TXOP, TXID)
CREATE_IDX_MESSAGE_DESTINATION = CREATE INDEX JMS_MESSAGES_DESTINATION ON JMS_MESSAGES (DESTINATION)
CREATE_TX_TABLE = CREATE CACHED TABLE JMS_TRANSACTIONS ( TXID INTEGER, PRIMARY KEY (TXID) )
CREATE_TABLES_ON_STARTUP = TRUE
DELETE_TEMPORARY_MESSAGES = DELETE FROM JMS_MESSAGES WHERE TXOP='T'
</property>
</bean>
<bean name="jboss.mq:service=MessageCache" class="org.jboss.mq.kernel.MessageCache">
<property name="persistenceManager"><inject bean="jboss.mq:service=PersistenceManager"/></property>
<property name="highMemoryMark">50</property>
<property name="maxMemoryMark">60</property>
</bean>
<bean name="jms-rar-WorkManager" class="org.jboss.ejb3.embedded.resource.JBossWorkManager">
</bean>
<bean name="jms-rar-DeploymentInfo" class="org.jboss.ejb3.embedded.resource.Ejb3DeploymentInfo">
<constructor>
<parameter class="java.lang.String">jms-ra.rar</parameter>
<parameter class="java.lang.String">javax.jms.MessageListener</parameter>
<parameter class="java.lang.String">org.jboss.resource.adapter.jms.inflow.JmsActivationSpec</parameter>
</constructor>
</bean>
<bean name="jboss.jca:name='jms-ra.rar',service=RARDeployment" class="org.jboss.ejb3.embedded.resource.RARDeployment">
<constructor>
<parameter class="org.jboss.deployment.DeploymentInfo">
<inject bean="jms-rar-DeploymentInfo"/>
</parameter>
</constructor>
<property name="workManager"><inject bean="jms-rar-WorkManager"/></property>
</bean>
<bean name="jboss.mq:service=StateManager" class="org.jboss.mq.kernel.JDBCStateManager">
<property name="transactionManager">
<inject bean="TransactionManager"/>
</property>
<property name="datasource">
<inject bean="DefaultDS"/>
</property>
<property name="sqlProperties">
CREATE_TABLES_ON_STARTUP = TRUE
CREATE_USER_TABLE = CREATE TABLE JMS_USERS (USERID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, \
CLIENTID VARCHAR(128), PRIMARY KEY(USERID))
CREATE_ROLE_TABLE = CREATE TABLE JMS_ROLES (ROLEID VARCHAR(32) NOT NULL, USERID VARCHAR(32) NOT NULL, \
PRIMARY KEY(USERID, ROLEID))
CREATE_SUBSCRIPTION_TABLE = CREATE TABLE JMS_SUBSCRIPTIONS (CLIENTID VARCHAR(128) NOT NULL, \
SUBNAME VARCHAR(128) NOT NULL, TOPIC VARCHAR(255) NOT NULL, \
SELECTOR VARCHAR(255), PRIMARY KEY(CLIENTID, SUBNAME))
GET_SUBSCRIPTION = SELECT TOPIC, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=?
LOCK_SUBSCRIPTION = SELECT TOPIC, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=?
GET_SUBSCRIPTIONS_FOR_TOPIC = SELECT CLIENTID, SUBNAME, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE TOPIC=?
INSERT_SUBSCRIPTION = INSERT INTO JMS_SUBSCRIPTIONS (CLIENTID, SUBNAME, TOPIC, SELECTOR) VALUES(?,?,?,?)
UPDATE_SUBSCRIPTION = UPDATE JMS_SUBSCRIPTIONS SET TOPIC=?, SELECTOR=? WHERE CLIENTID=? AND SUBNAME=?
REMOVE_SUBSCRIPTION = DELETE FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=?
GET_USER_BY_CLIENTID = SELECT USERID, PASSWD, CLIENTID FROM JMS_USERS WHERE CLIENTID=?
GET_USER = SELECT PASSWD, CLIENTID FROM JMS_USERS WHERE USERID=?
POPULATE.TABLES.01 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('guest', 'guest')
POPULATE.TABLES.02 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('j2ee', 'j2ee')
POPULATE.TABLES.03 = INSERT INTO JMS_USERS (USERID, PASSWD, CLIENTID) VALUES ('john', 'needle', 'DurableSubscriberExample')
POPULATE.TABLES.04 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('nobody', 'nobody')
POPULATE.TABLES.05 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('dynsub', 'dynsub')
POPULATE.TABLES.06 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('guest','guest')
POPULATE.TABLES.07 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('j2ee','guest')
POPULATE.TABLES.08 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('john','guest')
POPULATE.TABLES.09 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('subscriber','john')
POPULATE.TABLES.10 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('publisher','john')
POPULATE.TABLES.11 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('publisher','dynsub')
POPULATE.TABLES.12 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('durpublisher','john')
POPULATE.TABLES.13 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('durpublisher','dynsub')
POPULATE.TABLES.14 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('noacc','nobody')
</property>
</bean>
<bean name="BasicQueueParameters" class="org.jboss.mq.server.BasicQueueParameters"/>
<bean name="jboss.mq:service=ThreadPool" class="org.jboss.util.threadpool.BasicThreadPool">
<property name="name">JMSThread</property>
<property name="threadGroupName">JBossMQ Server Threads</property>
<!-- The max number of threads in the pool -->
<property name="maximumPoolSize">10</property>
<!-- The max number of tasks before the queue is full -->
<property name="maximumQueueSize">1000</property>
<!-- The behavior of the pool when a task is added and the queue is full.
abort - a RuntimeException is thrown
run - the calling thread executes the task
wait - the calling thread blocks until the queue has room
discard - the task is silently discarded without being run
discardOldest - check to see if a task is about to complete and enque
the new task if possible, else run the task in the calling thread
-->
<property name="blockingModeString">run</property>
</bean>
<bean name="jboss.mq:service=DestinationManager" class="org.jboss.mq.server.JMSDestinationManager">
<constructor>
<parameter class="org.jboss.mq.server.BasicQueueParameters">
<inject bean="BasicQueueParameters"/>
</parameter>
</constructor>
<property name="persistenceManager"><inject bean="jboss.mq:service=PersistenceManager"/></property>
<property name="messageCache"><inject bean="jboss.mq:service=MessageCache"/></property>
<property name="stateManager"><inject bean="jboss.mq:service=StateManager"/></property>
<property name="threadPool"><inject bean="jboss.mq:service=ThreadPool"/></property>
<property name="threadGroup"><inject bean="jboss.mq:service=ThreadPool" property="threadGroup"/></property>
<start method="startServer"/>
<stop method="stopServer"/>
</bean>
<bean name="jboss.mq.destination:service=Queue,name=DLQ" class="org.jboss.mq.kernel.Queue">
<property name="destinationManagerPojo"><inject bean="jboss.mq:service=DestinationManager"/></property>
<property name="initialContextProperties"><inject bean="InitialContextProperties"/></property>
<property name="destinationName">DLQ</property>
</bean>
<bean name="jboss.mq:service=Invoker" class="org.jboss.mq.server.JMSServerInvoker">
<property name="next"><inject bean="jboss.mq:service=DestinationManager"/></property>
</bean>
<bean name="jboss.mq:service=invocationlayer,type=JVM" class="org.jboss.mq.kernel.JVMIL">
<property name="jmsInvoker"><inject bean="jboss.mq:service=Invoker"/></property>
<property name="connectionFactoryJNDIRef">java:/ConnectionFactory</property>
<property name="XAConnectionFactoryJNDIRef">java:/XAConnectionFactory</property>
<property name="pingPeriod">0</property>
<property name="initialContextProperties"><inject bean="InitialContextProperties"/></property>
</bean>
</deployment>
1.1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/microcontainer/roles.properties.vsl
Index: roles.properties.vsl
===================================================================
admin=USER,ADMIN
user=USER
1.17 +25 -0 cartridges/andromda-ejb3/src/main/java/org/andromda/cartridges/ejb3/metafacades/EJB3SessionOperationFacadeLogicImpl.java
Index: EJB3SessionOperationFacadeLogicImpl.java
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/main/java/org/andromda/cartridges/ejb3/metafacades/EJB3SessionOperationFacadeLogicImpl.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -w -r1.16 -r1.17
--- EJB3SessionOperationFacadeLogicImpl.java 17 Jan 2007 00:50:55 -0000 1.16
+++ EJB3SessionOperationFacadeLogicImpl.java 4 Feb 2007 02:45:06 -0000 1.17
@@ -28,6 +28,10 @@
public class EJB3SessionOperationFacadeLogicImpl
extends EJB3SessionOperationFacadeLogic
{
+ /**
+ * The property which stores the pattern used to generate the service operation test name
+ */
+ private static final String SERVICE_OPERATION_TEST_NAME_PATTERN = "serviceOperationTestNamePattern";
public EJB3SessionOperationFacadeLogicImpl (Object metaObject, String context)
{
@@ -212,6 +216,27 @@
}
/**
+ * @see org.andromda.cartridges.ejb3.metafacades.EJB3SessionOperationFacadeLogic#handleGetTestSignature()
+ */
+ protected String handleGetTestSignature()
+ {
+ return this.getTestName() + "()";
+ }
+
+ /**
+ * @see org.andromda.cartridges.ejb3.metafacades.EJB3SessionOperationFacadeLogic#handleGetTestName()
+ */
+ protected String handleGetTestName()
+ {
+ String serviceOperationTestNamePattern =
+ (String)this.getConfiguredProperty(SERVICE_OPERATION_TEST_NAME_PATTERN);
+
+ return MessageFormat.format(
+ serviceOperationTestNamePattern,
+ new Object[] {StringUtils.trimToEmpty(StringUtils.capitalize(this.getName()))});
+ }
+
+ /**
* @see org.andromda.cartridges.ejb3.metafacades.EJB3SessionOperationFacadeLogic#getCall()
*
* Override the default implmentation to check for timer service and
1.20 +45 -0 cartridges/andromda-ejb3/src/main/java/org/andromda/cartridges/ejb3/metafacades/EJB3SessionFacadeLogicImpl.java
Index: EJB3SessionFacadeLogicImpl.java
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/main/java/org/andromda/cartridges/ejb3/metafacades/EJB3SessionFacadeLogicImpl.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -w -r1.19 ...
[truncated message content] |
|
From: Vance K. <va...@us...> - 2007-02-04 02:44:33
|
User: vancek Date: 07/02/03 18:44:34 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/test - New directory |
|
From: Vance K. <va...@us...> - 2007-02-04 02:44:33
|
User: vancek Date: 07/02/03 18:44:32 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/microcontainer - New directory |
|
From: Vance K. <va...@us...> - 2007-02-04 02:39:15
|
User: vancek
Date: 07/02/03 18:39:07
Modified: andromda-ejb3/src/main/resources/templates/ejb3
SessionBeanBase.vsl
Log:
remove second import of the Globals.vm
Revision Changes Path
1.11 +0 -1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/SessionBeanBase.vsl
Index: SessionBeanBase.vsl
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/main/resources/templates/ejb3/SessionBeanBase.vsl,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -w -r1.10 -r1.11
--- SessionBeanBase.vsl 23 Jan 2007 01:22:44 -0000 1.10
+++ SessionBeanBase.vsl 4 Feb 2007 02:39:07 -0000 1.11
@@ -4,7 +4,6 @@
// Attention: Generated code! Do not modify by hand!
// Generated by: SessionBeanBase.vsl in andromda-ejb3-cartridge.
//
-#parse("templates/ejb3/Globals.vm")
#if ($stringUtils.isNotBlank($service.packageName))
package $service.packageName;
#end
|
|
From: Vance K. <va...@us...> - 2007-02-04 02:37:59
|
User: vancek
Date: 07/02/03 18:38:00
Modified: andromda-ejb3/src/main/resources/templates/ejb3
ServiceLocator.vsl
Added: andromda-ejb3/src/main/resources/templates/ejb3/common
JNDIMacros.vm
Log:
extract jndi lookup into reusable macro
Revision Changes Path
1.1 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/common/JNDIMacros.vm
Index: JNDIMacros.vm
===================================================================
##
## This macro will render the jndiName template parameter
## for the remote interface. This takes into account if
## the jndi name is explicity specified.
##
#macro (remoteJndiName $service $includePrefix)
#**##if ($stringUtils.isNotBlank($service.jndiNameRemote))
#* *##set ($jndiName = "${service.jndiNameRemote}")
#**##else
#* *##if ($stringUtils.isNotBlank($service.jndiNamePrefix) && $includePrefix)
#* *##set ($jndiName = "${service.jndiNamePrefix}/${service.serviceName}/remote")
#* *##else
#* *##set ($jndiName = "${service.serviceName}/remote")
#* *##end
#**##end
#end
##
## This macro will render the jndiName template parameter
## for the local interface. This takes into account if
## the jndi name is explicity specified.
##
#macro (localJndiName $service $includePrefix)
#**##if ($stringUtils.isNotBlank($service.jndiNameLocal))
#* *##set ($jndiName = "${service.jndiNameLocal}")
#**##else
#* *##if ($stringUtils.isNotBlank($service.jndiNamePrefix) && $includePrefix)
#* *##set ($jndiName = "${service.jndiNamePrefix}/${service.serviceName}/local")
#* *##else
#* *##set ($jndiName = "${service.serviceName}/local")
#* *##end
#**##end
#end
1.9 +3 -18 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/ServiceLocator.vsl
Index: ServiceLocator.vsl
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/main/resources/templates/ejb3/ServiceLocator.vsl,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -w -r1.8 -r1.9
--- ServiceLocator.vsl 14 Jun 2006 04:46:35 -0000 1.8
+++ ServiceLocator.vsl 4 Feb 2007 02:38:00 -0000 1.9
@@ -1,3 +1,4 @@
+#parse("templates/ejb3/common/JNDIMacros.vm")
// license-header java merge-point
//
// Attention: Generated code! Do not modify by hand!
@@ -111,15 +112,7 @@
public final $service.fullyQualifiedServiceRemoteInterfaceName get_${transform.toUnderscoreName(${service.fullyQualifiedServiceName})}_Remote(java.util.Properties env)
throws javax.naming.NamingException
{
-#* *##if ($stringUtils.isNotBlank($service.jndiNameRemote))
-#* *##set ($jndiName = "${service.jndiNameRemote}")
-#* *##else
-#* *##if ($stringUtils.isNotBlank($service.jndiNamePrefix))
-#* *##set ($jndiName = "${service.jndiNamePrefix}/${service.serviceName}/remote")
-#* *##else
-#* *##set ($jndiName = "${service.serviceName}/remote")
-#* *##end
-#* *##end
+#remoteJndiName($service true)
return (${service.fullyQualifiedServiceRemoteInterfaceName})
getContext(env).lookup("${jndiName}");
}
@@ -135,15 +128,7 @@
public final $service.fullyQualifiedServiceLocalInterfaceName get_${transform.toUnderscoreName(${service.fullyQualifiedServiceName})}_Local(java.util.Properties env)
throws javax.naming.NamingException
{
-#* *##if ($stringUtils.isNotBlank($service.jndiNameLocal))
-#* *##set ($jndiName = "${service.jndiNameLocal}")
-#* *##else
-#* *##if ($stringUtils.isNotBlank($service.jndiNamePrefix))
-#* *##set ($jndiName = "${service.jndiNamePrefix}/${service.serviceName}/local")
-#* *##else
-#* *##set ($jndiName = "${service.serviceName}/local")
-#* *##end
-#* *##end
+#localJndiName($service true)
return (${service.fullyQualifiedServiceLocalInterfaceName})
getContext(env).lookup("${jndiName}");
}
|
|
From: Vance K. <va...@us...> - 2007-02-04 02:37:55
|
User: vancek Date: 07/02/03 18:37:55 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/common - New directory |
|
From: Leif J. <le...@us...> - 2007-02-01 19:47:00
|
User: leifj
Date: 07/02/01 11:46:51
Modified: andromda-jsf2/src/main/resources/templates/jsf2/configuration
faces-config.xml.vsl
Log:
of course its the titleValue
Revision Changes Path
1.5 +1 -1 cartridges/andromda-jsf2/src/main/resources/templates/jsf2/configuration/faces-config.xml.vsl
Index: faces-config.xml.vsl
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-jsf2/src/main/resources/templates/jsf2/configuration/faces-config.xml.vsl,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -w -r1.4 -r1.5
--- faces-config.xml.vsl 18 Jan 2007 12:37:13 -0000 1.4
+++ faces-config.xml.vsl 1 Feb 2007 19:46:51 -0000 1.5
@@ -69,7 +69,7 @@
<managed-bean-scope>application</managed-bean-scope>
<managed-property>
<property-name>label</property-name>
- <value>$useCase.titleKey</value>
+ <value>$useCase.titleValue</value>
</managed-property>
<managed-property>
<property-name>viewId</property-name>
|
|
From: Vance K. <va...@us...> - 2007-02-01 14:32:15
|
User: vancek
Date: 07/02/01 06:32:10
Modified: andromda-ejb3/src/site changes.xml
andromda-ejb3/src/main/java/org/andromda/cartridges/ejb3/metafacades
EJB3MetafacadeUtils.java
Log:
incorrect method attribute name causing invalid transaction type annotation for type NotSupported
Revision Changes Path
1.5 +3 -0 cartridges/andromda-ejb3/src/site/changes.xml
Index: changes.xml
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/site/changes.xml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -w -r1.4 -r1.5
--- changes.xml 24 Jan 2007 04:37:55 -0000 1.4
+++ changes.xml 1 Feb 2007 14:32:10 -0000 1.5
@@ -354,6 +354,9 @@
<action dev="vancek" type="fix">
Fix DAO injection into DAO base when entity references another entity.
</action>
+ <action dev="vancek" due-to="rajtuz" type="fix">
+ Fix incorrect method name in EJB3MetafacadeUtils.convertTransactionType() for transaction type NotSupported.
+ </action>
</release>
</body>
</document>
\ No newline at end of file
1.9 +1 -1 cartridges/andromda-ejb3/src/main/java/org/andromda/cartridges/ejb3/metafacades/EJB3MetafacadeUtils.java
Index: EJB3MetafacadeUtils.java
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/main/java/org/andromda/cartridges/ejb3/metafacades/EJB3MetafacadeUtils.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -w -r1.8 -r1.9
--- EJB3MetafacadeUtils.java 17 Jan 2007 00:50:55 -0000 1.8
+++ EJB3MetafacadeUtils.java 1 Feb 2007 14:32:10 -0000 1.9
@@ -250,7 +250,7 @@
}
else if (StringUtils.equalsIgnoreCase(transType, EJB3Globals.TRANSACTION_TYPE_NOT_SUPPORTED))
{
- transType = "NOT_SUPPORTED";
+ type = "NOT_SUPPORTED";
}
else if (StringUtils.equalsIgnoreCase(transType, EJB3Globals.TRANSACTION_TYPE_REQUIRED))
{
|
|
From: Vance K. <va...@us...> - 2007-01-24 08:56:40
|
User: vancek
Date: 07/01/24 00:56:41
Modified: andromda-ejb3/src/site/axdoc samples.xml
Log:
add timetracker-ejb3 sample docs
Revision Changes Path
1.3 +34 -0 cartridges/andromda-ejb3/src/site/axdoc/samples.xml
Index: samples.xml
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/site/axdoc/samples.xml,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -w -r1.2 -r1.3
--- samples.xml 19 Jan 2007 13:16:57 -0000 1.2
+++ samples.xml 24 Jan 2007 08:56:40 -0000 1.3
@@ -14,6 +14,7 @@
<ul>
<li><a href="samples.html#Samples_Demo_EJB3">Demo EJB3</a></li>
<li><a href="samples.html#Seam_Booking">Seam Booking Example</a></li>
+ <li><a href="samples.html#Timetracker_EJB3">Timetracker EJB3</a></li>
</ul>
</p>
<a name="Samples_Demo_EJB3"/>
@@ -80,6 +81,39 @@
JSF with Facelets view components.
</p>
</subsection>
+ <a name="Timetracker_EJB3"/>
+ <subsection name="Timetracker EJB3 JSF Example">
+ <p>
+ This sample application is located in the <code>samples/timetracker-ejb</code> directory of the
+ <code>andromda-plugins</code> project on SourceForge.net.
+ </p>
+ <p>
+ The project has the same structure as described in
+ <a href="http://galaxy.andromda.org/docs/samples.html">AndroMDA Samples</a>.
+ </p>
+ <p>
+ This sample application is a re-make of the
+ <a href="http://galaxy.andromda.org/index.php?option=com_content&task=category&sectionid=11&id=42&Itemid=89">
+ AndroMDA Timetracker sample application</a> but
+ instead uses the EJB3 and the JSF cartridges.
+ </p>
+ <p>
+ Simply build the demo by executing <code>mvn</code> in the root of the project directory.
+ </p>
+ <p>
+ Once you have build the sample, you need to create the database called <code>timetracker</code>.
+ You can then deploy the following to JBoss.
+ <ul>
+ <li>timetracker-ejb3/app/target/timetracker-ejb3-ds.xml</li>
+ <li>timetracker-ejb3/app/target/timetracker-ejb3-1.0-SNAPSHOT.ear</li>
+ </ul>
+ </p>
+ <p>
+ Once you have deployed the EAR file, you can use the <code>sql.txt</code> MySQL script
+ to import the data into your database. This file is located in the root directory of this
+ project.
+ </p>
+ </subsection>
</section>
</body>
</document>
|
|
From: Vance K. <va...@us...> - 2007-01-24 08:56:21
|
User: vancek
Date: 07/01/24 00:56:20
Modified: andromda-ejb3/src/main/resources/META-INF/andromda
namespace.xml
andromda-ejb3/src/site/axdoc howto6.xml
Log:
added criteria query docs
Revision Changes Path
1.33 +2 -0 cartridges/andromda-ejb3/src/main/resources/META-INF/andromda/namespace.xml
Index: namespace.xml
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/main/resources/META-INF/andromda/namespace.xml,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -w -r1.32 -r1.33
--- namespace.xml 21 Jan 2007 04:17:40 -0000 1.32
+++ namespace.xml 24 Jan 2007 08:56:20 -0000 1.33
@@ -988,6 +988,8 @@
this must be set to <b>hibernate</b> such that
the hibernate validator annotations are
rendered.
+ To enable Hiberate Criteria Query, this must
+ be set to <b>hibernate</b>.
Possible values are:
<ul>
<li>none</li>
1.3 +114 -1 cartridges/andromda-ejb3/src/site/axdoc/howto6.xml
Index: howto6.xml
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/site/axdoc/howto6.xml,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -w -r1.2 -r1.3
--- howto6.xml 19 Jan 2007 14:35:42 -0000 1.2
+++ howto6.xml 24 Jan 2007 08:56:20 -0000 1.3
@@ -107,6 +107,119 @@
set the named query, but OCL is still the preferred solution.
</p>
</section>
+ <section name="Criteria Queries">
+ <p>
+ In some circumstance it is convenient to have the option of using Hibnerate criteria
+ queries. This is particularly usesful for search queries which are really on-the-fly
+ queries. If you are using <b>JBoss AS</b>, then most likely you are using Hibernate as
+ the persistence engine (unless you have changed this default behaviour). Criteria queries
+ are a Hibernate feature, so this is a strict requirement.
+ </p>
+ <p>
+ Before you can use criteria queries with the EJB3 cartridge, you must enable the
+ <code>persistenceProviderExtensions</code> namespace property in the <code>ejb3</code>
+ namespace section of your <i>andromda.xml</i> application descriptor, like so:
+<source language="xml"><![CDATA[
+ <namespace name="ejb3">
+ <properties>
+ ...
+ <property name="persistenceProviderExtensions">hibernate</property>
+ ...
+ </properties>
+ </namespace>
+]]></source>
+ </p>
+ <p>
+ You should also add the <i>hibernate</i> artifact dependency to your root project pom.xml as:
+<source language="xml"><![CDATA[
+ <dependencyManagement>
+ <dependencies>
+ ...
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate</artifactId>
+ <version>3.2.1.ga</version>
+ <scope>provided</scope>
+ </dependency>
+ ...
+ <dependencies>
+ <dependencyManagement>
+]]></source>
+ </p>
+ <p>
+ Then in the <code>core</code> sub-project, add the above dependency to avoid
+ build errors when the <code>org.hibernate.Session</code> object is injected in the
+ DAO base class.
+ </p>
+ <p>
+ By setting the <code>persistenceProviderExtensions</code> property value to <code>hibernate</code>,
+ you are telling the EJB3 cartridge to use <i>Hibernate</i> add-on features and annotations.
+ Specifically, this will inject the <code>org.hibernate.Session</code> into the auto-generated
+ DAO base classes of your project like so:
+<source language="java"><![CDATA[
+ @javax.persistence.PersistenceContext(unitName = "timetracker")
+ protected org.hibernate.Session hibernateSession;
+]]></source>
+ </p>
+ <p>
+ You can then model a <i>Classifier</i> scoped operation in your Entity such that you can
+ over-write the implementation in the DAOImpl (DAP implementation) and use the session object to
+ create the criteria and perform the query.
+ </p>
+ <p>
+ To further understand this usage, you can take are look at the timetracker-ejb3
+ <a href="samples.html#Timetracker_EJB3">Timetracker EJB3 - JSF sample</a>. The following
+ segment of code is taken from this sample project showing you how similar it can be to the
+ standard usage under the Hibernate/Spring cartridges; only difference being that the
+ hibernate session is already injected into the DAO base class for you.
+<source language="java"><![CDATA[
+ protected java.util.List handleFindByCriteria(org.andromda.timetracker.vo.TimecardSearchCriteriaVO criteria)
+ {
+ // Create the timecard criteria
+ Criteria timecardCriteria = hibernateSession.createCriteria(Timecard.class);
+ timecardCriteria.setFetchMode("submitter", FetchMode.JOIN);
+ timecardCriteria.setFetchMode("approver", FetchMode.JOIN);
+
+ // Add sumitter criteria
+ if (criteria.getSubmitterId() != null)
+ {
+ timecardCriteria.createCriteria("submitter").add(Restrictions.idEq(criteria.getSubmitterId()));
+ }
+
+ // Add approver criteria
+ if (criteria.getApproverId() != null)
+ {
+ timecardCriteria.createCriteria("approver").add(Restrictions.idEq(criteria.getApproverId()));
+ }
+
+ // Add status criteria
+ if (criteria.getStatus() != null)
+ {
+ timecardCriteria.add(Restrictions.eq("status", criteria.getStatus()));
+ }
+
+ // Add startDateMin criteria
+ if (criteria.getStartDateMin() != null)
+ {
+ timecardCriteria.add(Restrictions.ge("startDate", criteria.getStartDateMin()));
+ }
+
+ // Add startDateMax criteria
+ if (criteria.getStartDateMax() != null)
+ {
+ timecardCriteria.add(Restrictions.le("startDate", criteria.getStartDateMax()));
+ }
+
+ List timecards = timecardCriteria.list();
+ if (logger.isDebugEnabled())
+ {
+ logger.debug(timecards.size() + " timecards found");
+ }
+ return timecards;
+ }
+]]></source>
+ </p>
+ </section>
<section name="Nice to know">
<subsection name="A few supported query features">
<p>
|
|
From: Vance K. <va...@us...> - 2007-01-24 06:53:07
|
User: vancek
Date: 07/01/23 22:53:08
Modified: samples/timetracker-ejb3/app/src/main/application/META-INF
timetracker-login-config.xml
samples/timetracker-ejb3/mda/src/main/uml timetracker.xmi
Added: samples/timetracker-ejb3 sql.txt
Log:
update schema User-UserRoles
Revision Changes Path
1.2 +2 -3 plugins/samples/timetracker-ejb3/app/src/main/application/META-INF/timetracker-login-config.xml
Index: timetracker-login-config.xml
===================================================================
RCS file: /cvsroot/andromdaplugins/plugins/samples/timetracker-ejb3/app/src/main/application/META-INF/timetracker-login-config.xml,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -r1.1 -r1.2
--- timetracker-login-config.xml 24 Jan 2007 04:33:38 -0000 1.1
+++ timetracker-login-config.xml 24 Jan 2007 06:53:07 -0000 1.2
@@ -14,12 +14,11 @@
select u.password as 'Password' from users u where binary u.username =?
</module-option>
<module-option name="rolesQuery">
- select distinct r.role as 'Roles', 'Roles' as 'RoleGroups' from users u left join users_user_role as ur on u.id = ur.users_id left join user_role as r on r.id = ur.roles_id where binary u.username =?
+ select distinct ur.role as 'Roles', 'Roles' as 'RoleGroups' from users u left join user_role as ur on u.id = ur.user where binary u.username =?
</module-option>
- <!-- uncomment to enable MD5 and BASE64 hash encoding
+ <!-- uncomment to enable MD5 and BASE64 hash encoding -->
<module-option name="hashAlgorithm">MD5</module-option>
<module-option name="hashEncoding">BASE64</module-option>
- -->
</login-module>
</authentication>
</application-policy>
1.2 +6 -6 plugins/samples/timetracker-ejb3/mda/src/main/uml/timetracker.xmi
Index: timetracker.xmi
===================================================================
RCS file: /cvsroot/andromdaplugins/plugins/samples/timetracker-ejb3/mda/src/main/uml/timetracker.xmi,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -r1.1 -r1.2
--- timetracker.xmi 24 Jan 2007 04:33:36 -0000 1.1
+++ timetracker.xmi 24 Jan 2007 06:53:07 -0000 1.2
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- <!DOCTYPE XMI SYSTEM "uml14xmi12.dtd"> -->
-<XMI xmi.version='1.2' timestamp='Wed Jan 24 13:07:05 GMT+08:00 2007' xmlns:UML='omg.org/UML/1.4'>
+<XMI xmi.version='1.2' timestamp='Wed Jan 24 15:14:57 GMT+08:00 2007' xmlns:UML='omg.org/UML/1.4'>
<XMI.header>
<XMI.documentation>
<XMI.exporter>MagicDraw UML</XMI.exporter>
@@ -778,7 +778,7 @@
</UML:Class>
<UML:Association xmi.id='_9_5_1_8c50279_1169562351546_551356_632' isRoot='false' isLeaf='false' isAbstract='false'>
<UML:Association.connection>
- <UML:AssociationEnd xmi.id='_9_5_1_8c50279_1169562351546_772011_630' name='user' visibility='public' isNavigable='false' ordering='unordered' aggregation='none' targetScope='instance' changeability='changeable' association='_9_5_1_8c50279_1169562351546_551356_632' participant='_9_5_1_8c50279_1169288267218_362608_214'/>
+ <UML:AssociationEnd xmi.id='_9_5_1_8c50279_1169562351546_772011_630' name='user' visibility='public' isNavigable='true' ordering='unordered' aggregation='none' targetScope='instance' changeability='changeable' association='_9_5_1_8c50279_1169562351546_551356_632' participant='_9_5_1_8c50279_1169288267218_362608_214'/>
<UML:AssociationEnd xmi.id='_9_5_1_8c50279_1169562351546_940963_631' name='roles' visibility='public' isNavigable='true' ordering='unordered' aggregation='none' targetScope='instance' changeability='changeable' association='_9_5_1_8c50279_1169562351546_551356_632' participant='_9_5_1_8c50279_1169562315843_550874_612'>
<UML:AssociationEnd.multiplicity>
<UML:Multiplicity xmi.id='_9_5_1_8c50279_1169610631000_262917_910'>
@@ -1875,10 +1875,10 @@
<zoomFactor xmi.value='1.0'/>
<diagramOpened xmi.value='true'/>
<diagramWindowBounds>0, 0, 936, 849</diagramWindowBounds>
- <diagramScrollPositionX xmi.value='575'/>
+ <diagramScrollPositionX xmi.value='522'/>
<diagramScrollPositionY xmi.value='0'/>
<maximized xmi.value='true'/>
- <active xmi.value='false'/>
+ <active xmi.value='true'/>
<mdOwnedViews>
<mdElement elementClass='ClassView' xmi.id='_9_5_1_8c50279_1169288267218_291755_215'>
<elementID xmi.idref='_9_5_1_8c50279_1169288267218_362608_214'/>
@@ -2264,7 +2264,7 @@
<diagramScrollPositionX xmi.value='0'/>
<diagramScrollPositionY xmi.value='0'/>
<maximized xmi.value='true'/>
- <active xmi.value='true'/>
+ <active xmi.value='false'/>
<mdOwnedViews>
<mdElement elementClass='UseCaseView' xmi.id='_9_5_1_8c50279_1169289715765_476802_469'>
<elementID xmi.idref='_9_5_1_8c50279_1169289715765_707040_468'/>
@@ -3324,7 +3324,7 @@
<mdElement elementClass='StringProperty'>
<propertyID>INFO_PROPERTY</propertyID>
<propertyDescriptionID>INFO_PROPERTY_DESCRIPTION</propertyDescriptionID>
- <value>18 2d 42 2e 31 6e 45 2f a 54 5 60 71 50 a3 6b e4 4b 7d ea 49 37 68 2c 1f 42 d 52 25 27 b7 21 18 91 a5 a9 6 ce fe 50 ff 7d f7 b7 a1 ab 60 b9 9e a7 1b 8a 22 9d 93 c7 5f 98 84 65 e1 e3 f6 3c 54 fd 28 bb a1 2b f6 5a b8 cb d6 e5 9d </value>
+ <value>18 2d 42 2e 31 6e 45 2f a 54 5 60 71 50 a3 6b e4 4b 7d ea 49 37 68 2a 1f 43 e 52 20 25 b7 21 18 91 a5 a9 6 ce fe 50 ff 7d f7 b7 a1 ab 60 b9 9e a7 1b 8a 22 9d 93 c7 5f 98 84 65 e1 e3 f6 3c 54 fd 28 bb a1 2b f6 5a b8 cb d6 e5 9d </value>
<multiline xmi.value='false'/>
</mdElement>
<mdElement elementClass='ChoiceProperty'>
1.1 plugins/samples/timetracker-ejb3/sql.txt
Index: sql.txt
===================================================================
insert into users (ID, USERNAME, PASSWORD, FIRST_NAME, LAST_NAME, EMAIL, IS_ACTIVE, CREATION_DATE, COMMENT) values (1, 'nbhatia', '756slLjeNViurJBGI5JeqA==', 'Naresh', 'Bhatia', 'nb...@no... email address is being protected from spam bots, you need Javascript enabled to view it', 1, '2006/01/01 09:00', null);
insert into users (ID, USERNAME, PASSWORD, FIRST_NAME, LAST_NAME, EMAIL, IS_ACTIVE, CREATION_DATE, COMMENT) values (2, 'lcoude', '756slLjeNViurJBGI5JeqA==', 'Louis', 'Coude', 'lc...@no... email address is being protected from spam bots, you need Javascript enabled to view it', 1, '2006/01/01 09:00', null);
insert into users (ID, USERNAME, PASSWORD, FIRST_NAME, LAST_NAME, EMAIL, IS_ACTIVE, CREATION_DATE, COMMENT) values (3, 'ecrutchfield', '756slLjeNViurJBGI5JeqA==', 'Eric', 'Crutchfield', 'ecr...@no... email address is being protected from spam bots, you need Javascript enabled to view it', 1, '2006/01/01 09:00', null);
insert into users (ID, USERNAME, PASSWORD, FIRST_NAME, LAST_NAME, EMAIL, IS_ACTIVE, CREATION_DATE, COMMENT) values (4, 'cmicali', '756slLjeNViurJBGI5JeqA==', 'Chris', 'Micali', 'cm...@no... email address is being protected from spam bots, you need Javascript enabled to view it', 1, '2006/01/01 09:00', null);
insert into user_role (ID, ROLE, USER) values (1, 'ADMIN', 1);
insert into user_role (ID, ROLE, USER) values (2, 'USER', 1);
insert into user_role (ID, ROLE, USER) values (3, 'USER', 2);
insert into user_role (ID, ROLE, USER) values (4, 'USER', 3);
insert into user_role (ID, ROLE, USER) values (5, 'USER', 4);
-- insert into users_user_role (USERS_ID, ROLES_ID) values (1, 1);
-- insert into users_user_role (USERS_ID, ROLES_ID) values (1, 2);
-- insert into users_user_role (USERS_ID, ROLES_ID) values (2, 2);
-- insert into users_user_role (USERS_ID, ROLES_ID) values (3, 2);
-- insert into users_user_role (USERS_ID, ROLES_ID) values (4, 1);
-- insert into users_user_role (USERS_ID, ROLES_ID) values (4, 2);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values ( 1, 'APPROVED', '2006/05/15', 'Timecard 01', 1, 2);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values ( 2, 'APPROVED', '2006/05/15', 'Timecard 02', 2, 3);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values ( 3, 'APPROVED', '2006/05/15', 'Timecard 03', 3, 4);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values ( 4, 'APPROVED', '2006/05/15', 'Timecard 04', 4, 1);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values ( 5, 'REJECTED', '2006/05/22', 'Timecard 05', 1, 2);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values ( 6, 'REJECTED', '2006/05/22', 'Timecard 06', 2, 3);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values ( 7, 'REJECTED', '2006/05/22', 'Timecard 07', 3, 4);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values ( 8, 'REJECTED', '2006/05/22', 'Timecard 08', 4, 1);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values ( 9, 'SUBMITTED', '2006/05/29', 'Timecard 09', 1, 2);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values (10, 'SUBMITTED', '2006/05/29', 'Timecard 10', 2, 3);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values (11, 'SUBMITTED', '2006/05/29', 'Timecard 11', 3, 4);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values (12, 'SUBMITTED', '2006/05/29', 'Timecard 12', 4, 1);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values (13, 'DRAFT', '2006/06/05', 'Timecard 13', null, 2);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values (14, 'DRAFT', '2006/06/05', 'Timecard 14', null, 3);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values (15, 'DRAFT', '2006/06/05', 'Timecard 15', null, 4);
insert into timecard (ID, STATUS, START_DATE, COMMENTS, APPROVER, SUBMITTER) values (16, 'DRAFT', '2006/06/05', 'Timecard 16', null, 1);
|
|
From: Vance K. <va...@us...> - 2007-01-24 04:54:20
|
User: vancek Date: 07/01/23 20:32:50 plugins/samples/timetracker-ejb3/mda/src/main/uml - New directory |
|
From: Vance K. <va...@us...> - 2007-01-24 04:37:54
|
User: vancek
Date: 07/01/23 20:37:55
Modified: andromda-ejb3/src/main/resources/templates/ejb3 DaoBase.vsl
andromda-ejb3/src/site changes.xml
Log:
fix DAO injection into DAO base where entity references another entity
Revision Changes Path
1.12 +12 -9 cartridges/andromda-ejb3/src/main/resources/templates/ejb3/DaoBase.vsl
Index: DaoBase.vsl
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/main/resources/templates/ejb3/DaoBase.vsl,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -w -r1.11 -r1.12
--- DaoBase.vsl 23 Jan 2007 01:24:13 -0000 1.11
+++ DaoBase.vsl 24 Jan 2007 04:37:55 -0000 1.12
@@ -69,17 +69,20 @@
protected org.hibernate.Session hibernateSession;
#end
-#foreach($entityRef in $entity.entityReferences)
- private $entityRef.targetElement.fullyQualifiedDaoName $entityRef.daoName;
+#set ($entityReferences = $entity.entityReferences)
+#if (!$entityReferences.empty)
+ // ------ DAO Injections ------
+#**##foreach($entityRef in $entityReferences)
/**
- * Sets the reference to <code>$entityRef.daoName</code>.
+ * Inject DAO $entityRef.targetElement.fullyQualifiedDaoName
*/
- public void ${entityRef.daoSetterName}($entityRef.targetElement.fullyQualifiedDaoName $entityRef.daoName)
- {
- this.$entityRef.daoName = $entityRef.daoName;
- }
+ @javax.ejb.EJB
+ protected $entityRef.targetElement.fullyQualifiedDaoName $entityRef.daoName;
+#**##end
+#end
+#foreach($entityRef in $entityReferences)
/**
* Gets the reference to <code>$entityRef.daoName</code>.
*/
1.4 +7 -0 cartridges/andromda-ejb3/src/site/changes.xml
Index: changes.xml
===================================================================
RCS file: /cvsroot/andromdaplugins/cartridges/andromda-ejb3/src/site/changes.xml,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -w -r1.3 -r1.4
--- changes.xml 21 Jan 2007 04:17:40 -0000 1.3
+++ changes.xml 24 Jan 2007 04:37:55 -0000 1.4
@@ -347,6 +347,13 @@
Fix Entity - EntityVO conversion methods in the DAO base classes by adding the Converter
template object to the cartridge.xml and the necessary namespace property to namespace.xml.
</action>
+ <action dev="vancek" type="add">
+ Inject org.hibernate.Session into DAO base class if hibernateExtensionEnabled is true. This can be used
+ to create Hibernate Search Criteria.
+ </action>
+ <action dev="vancek" type="fix">
+ Fix DAO injection into DAO base when entity references another entity.
+ </action>
</release>
</body>
</document>
\ No newline at end of file
|
|
From: Vance K. <va...@us...> - 2007-01-24 04:33:38
|
User: vancek
Date: 07/01/23 20:33:39
Added: samples/timetracker-ejb3/core/src/main/java/org/andromda/timetracker/domain
TimecardDaoImpl.java UserDaoImpl.java Timecard.java
UserRoleDaoImpl.java
samples/timetracker-ejb3/core/src/test/resources log4j.xml
testBeanRefFactory.xml testng.xml
samples/timetracker-ejb3/mda/src/main/uml timetracker.xmi
samples/timetracker-ejb3/core/src/test/java/org/andromda/timetracker/service
TimeTrackingServiceTest.java UserServiceTest.java
samples/timetracker-ejb3 pom.xml .project .classpath
.cvsignore readme.txt
samples/timetracker-ejb3/core/src/main/java/org/andromda/timetracker/service
UserServiceBean.java TimeTrackingServiceBean.java
samples/timetracker-ejb3/app pom.xml .cvsignore
samples/timetracker-ejb3/common .cvsignore pom.xml
samples/timetracker-ejb3/mda pom.xml .cvsignore
samples/timetracker-ejb3/app/src/main/config
timetracker-ds.xml auth.conf
samples/timetracker-ejb3/common/src/main/java/org/andromda/timetracker/vo
UserVOComparator.java
samples/timetracker-ejb3/client .cvsignore pom.xml
samples/timetracker-ejb3/app/src/main/application/META-INF
timetracker-login-config.xml jboss-app.xml
timetracker-login-service.xml
samples/timetracker-ejb3/web/src/main/java/org/andromda/timetracker/web/timecardsearch
SearchControllerImpl.java
samples/timetracker-ejb3/client/src/main/java/org/andromda/timetracker/client
Client.java
samples/timetracker-ejb3/mda/src/main/config/mappings
WebMergeMappings.xml
samples/timetracker-ejb3/core .cvsignore pom.xml
samples/timetracker-ejb3/mda/src/main/config andromda.xml
samples/timetracker-ejb3/web/src/main/css custom.css
samples/timetracker-ejb3/web pom.xml .cvsignore
samples/timetracker-ejb3/web/src/main/properties
messages.properties
Log:
sample timetracker using EJB3 and JSF cartridges
Revision Changes Path
1.1 plugins/samples/timetracker-ejb3/core/src/main/java/org/andromda/timetracker/domain/TimecardDaoImpl.java
Index: TimecardDaoImpl.java
===================================================================
// license-header java merge-point
/**
* This is only generated once! It will never be overwritten.
* You can (and have to!) safely modify it by hand.
*/
package org.andromda.timetracker.domain;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
/**
* @see org.andromda.timetracker.domain.Timecard
*/
public class TimecardDaoImpl
extends org.andromda.timetracker.domain.TimecardDaoBase
{
private Log logger = LogFactory.getLog(TimecardDaoImpl.class);
/**
* @see org.andromda.timetracker.domain.TimecardDao#findByCriteria(org.andromda.timetracker.vo.TimecardSearchCriteriaVO)
*/
protected java.util.List handleFindByCriteria(org.andromda.timetracker.vo.TimecardSearchCriteriaVO criteria)
{
// Create the timecard criteria
Criteria timecardCriteria = hibernateSession.createCriteria(Timecard.class);
timecardCriteria.setFetchMode("submitter", FetchMode.JOIN);
timecardCriteria.setFetchMode("approver", FetchMode.JOIN);
// Add sumitter criteria
if (criteria.getSubmitterId() != null)
{
timecardCriteria.createCriteria("submitter").add(Restrictions.idEq(criteria.getSubmitterId()));
}
// Add approver criteria
if (criteria.getApproverId() != null)
{
timecardCriteria.createCriteria("approver").add(Restrictions.idEq(criteria.getApproverId()));
}
// Add status criteria
if (criteria.getStatus() != null)
{
timecardCriteria.add(Restrictions.eq("status", criteria.getStatus()));
}
// Add startDateMin criteria
if (criteria.getStartDateMin() != null)
{
timecardCriteria.add(Restrictions.ge("startDate", criteria.getStartDateMin()));
}
// Add startDateMax criteria
if (criteria.getStartDateMax() != null)
{
timecardCriteria.add(Restrictions.le("startDate", criteria.getStartDateMax()));
}
List timecards = timecardCriteria.list();
if (logger.isDebugEnabled())
{
logger.debug(timecards.size() + " timecards found");
}
return timecards;
}
/**
* @see org.andromda.timetracker.domain.TimecardDao#toTimecardSummaryVO(org.andromda.timetracker.domain.Timecard, org.andromda.timetracker.vo.TimecardSummaryVO)
*/
public void toTimecardSummaryVO(
org.andromda.timetracker.domain.Timecard sourceEntity,
org.andromda.timetracker.vo.TimecardSummaryVO targetVO)
{
// ${toDoTag} verify behavior of toTimecardSummaryVO
super.toTimecardSummaryVO(sourceEntity, targetVO);
// add the related entities
targetVO.setSubmitterName(sourceEntity.getSubmitter().getUsername());
if (sourceEntity.getApprover() != null)
{
targetVO.setApproverName(sourceEntity.getApprover().getUsername());
}
}
/**
* @see org.andromda.timetracker.domain.TimecardDao#toTimecardSummaryVO(org.andromda.timetracker.domain.Timecard)
*/
public org.andromda.timetracker.vo.TimecardSummaryVO toTimecardSummaryVO(final org.andromda.timetracker.domain.Timecard entity)
{
// ${toDoTag} verify behavior of toTimecardSummaryVO
return super.toTimecardSummaryVO(entity);
}
/**
* Retrieves the entity object that is associated with the specified value object
* from the object store. If no such entity object exists in the object store,
* a new, blank entity is created
*/
private org.andromda.timetracker.domain.Timecard loadTimecardFromTimecardSummaryVO(org.andromda.timetracker.vo.TimecardSummaryVO timecardSummaryVO)
{
// ${toDoTag} implement loadTimecardFromTimecardSummaryVO
throw new java.lang.UnsupportedOperationException("org.andromda.timetracker.domain.loadTimecardFromTimecardSummaryVO(org.andromda.timetracker.vo.TimecardSummaryVO) not yet implemented.");
/* A typical implementation looks like this:
org.andromda.timetracker.domain.Timecard timecard = this.load(timecardSummaryVO.getId());
if (timecard == null)
{
timecard = org.andromda.timetracker.domain.Timecard.Factory.newInstance();
}
return timecard;
*/
}
/**
* @see org.andromda.timetracker.domain.TimecardDao#timecardSummaryVOToEntity(org.andromda.timetracker.vo.TimecardSummaryVO)
*/
public org.andromda.timetracker.domain.Timecard timecardSummaryVOToEntity(org.andromda.timetracker.vo.TimecardSummaryVO timecardSummaryVO)
{
// ${toDoTag} verify behavior of timecardSummaryVOToEntity
org.andromda.timetracker.domain.Timecard entity = this.loadTimecardFromTimecardSummaryVO(timecardSummaryVO);
this.timecardSummaryVOToEntity(timecardSummaryVO, entity, true);
return entity;
}
/**
* @see org.andromda.timetracker.domain.TimecardDao#timecardSummaryVOToEntity(org.andromda.timetracker.vo.TimecardSummaryVO, org.andromda.timetracker.domain.Timecard)
*/
public void timecardSummaryVOToEntity(
org.andromda.timetracker.vo.TimecardSummaryVO sourceVO,
org.andromda.timetracker.domain.Timecard targetEntity,
boolean copyIfNull)
{
// ${toDoTag} verify behavior of timecardSummaryVOToEntity
super.timecardSummaryVOToEntity(sourceVO, targetEntity, copyIfNull);
}
}
1.1 plugins/samples/timetracker-ejb3/core/src/main/java/org/andromda/timetracker/domain/UserDaoImpl.java
Index: UserDaoImpl.java
===================================================================
// license-header java merge-point
/**
* This is only generated once! It will never be overwritten.
* You can (and have to!) safely modify it by hand.
*/
package org.andromda.timetracker.domain;
import java.util.Collection;
import java.util.Set;
import java.util.TreeSet;
import org.andromda.timetracker.vo.UserDetailsVO;
import org.andromda.timetracker.vo.UserRoleVO;
/**
* @see org.andromda.timetracker.domain.User
*/
public class UserDaoImpl
extends org.andromda.timetracker.domain.UserDaoBase
{
/**
* @see org.andromda.timetracker.domain.UserDao#toUserVO(org.andromda.timetracker.domain.User, org.andromda.timetracker.vo.UserVO)
*/
public void toUserVO(
org.andromda.timetracker.domain.User sourceEntity,
org.andromda.timetracker.vo.UserVO targetVO)
{
// ${toDoTag} verify behavior of toUserVO
super.toUserVO(sourceEntity, targetVO);
// WARNING! No conversion for targetVO.id (can't convert sourceEntity.getId():java.lang.Long to java.lang.Long
// WARNING! No conversion for targetVO.username (can't convert sourceEntity.getUsername():java.lang.String to java.lang.String
// WARNING! No conversion for targetVO.firstName (can't convert sourceEntity.getFirstName():java.lang.String to java.lang.String
// WARNING! No conversion for targetVO.lastName (can't convert sourceEntity.getLastName():java.lang.String to java.lang.String
}
/**
* @see org.andromda.timetracker.domain.UserDao#toUserVO(org.andromda.timetracker.domain.User)
*/
public org.andromda.timetracker.vo.UserVO toUserVO(final org.andromda.timetracker.domain.User entity)
{
// ${toDoTag} verify behavior of toUserVO
return super.toUserVO(entity);
}
/**
* Retrieves the entity object that is associated with the specified value object
* from the object store. If no such entity object exists in the object store,
* a new, blank entity is created
*/
private org.andromda.timetracker.domain.User loadUserFromUserVO(org.andromda.timetracker.vo.UserVO userVO)
{
// ${toDoTag} implement loadUserFromUserVO
throw new java.lang.UnsupportedOperationException("org.andromda.timetracker.domain.loadUserFromUserVO(org.andromda.timetracker.vo.UserVO) not yet implemented.");
/* A typical implementation looks like this:
org.andromda.timetracker.domain.User user = this.load(userVO.getId());
if (user == null)
{
user = org.andromda.timetracker.domain.User.Factory.newInstance();
}
return user;
*/
}
/**
* @see org.andromda.timetracker.domain.UserDao#userVOToEntity(org.andromda.timetracker.vo.UserVO)
*/
public org.andromda.timetracker.domain.User userVOToEntity(org.andromda.timetracker.vo.UserVO userVO)
{
// ${toDoTag} verify behavior of userVOToEntity
org.andromda.timetracker.domain.User entity = this.loadUserFromUserVO(userVO);
this.userVOToEntity(userVO, entity, true);
return entity;
}
/**
* @see org.andromda.timetracker.domain.UserDao#userVOToEntity(org.andromda.timetracker.vo.UserVO, org.andromda.timetracker.domain.User)
*/
public void userVOToEntity(
org.andromda.timetracker.vo.UserVO sourceVO,
org.andromda.timetracker.domain.User targetEntity,
boolean copyIfNull)
{
// ${toDoTag} verify behavior of userVOToEntity
super.userVOToEntity(sourceVO, targetEntity, copyIfNull);
// No conversion for targetEntity.username (can't convert sourceVO.getUsername():java.lang.String to java.lang.String
// No conversion for targetEntity.firstName (can't convert sourceVO.getFirstName():java.lang.String to java.lang.String
// No conversion for targetEntity.lastName (can't convert sourceVO.getLastName():java.lang.String to java.lang.String
}
/**
* @see org.andromda.timetracker.domain.UserDao#toUserDetailsVO(org.andromda.timetracker.domain.User, org.andromda.timetracker.vo.UserDetailsVO)
*/
public void toUserDetailsVO(
org.andromda.timetracker.domain.User sourceEntity,
org.andromda.timetracker.vo.UserDetailsVO targetVO)
{
super.toUserDetailsVO(sourceEntity, targetVO);
// Convert roles
Collection srcRoles = sourceEntity.getRoles();
UserRoleVO[] targetRoles = new UserRoleVO[srcRoles.size()];
int i=0;
for (Object srcRole : srcRoles)
{
targetRoles[i] = getUserRoleDao().toUserRoleVO((UserRole)srcRole);
i++;
}
targetVO.setRoles(targetRoles);
}
/**
* Retrieves the entity object that is associated with the specified value object
* from the object store. If no such entity object exists in the object store,
* a new, blank entity is created
*/
private org.andromda.timetracker.domain.User loadUserFromUserDetailsVO(org.andromda.timetracker.vo.UserDetailsVO userDetailsVO)
{
org.andromda.timetracker.domain.User user = null;
if (userDetailsVO != null && userDetailsVO.getId() != null)
{
try
{
user = this.load(userDetailsVO.getId());
}
catch (UserDaoException e)
{
// user id no set - OK to ignore
}
}
if (user == null)
{
user = new User();
}
return user;
}
/**
* @see org.andromda.timetracker.domain.UserDao#userDetailsVOToEntity(org.andromda.timetracker.vo.UserDetailsVO)
*/
public User userDetailsVOToEntity(UserDetailsVO userDetailsVO)
{
org.andromda.timetracker.domain.User entity = this.loadUserFromUserDetailsVO(userDetailsVO);
this.userDetailsVOToEntity(userDetailsVO, entity, true);
return entity;
}
/**
* @see org.andromda.timetracker.domain.UserDao#userDetailsVOToEntity(org.andromda.timetracker.vo.UserDetailsVO, org.andromda.timetracker.domain.User)
*/
public void userDetailsVOToEntity(
org.andromda.timetracker.vo.UserDetailsVO sourceVO,
org.andromda.timetracker.domain.User targetEntity,
boolean copyIfNull)
{
// @todo verify behavior of userDetailsVOToEntity
super.userDetailsVOToEntity(sourceVO, targetEntity, copyIfNull);
if (sourceVO.getRoles().length > 0)
{
Set<UserRole> roles = new TreeSet<UserRole>();
for (UserRoleVO userRoleVO : sourceVO.getRoles())
{
System.out.println(" user role : " + userRoleVO.getRole());
roles.add(this.getUserRoleDao().userRoleVOToEntity(userRoleVO));
}
targetEntity.setRoles(roles);
}
}
}
1.1 plugins/samples/timetracker-ejb3/core/src/main/java/org/andromda/timetracker/domain/Timecard.java
Index: Timecard.java
===================================================================
// license-header java merge-point
//
// Attention: Generated code! Do not modify by hand!
// Generated by: Entity.vsl in andromda-ejb3-cartridge.
//
package org.andromda.timetracker.domain;
/**
* Autogenerated POJO EJB3 implementation class for Timecard.
*
* Add any manual implementation within this class. This class will NOT
* be overwritten with incremental changes.
*
*
*
*/
@javax.persistence.Entity
// Uncomment to enable seam component name
// @org.jboss.seam.annotations.Name("timecard")
// Uncomment to set specific component scope type
//@org.jboss.seam.annotations.Scope(org.jboss.seam.ScopeType.CONVERSATION)
@javax.persistence.Table(name = "TIMECARD")
// Uncomment to enable entity listener for Timecard
// @javax.persistence.EntityListeners({org.andromda.timetracker.domain.TimecardListener.class})
// Uncomment to enable caching for Timecard
// @org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.TRANSACTIONAL)
@javax.persistence.NamedQuery(name = "Timecard.findAll", query = "select timecard from Timecard AS timecard")
public class Timecard
extends org.andromda.timetracker.domain.TimecardEmbeddable
implements java.io.Serializable, Comparable<Timecard>
{
/**
* The serial version UID of this class required for serialization.
*/
private static final long serialVersionUID = -2301368423761775897L;
// --------------- constructors -----------------
/**
* Default Timecard constructor
*/
public Timecard()
{
super();
}
/**
* Implementation for the constructor with all POJO attributes except auto incremented identifiers.
* This method sets all POJO fields defined in this/super class to the
* values provided by the parameters.
*
*/
public Timecard(org.andromda.timetracker.domain.TimecardStatus status, java.util.Date startDate, java.lang.String comments)
{
super(status, startDate, comments);
}
/**
* Constructor with all POJO attribute values and CMR relations.
*
* @param status Value for the status property
* @param startDate Value for the startDate property
* @param comments Value for the comments property
* @param submitter Value for the submitter relation role
* @param approver Value for the approver relation role
*/
public Timecard(org.andromda.timetracker.domain.TimecardStatus status, java.util.Date startDate, java.lang.String comments, org.andromda.timetracker.domain.User submitter, org.andromda.timetracker.domain.User approver)
{
super(status, startDate, comments, submitter, approver);
}
// -------------- Entity Methods -----------------
/**
*
*/
@javax.persistence.Transient
public static java.util.List findByCriteria(org.andromda.timetracker.vo.TimecardSearchCriteriaVO criteria)
{
// TODO put your implementation here.
return null;
}
// --------------- Lifecycle callbacks -----------------
/**
* @see java.lang.Comparable#compareTo(T)
*/
public int compareTo(Timecard o)
{
int cmp = 0;
if (this.getId() != null)
{
cmp = this.getId().compareTo(o.getId());
}
else
{
if (this.getStatus() != null)
{
cmp = (cmp != 0 ? cmp : this.getStatus().compareTo(o.getStatus()));
}
if (this.getStartDate() != null)
{
cmp = (cmp != 0 ? cmp : this.getStartDate().compareTo(o.getStartDate()));
}
if (this.getComments() != null)
{
cmp = (cmp != 0 ? cmp : this.getComments().compareTo(o.getComments()));
}
}
return cmp;
}
}
1.1 plugins/samples/timetracker-ejb3/core/src/main/java/org/andromda/timetracker/domain/UserRoleDaoImpl.java
Index: UserRoleDaoImpl.java
===================================================================
// license-header java merge-point
/**
* This is only generated once! It will never be overwritten.
* You can (and have to!) safely modify it by hand.
*/
package org.andromda.timetracker.domain;
/**
* @see org.andromda.timetracker.domain.UserRole
*/
public class UserRoleDaoImpl
extends org.andromda.timetracker.domain.UserRoleDaoBase
{
/**
* @see org.andromda.timetracker.domain.UserRoleDao#toUserRoleVO(org.andromda.timetracker.domain.UserRole, org.andromda.timetracker.vo.UserRoleVO)
*/
public void toUserRoleVO(
org.andromda.timetracker.domain.UserRole sourceEntity,
org.andromda.timetracker.vo.UserRoleVO targetVO)
{
// ${toDoTag} verify behavior of toUserRoleVO
super.toUserRoleVO(sourceEntity, targetVO);
}
/**
* @see org.andromda.timetracker.domain.UserRoleDao#toUserRoleVO(org.andromda.timetracker.domain.UserRole)
*/
public org.andromda.timetracker.vo.UserRoleVO toUserRoleVO(final org.andromda.timetracker.domain.UserRole entity)
{
// ${toDoTag} verify behavior of toUserRoleVO
return super.toUserRoleVO(entity);
}
/**
* Retrieves the entity object that is associated with the specified value object
* from the object store. If no such entity object exists in the object store,
* a new, blank entity is created
*/
private org.andromda.timetracker.domain.UserRole loadUserRoleFromUserRoleVO(org.andromda.timetracker.vo.UserRoleVO userRoleVO)
{
org.andromda.timetracker.domain.UserRole userRole = null;
if (userRoleVO != null && userRoleVO.getId() != null)
{
try
{
userRole = this.load(userRoleVO.getId());
}
catch (UserRoleDaoException e)
{
// ok to continue
}
}
if (userRole == null)
{
userRole = new UserRole();
}
return userRole;
}
/**
* @see org.andromda.timetracker.domain.UserRoleDao#userRoleVOToEntity(org.andromda.timetracker.vo.UserRoleVO)
*/
public org.andromda.timetracker.domain.UserRole userRoleVOToEntity(org.andromda.timetracker.vo.UserRoleVO userRoleVO)
{
// ${toDoTag} verify behavior of userRoleVOToEntity
org.andromda.timetracker.domain.UserRole entity = this.loadUserRoleFromUserRoleVO(userRoleVO);
this.userRoleVOToEntity(userRoleVO, entity, true);
return entity;
}
/**
* @see org.andromda.timetracker.domain.UserRoleDao#userRoleVOToEntity(org.andromda.timetracker.vo.UserRoleVO, org.andromda.timetracker.domain.UserRole)
*/
public void userRoleVOToEntity(
org.andromda.timetracker.vo.UserRoleVO sourceVO,
org.andromda.timetracker.domain.UserRole targetEntity,
boolean copyIfNull)
{
// ${toDoTag} verify behavior of userRoleVOToEntity
super.userRoleVOToEntity(sourceVO, targetEntity, copyIfNull);
}
}
1.1 plugins/samples/timetracker-ejb3/core/src/test/resources/log4j.xml
Index: log4j.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!--
******************************************************************************
* Log4j Configuration
*
* Logging levels (higest to lowest):
* off, fatal, error, warn, info, debug, all
* A logging request is enabled if its level is
* higher than or equal to the level of its logger.
******************************************************************************
-->
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- ******************************************************************* -->
<!-- ConsoleAppender -->
<!-- ******************************************************************* -->
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="warn"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- Conversion pattern: Message\n -->
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
<!-- ******************************************************************* -->
<!-- FileAppender -->
<!-- ******************************************************************* -->
<appender name="FileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="timetracker-test.log"/>
<param name="Append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- Conversion pattern: Time Priority - Message\n -->
<param name="ConversionPattern" value="%d{HH:mm:ss.SSS} %-5p - %m%n"/>
<!-- Alternate Conversion pattern: Time Priority - Class[Line] - Message\n -->
<!--
<param name="ConversionPattern" value="%d{HH:mm:ss.SSS} %-5p %50C[%4L] - %m%n"/>
-->
</layout>
</appender>
<!-- ******************************************************************* -->
<!-- Low Level Loggers -->
<!-- ******************************************************************* -->
<!-- Log hibernate messages -->
<logger name="org.hibernate">
<level value="warn"/>
</logger>
<!-- Log HQL query parser activity -->
<logger name="org.hibernate.hql.ast.AST">
<level value="warn"/>
</logger>
<!-- Log just the SQL -->
<logger name="org.hibernate.SQL">
<level value="debug"/>
</logger>
<!-- Log JDBC bind parameters -->
<logger name="org.hibernate.type">
<level value="debug"/>
</logger>
<!-- Log schema export/update -->
<logger name="org.hibernate.tool.hbm2ddl">
<level value="warn"/>
</logger>
<!-- Log HQL parse trees -->
<logger name="org.hibernate.hql">
<level value="warn"/>
</logger>
<!-- Log cache activity -->
<logger name="org.hibernate.cache">
<level value="warn"/>
</logger>
<!-- Log transaction activity -->
<logger name="org.hibernate.transaction">
<level value="warn"/>
</logger>
<!-- Log JDBC resource acquisition -->
<logger name="org.hibernate.jdbc">
<level value="warn"/>
</logger>
<!-- Track down connection leakages when using DriverManagerConnectionProvider -->
<logger name="org.hibernate.connection.DriverManagerConnectionProvider">
<level value="warn"/>
</logger>
<!-- Log TimeTracker messages -->
<logger name="org.andromda.timetracker">
<level value="debug"/>
</logger>
<!-- ******************************************************************* -->
<!-- Root Logger -->
<!-- ******************************************************************* -->
<!-- Allow warning and higher messages from everyone to go to console and file -->
<root>
<level value="warn"/>
<appender-ref ref="ConsoleAppender"/>
<appender-ref ref="FileAppender"/>
</root>
</log4j:configuration>
1.1 plugins/samples/timetracker-ejb3/core/src/test/resources/testBeanRefFactory.xml
Index: testBeanRefFactory.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans
PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="beanRefFactory"
class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
<list>
<value>applicationContext.xml</value>
<value>applicationContext-localDataSource.xml</value>
<!-- beanRefFactory merge-point -->
</list>
</constructor-arg>
</bean>
</beans>
1.1 plugins/samples/timetracker-ejb3/core/src/test/resources/testng.xml
Index: testng.xml
===================================================================
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TimeTracker Test Suite" verbose="1">
<test name="Services Test">
<classes>
<!--
<class name="org.andromda.timetracker.service.UserServiceTest" />
<class name="org.andromda.timetracker.service.TimeTrackingServiceTest" />
-->
</classes>
</test>
</suite>
1.1 plugins/samples/timetracker-ejb3/mda/src/main/uml/timetracker.xmi
Index: timetracker.xmi
===================================================================
<?xml version='1.0' encoding='UTF-8'?>
<!-- <!DOCTYPE XMI SYSTEM "uml14xmi12.dtd"> -->
<XMI xmi.version='1.2' timestamp='Wed Jan 24 13:07:05 GMT+08:00 2007' xmlns:UML='omg.org/UML/1.4'>
<XMI.header>
<XMI.documentation>
<XMI.exporter>MagicDraw UML</XMI.exporter>
<XMI.exporterVersion>9.5</XMI.exporterVersion>
</XMI.documentation>
<XMI.metamodel xmi.name='UML' xmi.version='1.4'/>
</XMI.header>
<XMI.content>
<UML:Model xmi.id='eee_1045467100313_135436_1' name='Data' isRoot='false' isLeaf='false' isAbstract='false'>
<UML:ModelElement.comment>
<UML:Comment xmi.id='_24400562_1092013275546_280654_0' name='Author:Administrator. Created:8/8/04 8:58 PM. Title:. Comment:. '/>
</UML:ModelElement.comment>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<ignoredInModule xmi.value='true'/>
</XMI.extension>
<UML:Namespace.ownedElement>
<UML:Package xmi.id='eee_1045467100313_365297_7' name='Component View' isRoot='false' isLeaf='false' isAbstract='false'/>
<UML:Package href='andromda-profile-3.3-SNAPSHOT.xml.zip|_8a70287_1078771814628_224704_589'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='::org.andromda.profile'/>
</XMI.extension>
</UML:Package>
<UML:Package xmi.id='_9_0_2_12ab03bf_1125323139546_169312_1' name='Data types' isRoot='false' isLeaf='false' isAbstract='false'/>
<UML:Model xmi.id='_9_5_1_8c50279_1169284943593_621983_0' name='TimeTracker' isRoot='false' isLeaf='false' isAbstract='false'>
<UML:Namespace.ownedElement>
<UML:Package xmi.id='_9_5_1_8c50279_1169285020671_442512_1' name='org.andromda.timetracker' isRoot='false' isLeaf='false' isAbstract='false'>
<UML:Namespace.ownedElement>
<UML:Package xmi.id='_9_5_1_8c50279_1169285069296_549214_2' name='vo' isRoot='false' isLeaf='false' isAbstract='false'>
<UML:Namespace.ownedElement>
<UML:Class xmi.id='_9_5_1_8c50279_1169285116546_935256_4' name='UserVO' visibility='public' isRoot='false' isLeaf='false' isAbstract='false' isActive='false'>
<UML:ModelElement.comment>
<UML:Comment xmi.id='_9_5_1_8c50279_1169285297375_133209_28' name='This class represents a value object that carries information about a TimeTracker user.'/>
</UML:ModelElement.comment>
<UML:ModelElement.stereotype>
<UML:Stereotype href='andromda-profile-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119373197267_59537_10'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='org.andromda.profile::ValueObject'/>
</XMI.extension>
</UML:Stereotype>
</UML:ModelElement.stereotype>
<UML:Classifier.feature>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169285180765_139981_20' name='id' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169285116546_935256_4'>
<UML:Attribute.initialValue>
<UML:Expression xmi.id='_9_5_1_8c50279_1169562788046_276612_832'/>
</UML:Attribute.initialValue>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_227130_59'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::Long'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169285257984_178002_22' name='username' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169285116546_935256_4'>
<UML:Attribute.initialValue>
<UML:Expression xmi.id='_9_5_1_8c50279_1169562788046_386979_833'/>
</UML:Attribute.initialValue>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_364079_66'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::String'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169285269828_95519_24' name='firstName' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169285116546_935256_4'>
<UML:Attribute.initialValue>
<UML:Expression xmi.id='_9_5_1_8c50279_1169562788046_902312_834'/>
</UML:Attribute.initialValue>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_364079_66'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::String'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169285277593_284551_26' name='lastName' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169285116546_935256_4'>
<UML:Attribute.initialValue>
<UML:Expression xmi.id='_9_5_1_8c50279_1169562788046_86443_835'/>
</UML:Attribute.initialValue>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_364079_66'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::String'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
</UML:Classifier.feature>
</UML:Class>
<UML:Class xmi.id='_9_5_1_8c50279_1169285311500_838087_119' name='UserVO[]' visibility='public' isRoot='false' isLeaf='false' isAbstract='false' isActive='false'/>
<UML:Class xmi.id='_9_5_1_8c50279_1169364049578_435363_114' name='TimecardSummaryVO' visibility='public' isRoot='false' isLeaf='false' isAbstract='false' isActive='false'>
<UML:ModelElement.stereotype>
<UML:Stereotype href='andromda-profile-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119373197267_59537_10'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='org.andromda.profile::ValueObject'/>
</XMI.extension>
</UML:Stereotype>
</UML:ModelElement.stereotype>
<UML:Classifier.feature>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169364076812_527125_130' name='id' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169364049578_435363_114'>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_227130_59'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::Long'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169364079546_909254_132' name='status' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169364049578_435363_114' type='_9_5_1_8c50279_1169363855234_636472_0'/>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169364086890_611960_134' name='startDate' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169364049578_435363_114'>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_195604_13'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::Date'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169364092609_869542_136' name='comments' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169364049578_435363_114'>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_364079_66'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::String'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169364096843_508570_138' name='submitterName' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169364049578_435363_114'>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_364079_66'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::String'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169364104015_862185_140' name='approverName' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169364049578_435363_114'>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_364079_66'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::String'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
</UML:Classifier.feature>
</UML:Class>
<UML:Class xmi.id='_9_5_1_8c50279_1169364119234_263956_142' name='TimecardSummaryVO[]' visibility='public' isRoot='false' isLeaf='false' isAbstract='false' isActive='false'/>
<UML:Class xmi.id='_9_5_1_8c50279_1169364152171_496868_160' name='TimecardSearchCriteriaVO' visibility='public' isRoot='false' isLeaf='false' isAbstract='false' isActive='false'>
<UML:ModelElement.stereotype>
<UML:Stereotype href='andromda-profile-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119373197267_59537_10'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='org.andromda.profile::ValueObject'/>
</XMI.extension>
</UML:Stereotype>
</UML:ModelElement.stereotype>
<UML:Classifier.feature>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169364170015_93052_176' name='submitterId' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169364152171_496868_160'>
<UML:StructuralFeature.multiplicity>
<UML:Multiplicity xmi.id='_9_5_1_8c50279_1169364239546_707081_186'>
<UML:Multiplicity.range>
<UML:MultiplicityRange xmi.id='_9_5_1_8c50279_1169364239546_190054_187' lower='0' upper='1'/>
</UML:Multiplicity.range>
</UML:Multiplicity>
</UML:StructuralFeature.multiplicity>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_227130_59'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::Long'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169364181265_854013_178' name='approverId' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169364152171_496868_160'>
<UML:StructuralFeature.multiplicity>
<UML:Multiplicity xmi.id='_9_5_1_8c50279_1169364239546_218543_189'>
<UML:Multiplicity.range>
<UML:MultiplicityRange xmi.id='_9_5_1_8c50279_1169364239546_666772_190' lower='0' upper='1'/>
</UML:Multiplicity.range>
</UML:Multiplicity>
</UML:StructuralFeature.multiplicity>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_227130_59'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::Long'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169364190437_16846_180' name='status' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169364152171_496868_160' type='_9_5_1_8c50279_1169363855234_636472_0'>
<UML:StructuralFeature.multiplicity>
<UML:Multiplicity xmi.id='_9_5_1_8c50279_1169364239546_562937_192'>
<UML:Multiplicity.range>
<UML:MultiplicityRange xmi.id='_9_5_1_8c50279_1169364239546_740411_193' lower='0' upper='1'/>
</UML:Multiplicity.range>
</UML:Multiplicity>
</UML:StructuralFeature.multiplicity>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169364199515_845291_182' name='startDateMin' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169364152171_496868_160'>
<UML:StructuralFeature.multiplicity>
<UML:Multiplicity xmi.id='_9_5_1_8c50279_1169364239546_170391_195'>
<UML:Multiplicity.range>
<UML:MultiplicityRange xmi.id='_9_5_1_8c50279_1169364239546_683169_196' lower='0' upper='1'/>
</UML:Multiplicity.range>
</UML:Multiplicity>
</UML:StructuralFeature.multiplicity>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_195604_13'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::Date'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169364208640_522460_184' name='startDateMax' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169364152171_496868_160'>
<UML:StructuralFeature.multiplicity>
<UML:Multiplicity xmi.id='_9_5_1_8c50279_1169364239546_59154_198'>
<UML:Multiplicity.range>
<UML:MultiplicityRange xmi.id='_9_5_1_8c50279_1169364239546_560927_199' lower='0' upper='1'/>
</UML:Multiplicity.range>
</UML:Multiplicity>
</UML:StructuralFeature.multiplicity>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_195604_13'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::Date'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
</UML:Classifier.feature>
</UML:Class>
<UML:Class xmi.id='_9_5_1_8c50279_1169562456859_157459_687' name='UserDetailsVO' visibility='public' isRoot='false' isLeaf='false' isAbstract='false' isActive='false' generalization='_9_5_1_8c50279_1169562535046_945830_717'>
<UML:ModelElement.stereotype>
<UML:Stereotype href='andromda-profile-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119373197267_59537_10'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='org.andromda.profile::ValueObject'/>
</XMI.extension>
</UML:Stereotype>
</UML:ModelElement.stereotype>
<UML:Classifier.feature>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169562470406_823011_703' name='password' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169562456859_157459_687'>
<UML:Attribute.initialValue>
<UML:Expression xmi.id='_9_5_1_8c50279_1169562788046_795989_836'/>
</UML:Attribute.initialValue>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_364079_66'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::String'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169562477031_255224_705' name='email' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169562456859_157459_687'>
<UML:Attribute.initialValue>
<UML:Expression xmi.id='_9_5_1_8c50279_1169562788046_215926_837'/>
</UML:Attribute.initialValue>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_364079_66'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::String'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169562481953_212399_707' name='isActive' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169562456859_157459_687'>
<UML:Attribute.initialValue>
<UML:Expression xmi.id='_9_5_1_8c50279_1169562788046_655427_838'/>
</UML:Attribute.initialValue>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_736816_6'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::boolean'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169562489843_563027_709' name='creationDate' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169562456859_157459_687'>
<UML:Attribute.initialValue>
<UML:Expression xmi.id='_9_5_1_8c50279_1169562788046_874748_839'/>
</UML:Attribute.initialValue>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_195604_13'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::Date'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169562502531_38451_711' name='comment' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169562456859_157459_687'>
<UML:StructuralFeature.multiplicity>
<UML:Multiplicity xmi.id='_9_5_1_8c50279_1169562788046_134443_840'>
<UML:Multiplicity.range>
<UML:MultiplicityRange xmi.id='_9_5_1_8c50279_1169562788046_481615_841' lower='0' upper='1'/>
</UML:Multiplicity.range>
</UML:Multiplicity>
</UML:StructuralFeature.multiplicity>
<UML:Attribute.initialValue>
<UML:Expression xmi.id='_9_5_1_8c50279_1169562788046_900348_842'/>
</UML:Attribute.initialValue>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_364079_66'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::String'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169562512984_189574_713' name='roles' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169562456859_157459_687' type='_9_5_1_8c50279_1169562608640_540814_805'>
<UML:Attribute.initialValue>
<UML:Expression xmi.id='_9_5_1_8c50279_1169562788046_397077_843'/>
</UML:Attribute.initialValue>
</UML:Attribute>
</UML:Classifier.feature>
</UML:Class>
<UML:Generalization xmi.id='_9_5_1_8c50279_1169562535046_945830_717' child='_9_5_1_8c50279_1169562456859_157459_687' parent='_9_5_1_8c50279_1169285116546_935256_4'/>
<UML:Class xmi.id='_9_5_1_8c50279_1169562568156_910485_774' name='UserRoleVO' visibility='public' isRoot='false' isLeaf='false' isAbstract='false' isActive='false'>
<UML:ModelElement.stereotype>
<UML:Stereotype href='andromda-profile-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119373197267_59537_10'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='org.andromda.profile::ValueObject'/>
</XMI.extension>
</UML:Stereotype>
</UML:ModelElement.stereotype>
<UML:Classifier.feature>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169562581812_130339_790' name='id' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169562568156_910485_774'>
<UML:StructuralFeature.type>
<UML:Classifier href='andromda-profile-datatype-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119336925531_227130_59'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='datatype::Long'/>
</XMI.extension>
</UML:Classifier>
</UML:StructuralFeature.type>
</UML:Attribute>
<UML:Attribute xmi.id='_9_5_1_8c50279_1169562587046_819984_792' name='role' visibility='public' ownerScope='instance' changeability='changeable' targetScope='instance' ordering='unordered' owner='_9_5_1_8c50279_1169562568156_910485_774' type='_9_5_1_8c50279_1169561392937_952991_572'>
<UML:Attribute.initialValue>
<UML:Expression xmi.id='_9_5_1_8c50279_1169562788046_949192_844'/>
</UML:Attribute.initialValue>
</UML:Attribute>
</UML:Classifier.feature>
</UML:Class>
<UML:Class xmi.id='_9_5_1_8c50279_1169562608640_540814_805' name='UserRoleVO[]' visibility='public' isRoot='false' isLeaf='false' isAbstract='false' isActive='false'/>
</UML:Namespace.ownedElement>
</UML:Package>
<UML:Package xmi.id='_9_5_1_8c50279_1169285569687_156903_153' name='service' isRoot='false' isLeaf='false' isAbstract='false'>
<UML:Namespace.ownedElement>
<UML:Class xmi.id='_9_5_1_8c50279_1169285587500_873918_164' name='UserService' visibility='public' isRoot='false' isLeaf='false' isAbstract='false' isActive='false' clientDependency='_9_5_1_8c50279_1169288699328_180606_363'>
<UML:ModelElement.stereotype>
<UML:Stereotype href='andromda-profile-service-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119337557859_21792_59'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='org.andromda.profile::service::Service'/>
</XMI.extension>
</UML:Stereotype>
</UML:ModelElement.stereotype>
<UML:Classifier.feature>
<UML:Operation xmi.id='_9_5_1_8c50279_1169285605734_285967_181' name='getAllUsers' visibility='public' ownerScope='instance' isQuery='false' concurrency='sequential' isRoot='false' isLeaf='false' isAbstract='false' owner='_9_5_1_8c50279_1169285587500_873918_164'>
<UML:BehavioralFeature.parameter>
<UML:Parameter xmi.id='_9_5_1_8c50279_1169285668281_781419_183' kind='return' type='_9_5_1_8c50279_1169285311500_838087_119'/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
<UML:Operation xmi.id='_9_5_1_8c50279_1169607055218_374842_908' name='registerUser' visibility='public' ownerScope='instance' isQuery='false' concurrency='sequential' isRoot='false' isLeaf='false' isAbstract='false' owner='_9_5_1_8c50279_1169285587500_873918_164'>
<UML:BehavioralFeature.parameter>
<UML:Parameter xmi.id='_9_5_1_8c50279_1169607054031_566687_906' name='userDetailVO' kind='inout' type='_9_5_1_8c50279_1169562456859_157459_687'/>
<UML:Parameter xmi.id='_9_5_1_8c50279_1169607054031_231021_907' kind='return' type='_9_5_1_8c50279_1169562456859_157459_687'/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Dependency xmi.id='_9_5_1_8c50279_1169288699328_180606_363' client='_9_5_1_8c50279_1169285587500_873918_164' supplier='_9_5_1_8c50279_1169288267218_362608_214'/>
<UML:Class xmi.id='_9_5_1_8c50279_1169364265078_632331_210' name='TimeTrackingService' visibility='public' isRoot='false' isLeaf='false' isAbstract='false' isActive='false' clientDependency='_9_5_1_8c50279_1169395300312_487935_567'>
<UML:ModelElement.stereotype>
<UML:Stereotype href='andromda-profile-service-3.3-SNAPSHOT.xml.zip|_9_0_1fe00f9_1119337557859_21792_59'>
<XMI.extension xmi.extender='MagicDraw UML 9.5' xmi.extenderID='MagicDraw UML 9.5'>
<referentPath xmi.value='org.andromda.profile::service::Service'/>
</XMI.extension>
</UML:Stereotype>
</UML:ModelElement.stereotype>
<UML:Classifier.feature>
<UML:Operation xmi.id='_9_5_1_8c50279_1169364307531_927180_228' name='findTimecards' visibility='public' ownerScope='instance' isQuery='false' concurrency='sequential' isRoot='false' isLeaf='false' isAbstract='false' owner='_9_5_1_8c50279_1169364265078_632331_210'>
<UML:BehavioralFeature.parameter>
<UML:Parameter xmi.id='_9_5_1_8c50279_1169364306421_983235_226' name='criteria' kind='inout' type='_9_5_1_8c50279_1169364152171_496868_160'/>
<UML:Parameter xmi.id='_9_5_1_8c50279_1169364306421_864968_227' kind='return' type='_9_5_1_8c50279_1169364119234_263956_142'/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Dependency xmi.id='_9_5_1_8c50279_1169395300312_487935_567' client='_9_5_1_8c50279_1169364265078_632331_210' supplier='_9_5_1_8c50279_1169393103765_703156_231'/>
</UML:Namespace.ownedElement>
</UML:Package>
<UML:Package xmi.id='_9_5_1_8c50279_1169288239437_239811_203' name='domain' isRoot='false' isLeaf='false' isAbstract='false'>
<UML:Namespace.ownedElement>
<UML:Class xmi.id='_9_5_1_8c50279_1169288267218_362608_214' name='User' visibility='public' isRoot='false' isLeaf='false' isAbstract='false' isActive='false'>
<UML:ModelElement.clientDependency>
<UML:Dependenc...
[truncated message content] |
|
From: Vance K. <va...@us...> - 2007-01-24 04:32:58
|
User: vancek Date: 07/01/23 20:32:52 plugins/samples/timetracker-ejb3/web/src/main/properties - New directory |
|
From: Vance K. <va...@us...> - 2007-01-24 04:32:58
|
User: vancek Date: 07/01/23 20:32:51 plugins/samples/timetracker-ejb3/web/src/main/css - New directory |
|
From: Vance K. <va...@us...> - 2007-01-24 04:32:58
|
User: vancek Date: 07/01/23 20:32:51 plugins/samples/timetracker-ejb3/web/src/main/java/org/andromda - New directory |
|
From: Vance K. <va...@us...> - 2007-01-24 04:32:58
|
User: vancek Date: 07/01/23 20:32:50 plugins/samples/timetracker-ejb3/web - New directory |
|
From: Vance K. <va...@us...> - 2007-01-24 04:32:58
|
User: vancek Date: 07/01/23 20:32:49 plugins/samples/timetracker-ejb3/mda - New directory |
|
From: Vance K. <va...@us...> - 2007-01-24 04:32:58
|
User: vancek Date: 07/01/23 20:32:51 plugins/samples/timetracker-ejb3/web/src/main/java/org/andromda/timetracker - New directory |
|
From: Vance K. <va...@us...> - 2007-01-24 04:32:57
|
User: vancek Date: 07/01/23 20:32:49 plugins/samples/timetracker-ejb3/core/src/test/java/org/andromda - New directory |
|
From: Vance K. <va...@us...> - 2007-01-24 04:32:57
|
User: vancek Date: 07/01/23 20:32:49 plugins/samples/timetracker-ejb3/core/src/test/java/org/andromda/timetracker/service - New directory |
|
From: Vance K. <va...@us...> - 2007-01-24 04:32:57
|
User: vancek Date: 07/01/23 20:32:48 plugins/samples/timetracker-ejb3/core/src/main/java/org/andromda/timetracker/service - New directory |
|
From: Vance K. <va...@us...> - 2007-01-24 04:32:57
|
User: vancek Date: 07/01/23 20:32:52 plugins/samples/timetracker-ejb3/web/src/main/java/org/andromda/timetracker/web/timecardsearch - New directory |