Hey there...

Well, I resolved this by creating a secondary dao and dao implementation
(hibernate based) which kind of surprises me.  Both managers and daos
operate on the same domain model class and I really only needed the manager
interface and impl but I couldn't figure out what was blowing up.  When I
created the secondary dao and added that in, no sweat, it just worked...

Matt, do you know why this is?  I'm kind of surprised... For example, *both*
of my daos and mgr's that operate on the single domain model class are
probably sharing the same Generic manager and dao superclass, right?  I'd
love to have a clearer understanding of why this was a problem without the
daos, if you're in the know...!!

BTW, I love your ideas for the future of appfuse.  I took a split second
look at grails and a longer, client mandated look at seam and frankly, I
couldn't sell many of our clients on either of those, compared to the Java
EE standard that many of our (admittedly pretty corporate) clients are
looking for.  I also am wondering (& have been for a while) about the future
of web UIs as currently implemented, SOFEA makes a lot of sense so GWT and /
or flex (I'd prefer both I think) sound good to me...

--j 



jackalista wrote:
> 
> Hi,
> 
> I want to create a secondary manager interface (i/f) and implementation
> for an existing DAO and (hibernate) domain model class.  I've been using
> the dao and model class a lot so am not having trouble with them but when
> I tried to create a 2nd manager i/f & impl, I got strange errors when
> running the manager test.  The error I'm seeing doesn't seem to make
> sense, it's complaining about a class cast that shouldn't be a problem. 
> The reason I want to do this is because I want a 2nd-ary service class to
> use in a mule message flow and I don't want that flow invoked when the
> primary service class is in use, just when the 2nd-ary service class is
> being used.  I *could* create a 2nd-ary dao i/f and impl too but that
> seems to be wasteful so I am trying to do it this way but perhaps I'm
> seeing some auto-wiring problems with what I'm trying to do?
> 
> I'm using the Order.java domain class I've got which I've been using
> successfully without issue and also the OrderDao.java /
> OrderDaoHibernate.java.  I have an Ordermanager.java and
> OrderManagerImpl.java, which I've exposed as web services and which I've
> tested and used a fair amount so that part works.  I have done some more
> annotation to make the service amenable to mule and CXF, which is doc'ed
> here:
> 
> 
> http://n4.nabble.com/integrating-enterprise-mule-appfuse-2-02-tt575702.html#a575702
> post about integrating mule and appfuse 2.02 
> 
> I then created an AggregatingOrderManager.java and an
> AggregatingOrderManagerImpl.java and declared the manager in my
> applicationContext.xml (I'm creating my own managers, daos etc. rather
> than using the Generic or Universal ones).  I injected the orderDao from
> above into this new manager so I've now got 2 managers that use the same
> dao which doesn't seem like it would be a problem.  Here's the
> declaration, I'll show the orderDao, orderManager, and then the new
> aggregatoingOrdermanager:
> 
> <bean id="orderDao"
> class="org.jackalista.integration.dao.hibernate.OrderDaoHibernate"> 
>   <property name="sessionFactory" ref="sessionFactory"/>
> </bean>
> 
> <bean id="orderManager"
> class="org.jackalista.integration.service.impl.OrderManagerImpl">    
>   <constructor-arg ref="orderDao"/>
> </bean>
> 
> <bean id="aggregatingOrderManager"
> class="org.jackalista.integration.service.impl.AggregatingOrderManagerImpl">  
>   
>   <constructor-arg ref="orderDao"/>
> </bean>
> 
> 
> The AggregatingManager.java looks like this (I removed the imports for
> clarity):
> 
> 
> @WebService
> public interface AggregatingOrderManager extends GenericManager<Order,
> Long> {
>   /**
>    * pass through to save an order
>    */
>   @WebResult(name="saveOrderResult")
>   public Order placeOrder( @WebParam(name="order") Order order);
> }
> 
> 
> 
> The manager implementation looks like the following, which uses the
> original orderDao:
> 
> @WebService(serviceName = "AggregatingOrderService", endpointInterface =
> "org.jackalista.integration.service.AggregatingOrderManager")
> public class AggregatingOrderManagerImpl extends GenericManagerImpl<Order,
> Long> implements AggregatingOrderManager {
> 
>   OrderDao orderDao;
> 
>   public AggregatingOrderManagerImpl(OrderDao orderDao) {
>     super(orderDao);
>     this.orderDao = orderDao;
>   }
> 
>   public Order placeOrder(Order order) {
>     log.debug( "received order: "+order );
>     //return super.save(order);
>     return this.orderDao.save(order);
>   }
> }
> 
> 
> The Manager test looks like this:
> 
>     @Test
>     public void testPlaceOrder() {
>         log.debug("testing placeOrder...");
> 
>         final Order order = new Order();
>         order.setName( "test order" );
>         order.setDescription( "this is a test order" );
>         order.setCreatedBy( "testadmin" );
>         order.setModifiedBy( "testadmin" );
>         order.setQuantity( new Long( 1 ) );
>         // enter all required fields
>         
>         // set expected behavior on dao
>         context.checking(new Expectations() {{
>             one(dao).save(with(same(order)));
>         }});
> 
>         manager.placeOrder(order);
>     }
> 
> 
> When I run this manager test, I'm getting a class cast exception, which I
> don't understand, it looks like the return value from the (generic manager
> superclass) "save" method is an java.lang.Object and can't be cast to an
> Order, which is what the the OrderDaoHibernate that extends it is trying
> to return.  The line specified in the exception trace says the error is
> happning at this line in the manager implemenbtation class where the
> generic method save is invoked and it's result (which is usually an Order
> but is somehow a java.lang.Object here) is returned as the returnb value
> for the method call:
> 
> return this.orderDao.save(order);
> 
> 
> Here's the exception trace, does anybody know why this is happening?
> 
> -------------------------------------------------------
>  T E S T S
> -------------------------------------------------------
> Running
> org.jackalista.integration.service.impl.AggregatingOrderManagerImplTest
> [integration] DEBUG [main]
> AggregatingOrderManagerImplTest.testPlaceOrder(33) | testing placeOrder...
> [integration] DEBUG [main] AggregatingOrderManagerImpl.placeOrder(29) |
> received order: org.jackalista.integration.model.or...@15093f1[
>   name=test order
>   description=this is a test order
>   quantity=1
>   createdBy=testadmin
>   createdDate=Tue Nov 10 09:28:25 PST 2009
>   modifiedBy=testadmin
>   modifiedDate=Tue Nov 10 09:28:25 PST 2009
> ]
> Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.313 sec
> <<< FAILURE!
> testPlaceOrder(org.jackalista.integration.service.impl.AggregatingOrderManagerImplTest)
>  
> Time elapsed: 0.296 sec  <<< ERROR!
> java.lang.ClassCastException: java.lang.Object cannot be cast to
> org.jackalista.integration.model.Order
>       at
> org.jackalista.integration.service.impl.AggregatingOrderManagerImpl.placeOrder(AggregatingOrderManagerImpl.java:31)
>       at
> org.jackalista.integration.service.impl.AggregatingOrderManagerImplTest.testPlaceOrder(AggregatingOrderManagerImplTest.java:48)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
>       at org.jmock.integration.junit4.JMock$1.invoke(JMock.java:36)
>       at
> org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
>       at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
>       at
> org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
>       at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
>       at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
>       at
> org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
>       at
> org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
>       at
> org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
>       at
> org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
>       at
> org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
>       at
> org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
>       at
> org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
>       at
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
>       at
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
>       at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at
> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
>       at
> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
> 
> 
> Results :
> 
> Tests in error: 
>  
> testPlaceOrder(org.jackalista.integration.service.impl.AggregatingOrderManagerImplTest)
> 
> 
> 

-- 
View this message in context: 
http://n4.nabble.com/two-separate-managers-with-same-DAO-and-domaon-model-class-tp585488p585651.html
Sent from the AppFuse - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@appfuse.dev.java.net
For additional commands, e-mail: users-h...@appfuse.dev.java.net

Reply via email to