Hi, Thanks for responding. No, we don't have a bundle which acts like a proxy. The proxy - as far as I can guess - is a Blueprint thing (see http://aries.apache.org/modules/blueprint.html under section "Reference Dynamism").
In the deploy folder, we have a file called jndi.xml, and this is a fragment of its contents: <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0" > <cm:property-placeholder id="database.properties" persistent-id="our.database.connection.properties"/> <bean id="datasourceMain" class="org.apache.commons.dbcp2.managed.BasicManagedDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="${connection-string}"/> <property name="username" value="${connection-username}"/> <property name="password" value="${connection-password}"/> <property name="maxTotal" value="20"/> <property name="maxIdle" value="10"/> <property name="maxWaitMillis" value="5000"/> <property name="minEvictableIdleTimeMillis" value="2880000"/> <property name="testWhileIdle" value="true"/> <property name="validationQuery" value="select 1"/> <property name="transactionManager" ref="jtaTransactionManager"/> </bean> <service id="serviceMade" interface="javax.sql.DataSource" ref="datasourceOurApp"> <service-properties> <entry key="osgi.jndi.service.name" value="MainDB"/> </service-properties> </service> Then we have a maven compiled bundle, with blueprint.xml initialization in the OSGI-INF.blueprint folder (resources), with this fragment: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint-2.16.1.xsd "> <bean id="ourlogicBean" class="oprg.unimportant.SomeClass"> <property name="dataSource" ref="dataSourceRef"/> </bean> <reference id="dataSourceRef" interface="javax.sql.DataSource" filter="(osgi.jndi.service.name=MainDB)"/> </blueprint> (please forgive spelling mistakes, I'm cutting/pasting this on the fly, my issue is not in syntax) I have witnessed two cases when NoClassDefFound is thrown: 1. When the method "setDataSource" in SomeClass does a call to the database; 2. When the method "setDataSource" in SomeClass only registers the value in a backing field, but SomeClass is a (Camel) RouteBuilder and the DB is accessed from the configure() method; I have set a breakpoint in case 1 above and the value received is non-null, so I guess this is the blueprint proxy mentioned above. Hope this explains it a bit better. Regards, Frank Van: Morgan Hautman [via ServiceMix] [mailto:[email protected]] Verzonden: woensdag 11 mei 2016 9:48 Aan: Joppe, Frank Onderwerp: Re: Issues with data-access at bundle initialization time Hi Frank, If I understand it correctly, you have multiple bundles where some are camel routes and 1 of them is a proxy bundle, right? If so, you can make a Karaf feature and use start-levels. So your proxy-bundle that is required can startup prior to the others, so it will be initialized when the other startup. But in all cases don't revert to Spring-DM. Regards, Morgan 2016-05-11 9:35 GMT+02:00 frankjoppe <[hidden email]</user/SendEmail.jtp?type=node&node=5723675&i=0>>: > Hi, > > We have an application, and upgraded from smx4.5.3 to smx6.1.0. We also > upgraded from dbcp to dbcp2 and pool2. One thing I noticed after this > upgrade, was that bundle start-up and shutdown was very, very slow. So I > looked around with Google and found that Spring-DM is deprecated and will > be > replaced with Blueprint. I also replaced Spring-DM to Blueprint for all the > bundles, and now they are much faster in start-up and shutdown. > > However Blueprint has some differences. For example, We've made Camel > routebuilders and in the configre() method, we get some configuration from > the Database. Or we have beans with a set-ter, which we give the database > connection, and we also do some init-from-the-DB in this setter method. > > We get exceptions. The MySql Drive class cannot be found. The bean using > the > DB connection (ie the configure() method in our Camel route) gets some > "proxy", while the other side of the proxy has not been initialized yet. So > packages fail when SMX starts. And if you manually restart the bundle, it > works. > > My analysis is that the DB call is done too early and that not everything > has been initialized yet. > > How to solve this? > > The DB connection is initialized in a blueprint xml, and added to jdni. > > What I already tried is: > * The bundle blueprint has a "<reference " to the DB connection, and I used > a reference-listener - sometimes works, sometimes not; > * Added a dependency in "import-packages" in the pom.xml, on pool2, under > the maven-bundle-plugin section, coincidently found this, I've seen good > results but not sure if it is 100% waterproof; > * Everywhere when possible, used lazy-inits, this works 100% but cannot be > applied for the Camel Routebuilder configure() method (I don't know when > this is called); > > Things I did not try are: > * Put configuration in local files - for this release unfeasible, for > future > an option; > * Revert to Spring-DM, I still consider this as an option, but I have seen > its behavior in my machine only, and I don't know if it has the same > problems as Blueprint, still an option.. but Blueprint has my preference. > > Please Help > > > > -- > View this message in context: > http://servicemix.396122.n5.nabble.com/Issues-with-data-access-at-bundle-initialization-time-tp5723674.html > Sent from the ServiceMix - User mailing list archive at Nabble.com. > ________________________________ If you reply to this email, your message will be added to the discussion below: http://servicemix.396122.n5.nabble.com/Issues-with-data-access-at-bundle-initialization-time-tp5723674p5723675.html To unsubscribe from Issues with data-access at bundle initialization time, click here<http://servicemix.396122.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5723674&code=ZnJhbmsuam9wcGVAa3BuLmNvbXw1NzIzNjc0fC0xOTg5ODA3ODQ0>. NAML<http://servicemix.396122.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> -- View this message in context: http://servicemix.396122.n5.nabble.com/Issues-with-data-access-at-bundle-initialization-time-tp5723674p5723676.html Sent from the ServiceMix - User mailing list archive at Nabble.com.
