tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Blevins <david.blev...@visi.com>
Subject Re: Eclipse Multiple Projects and Missing persistence.xml
Date Thu, 12 Jun 2008 00:57:14 GMT
Hi Chad,

This looks like the exact same issue that Juan Manuel is facing.

I'm going to try and cook up a solution for this and put up some  
snapshot binaries that you both can try out.  I'll likely be next week  
before I can get to this, but hopefully it will only take a couple  
days to get something together.

The crux of the issue is that perfectly valid approach to testing is  
to treat the entire classpath and all modules in it as essentially one  
big ear, the things like persistence units declared in other jars will  
still be considered part of the same "application".  Currently we  
treat every module we find as a separate application which is really  
not the right technique for some people.

-David

On Jun 10, 2008, at 1:30 PM, chadws wrote:

>
>
> David Blevins wrote:
>>
>>
>> On Mar 30, 2008, at 8:29 PM, Chad and Doria Skinner wrote:
>>> I have a project I am working on and we have separated our business
>>> model from our business logic by placing them into different
>>> projects in eclipse. These projects are both jars that are placed in
>>> our ear file. When I try to run a test on one of our session beans
>>> in the EJB project I keep getting errors that it is missing the
>>> persistence.xml file that is in our BusinessLogic project. The code
>>> is compiling properly, but the tests will not run until I copy the
>>> persistence.xml into the EJB project. Does anyone know if having
>>> separate jars for the SessionBeans and entities is supported?
>>
>> I think there might be an issue with the module getting picked up if
>> it only contains a peristence.xml and nothing else.  An alternate
>> technique to moving the persistence.xml into the BusinessLogic  
>> project
>> is to add an empty ejb-jar.xml file to the BusinessModel project
>> containing only "<ejb-jar/>"
>>
>> That should tide you over till we can get this fixed.
>>
>> -David
>>
>>
>
> I am getting back to working on this and still have the same  
> problem. My
> projects are configured as:
>
> websiteBusinessLogic - contains Entity Beans
> websiteEJB - contains my EJBs
>
> I have ejb-jar.xml files in the META-INF directories of both  
> projects and my
> my persistence.xml file contains the following:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence version="1.0"
> 	xmlns="http://java.sun.com/xml/ns/persistence"
> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> 	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
> 	<persistence-unit name="website" transaction-type="JTA">
> 		<jta-data-source>jdbc/websitedb</jta-data-source>
> 		<non-jta-data-source>jdbc/unmanagedWebsitedb</non-jta-data-source>
>
> 		<class>us.ks.k12.topeka.website.model.Alert</class>
> 		<class>us.ks.k12.topeka.website.model.Announcement</class>
> 		<class>us.ks.k12.topeka.website.model.Entry</class>
> 		<class>us.ks.k12.topeka.website.model.Job</class>
> 		<class>us.ks.k12.topeka.website.model.Location</class>
> 		<class>us.ks.k12.topeka.website.model.NewsEntry</class>
> 		<class>us.ks.k12.topeka.website.model.Preference</class>
> 		<class>us.ks.k12.topeka.website.model.Profile</class>
> 		<class>us.ks.k12.topeka.website.model.Tag</class>
> 		<class>us.ks.k12.topeka.website.model.TagGroup</class>
> 		<class>us.ks.k12.topeka.website.model.TagSearch</class>
>
> 		<properties>
> 		</properties>
> 	</persistence-unit>
> </persistence>
>
> my jUnit test:
>
> 	@Before
> 	public void setup() {
> 		try {
> 			Logger.getRootLogger().setLevel(Level.DEBUG);
> 			
>    		Properties p = new Properties();
>    		p.put(Context.INITIAL_CONTEXT_FACTORY,
> "org.apache.openejb.client.LocalInitialContextFactory");
>
>    		p.put("openejb.deployments.classpath.include",
> ".*seamTest/WebsiteBusinessModel/.*");
>   		
>    		p.put("jdbc/websitedb",             "new://Resource? 
> type=DataSource");
>    		p.put("jdbc/websitedb.JdbcUrl",
> "jdbc:mysql://localhost:3306/website");
>    		p.put("jdbc/websitedb.JdbcDriver",  "com.mysql.jdbc.Driver");
>    		p.put("jdbc/websitedb.UserName",    "webuser");
>    		p.put("jdbc/websitedb.Password",    "webpass");
>    		
>    		p.put("jdbc/unmanagedWebsitedb",
> "new://Resource?type=DataSource");
>    		p.put("jdbc/unmanagedWebsitedb.JdbcUrl",
> "jdbc:mysql://localhost:3306/website");
>    		p.put("jdbc/unmanagedWebsitedb.JdbcDriver",   
> "com.mysql.jdbc.Driver");
>    		p.put("jdbc/unmanagedWebsitedb.UserName",    "webuser");
>    		p.put("jdbc/unmanagedWebsitedb.Password",    "webpass");
>    		p.put("jdbc/unmanagedWebsitedb.JtaManaged",  "false");
>
>    		p.put("jdbc/profileDB",             "new://Resource? 
> type=DataSource");
>    		p.put("jdbc/profileDB.JdbcUrl",
> "jdbc:mysql://localhost:3306/website");
>    		p.put("jdbc/profileDB.JdbcDriver",  "com.mysql.jdbc.Driver");
>    		p.put("jdbc/profileDB.UserName",    "webuser");
>    		p.put("jdbc/profileDB.Password",    "webpass");
>    		p.put("jdbc/profileDB.JtaManaged",  "false");
>
>    		p.put("myStatefulContainer", "new://Container?type=STATEFUL");
>    		p.put("myStatefulContainer.PoolSize", "5");
>    		p.put("myStatefulContainer.BulkPassivate", "1");
>
>    		p.put("myStatelessContainer", "new://Container?type=STATELESS");
>    		p.put("myStatelessContainer.PoolSize", "5");
>    		p.put("myStatelessContainer.BulkPassivate", "1");
>
>    		context = new InitialContext(p);
> 		} catch(NamingException e) {
> 			e.printStackTrace();
> 			Assert.fail(e.getMessage());
> 		}
> 	}
> 	
> 	
> 	@Test
> 	public void testProfileSynchronizer() throws Exception {
> 		ProfileSynchronizer lProfileSynchronizer = (ProfileSynchronizer)
> context.lookup("ProfileSynchronizerLocal");
> 		lProfileSynchronizer.updateProfiles();
> 	}
>
> But when I run the test I get the following error:
>
> Apache OpenEJB 3.0    build: 20080408-04:13
> http://openejb.apache.org/
> INFO - openejb.home =
> /home/cskinne1/.eclipse/europa/workspaces/seamTest/WebsiteEJB
> INFO - openejb.base =
> /home/cskinne1/.eclipse/europa/workspaces/seamTest/WebsiteEJB
> INFO - Configuring Service(id=Default Security Service,
> type=SecurityService, provider-id=Default Security Service)
> INFO - Configuring Service(id=Default Transaction Manager,
> type=TransactionManager, provider-id=Default Transaction Manager)
> INFO - Configuring Service(id=jdbc/profileDB, type=Resource,
> provider-id=Default JDBC Database)
> INFO - Configuring Service(id=jdbc/websitedb, type=Resource,
> provider-id=Default JDBC Database)
> INFO - Configuring Service(id=jdbc/unmanagedWebsitedb, type=Resource,
> provider-id=Default JDBC Database)
> INFO - Configuring Service(id=Default JDK 1.3 ProxyFactory,
> type=ProxyFactory, provider-id=Default JDK 1.3 ProxyFactory)
> INFO - Configuring Service(id=myStatelessContainer, type=Container,
> provider-id=Default Stateless Container)
> INFO - Configuring Service(id=myStatefulContainer, type=Container,
> provider-id=Default Stateful Container)
> INFO - Found EjbModule in classpath:
> /home/cskinne1/.eclipse/europa/workspaces/seamTest/ 
> WebsiteBusinessModel/build/classes
> INFO - Found EjbModule in classpath:
> /home/cskinne1/.m2/repository/org/jboss/seam/jboss-seam/2.0.1.GA/ 
> jboss-seam-2.0.1.GA.jar
> INFO - Found EjbModule in classpath:
> /home/cskinne1/.eclipse/europa/workspaces/seamTest/WebsiteEJB/build/ 
> classes
> INFO - Configuring app:
> /home/cskinne1/.eclipse/europa/workspaces/seamTest/ 
> WebsiteBusinessModel/build/classes
> INFO - Configuring PersistenceUnit(name=website)
> INFO - Loaded Module:
> /home/cskinne1/.eclipse/europa/workspaces/seamTest/ 
> WebsiteBusinessModel/build/classes
> INFO - Configuring app:
> /home/cskinne1/.m2/repository/org/jboss/seam/jboss-seam/2.0.1.GA/ 
> jboss-seam-2.0.1.GA.jar
> INFO - Loaded Module:
> /home/cskinne1/.m2/repository/org/jboss/seam/jboss-seam/2.0.1.GA/ 
> jboss-seam-2.0.1.GA.jar
> INFO - Configuring app:
> /home/cskinne1/.eclipse/europa/workspaces/seamTest/WebsiteEJB/build/ 
> classes
> INFO - Auto-linking resource-ref 'termsDTA' in bean  
> ProfileSynchronizer to
> Resource(id=jdbc/profileDB)
> ERROR - FAIL ... JobManager:	Missing required persistence.xml for
> @PersistenceContext ref "entityManager" to unit "website"
> ERROR - FAIL ... ProfileManager:	Missing required persistence.xml for
> @PersistenceContext ref "entityManager" to unit "website"
> ERROR - FAIL ... ProfileSynchronizer:	Missing required  
> persistence.xml for
> @PersistenceContext ref "entityManager" to unit "website"
> ERROR - FAIL ... LocationManager:	Missing required persistence.xml for
> @PersistenceContext ref "entityManager" to unit "website"
> ERROR - FAIL ... AlertManager:	Missing required persistence.xml for
> @PersistenceContext ref "entityManager" to unit "website"
> ERROR - FAIL ... NewsEntryManager:	Missing required persistence.xml  
> for
> @PersistenceContext ref "entityManager" to unit "website"
> ERROR - FAIL ... CalendarEntryManager:	Missing required  
> persistence.xml for
> @PersistenceContext ref "entityManager" to unit "website"
> ERROR - FAIL ... PreferenceManager:	Missing required persistence.xml  
> for
> @PersistenceContext ref "entityManager" to unit "website"
> ERROR - FAIL ... TagManager:	Missing required persistence.xml for
> @PersistenceContext ref "entityManager" to unit "website"
> ERROR - FAIL ... TagGroupManager:	Missing required persistence.xml for
> @PersistenceContext ref "entityManager" to unit "website"
> ERROR - FAIL ... AnnouncementManager:	Missing required  
> persistence.xml for
> @PersistenceContext ref "entityManager" to unit "website"
> ERROR - FAIL ... TagSearchManager:	Missing required persistence.xml  
> for
> @PersistenceContext ref "entityManager" to unit  "website"
> ERROR - Invalid
> EjbModule(path=/home/cskinne1/.eclipse/europa/workspaces/seamTest/ 
> WebsiteEJB/build/classes)
> INFO - Set the 'openejb.validation.output.level' system property to  
> VERBOSE
> for increased validation details.
> WARN - Jar not loaded.
> /home/cskinne1/.eclipse/europa/workspaces/seamTest/WebsiteEJB/build/ 
> classes.
> Module failed validation.
> AppModule(path=/home/cskinne1/.eclipse/europa/workspaces/seamTest/ 
> WebsiteEJB/build/classes)
> WARN - Property "BulkPassivate" not supported by  
> "myStatelessContainer"
> INFO - Assembling app:
> /home/cskinne1/.eclipse/europa/workspaces/seamTest/ 
> WebsiteBusinessModel/build/classes
> INFO - PersistenceUnit(name=website,
> provider=org.apache.openjpa.persistence.PersistenceProviderImpl)
> ERROR - JAVA AGENT NOT INSTALLED. The JPA Persistence Provider  
> requested
> installation of a ClassFileTransformer which requires a JavaAgent.   
> See
> http://openejb.apache.org/3.0/javaagent.html
> INFO - Deployed
> Application(path=/home/cskinne1/.eclipse/europa/workspaces/seamTest/ 
> WebsiteBusinessModel/build/classes)
> INFO - Assembling app:
> /home/cskinne1/.m2/repository/org/jboss/seam/jboss-seam/2.0.1.GA/ 
> jboss-seam-2.0.1.GA.jar
> INFO - Jndi(name=TimerServiceDispatcherLocal) -->
> Ejb(deployment-id=TimerServiceDispatcher)
> INFO - Jndi(name=EjbSynchronizationsLocal) -->
> Ejb(deployment-id=EjbSynchronizations)
> INFO - Created Ejb(deployment-id=TimerServiceDispatcher,
> ejb-name=TimerServiceDispatcher, container=myStatelessContainer)
> INFO - Created Ejb(deployment-id=EjbSynchronizations,
> ejb-name=EjbSynchronizations, container=myStatefulContainer)
> INFO - Deployed
> Application(path=/home/cskinne1/.m2/repository/org/jboss/seam/jboss- 
> seam/2.0.1.GA/jboss-seam-2.0.1.GA.jar)
>
> If I set the system property - 
> Dopenejb.validation.output.level=VERBOSE I get
> a series of the following error (one per entity).
>
> ERROR - FAIL ... JobManager:	A persistence unit must be defined via
> META-INF/persistence.xml to satisfy @PersistenceContext ref  
> "entityManager"
> to unit "website".  An example of a suitable persistence.xml might
> be:<persistence xmlns="http://java.sun.com/xml/ns/persistence"
> version="1.0"><persistence-unit
> name="website"><jta-data-source>java:openejb/Resource/myDataSource</ 
> jta-data-source><non-jta-data-source>java:openejb/Resource/ 
> myUnmanagedDataSource</non-jta-data-source><properties><property
> name="openjpa.jdbc.SynchronizeMappings"
> value="buildSchema(ForeignKeys=true)"/></properties></persistence- 
> unit></persistence>
>
> One of the things that concerns me is the error:
>
> WARN - Jar not loaded.
> /home/cskinne1/.eclipse/europa/workspaces/seamTest/WebsiteEJB/build/ 
> classes.
> Module failed validation.
> AppModule(path=/home/cskinne1/.eclipse/europa/workspaces/seamTest/ 
> WebsiteEJB/build/classes)
>
> Does anyone know what I am missing so that I can get this to load my
> entities from one jar and the session beans from a seperate jar.
>
> I don't understand why my jar would not validate and the error does  
> not tell
> me. Are there any other flags that I can set to figure out why the  
> jar is
> not being loaded?
>
> Also, do I need to put anything in my ejb-jar.xml file to register  
> the local
> interfaces for my beans (at this point I don't have any remote beans).
> -- 
> View this message in context: http://www.nabble.com/Eclipse-Multiple-Projects-and-Missing-persistence.xml-tp16391627p17764028.html
> Sent from the OpenEJB User mailing list archive at Nabble.com.
>
>


Mime
View raw message