I use Glassfish and Apache Felix. Can you tell me how to rewrite this
bundle activator.

package org.DX_57.osgi.SH_27.impl;

import javax.sql.DataSource;
import java.sql.SQLException;

import java.util.Properties;
import org.DX_57.osgi.SH_27.api.SessionHandle;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.Filter;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
import org.osgi.util.tracker.ServiceTracker;


public class SessionHandleApp implements BundleActivator {

    public static final String DSNAME = "jdbc/Oracle";
    public ServiceTracker st;

    @Override
    public void start(final BundleContext bc) throws Exception {
        debug("Activator started");


        Filter filter = bc.createFilter("(&" + "(" + Constants.OBJECTCLASS
                + "=" + DataSource.class.getName() + ")" + "(jndi-name="
                + DSNAME + ")" + ")");
        st = new ServiceTracker(bc, filter, null) {

            @Override
            public Object addingService(ServiceReference reference) {
                DataSource ds = (DataSource) bc.getService(reference);
                try {
                    debug(ds.getConnection().toString());

                SessionHandle sh = new SessionHandleImpl();
                                sh.setDataSource(ds);
                    ServiceRegistration registerService =
bc.registerService(SessionHandle.class.getName(), sh, new Properties());

                } catch (SQLException e) {
                }

                return super.addingService(reference);
            }

            @Override
            public void removedService(ServiceReference reference,
                    Object service) {
                super.removedService(reference, service);
            }

        };
        st.open();
    }

    public void stop(BundleContext bc) throws Exception {
        boolean ungetService =
bc.ungetService(bc.getServiceReference(SessionHandle.class.getName()));
        st.close();
    }

    private void debug(String msg) {
        System.out.println("JDBCBundleActivator: " + msg);
    }

}


On Sat, Mar 17, 2012 at 8:21 PM, Christian Schneider <
[email protected]> wrote:

> You can do the same I do with blueprint with plain java.
>
> Write a bundle with an  Activator that initializes the datasource and
> offers it as a service. The problem here is only that you would have the db
> datasource class hardwired. You can get all other attributes from the
> config admin service to make them configurable.
>
> The other solution is to include blueprint and the felix fileinstall
> service in your osgi framework. In that case even the blueprint way could
> work outside Apache Karaf.
>
> What kind of server are you using btw?
>
> Christian
>
>
> Am 17.03.2012 12:06, schrieb Peter Penzov:
>
>> I agree that the legacy approach is not a good solution. Is there any
>> other
>> solution without using Apache Karaf for creating datasource service for
>> OSGI bundle?
>>
>> Best wishes
>> Peter
>>
>> On Fri, Mar 16, 2012 at 12:44 PM, Christian Schneider<
>> [email protected]>  wrote:
>>
>>  The best practice is to configure a DataSource outside of the bundle and
>>> offer it as a OSGi service. So the user bundle should just reference the
>>> datasource and use it. The legacy aproach with using a database driver
>>> classname to configure jdbc does not work well in OSGi.
>>>
>>> I have a  tutorial that shows how to do this with Apache Karaf. This
>>> should also be possible with pure felix just perhaps a little more
>>> effort.
>>> http://www.liquid-reality.de/****x/LYBk<http://www.liquid-reality.de/**x/LYBk>
>>> <http://www.liquid-**reality.de/x/LYBk<http://www.liquid-reality.de/x/LYBk>
>>> >
>>>
>>>
>>> Christian
>>>
>>>
>>> Am 16.03.2012 10:10, schrieb elMateo:
>>>
>>>  Hello all,
>>>
>>>> I need to connect a bundle to a MySQL data base and I don't know how I
>>>> can
>>>> do it.
>>>>
>>>> I know that I can't do the same that in a normal Java application, but I
>>>> don't find the correct form to do this.
>>>>
>>>> Could anybody help me?
>>>>
>>>> Thanks in advance, Jesus
>>>>
>>>>
>>>>  --
>>> Christian Schneider
>>> http://www.liquid-reality.de
>>>
>>> Open Source Architect
>>> Talend Application Integration Division http://www.talend.com
>>>
>>>
>>> ------------------------------****----------------------------**
>>> --**---------
>>> To unsubscribe, e-mail: 
>>> users-unsubscribe@felix.**apac**he.org<http://apache.org>
>>> <users-unsubscribe@**felix.apache.org<[email protected]>
>>> >
>>>
>>> For additional commands, e-mail: [email protected]
>>>
>>>
>>>
>
> --
>
> Christian Schneider
> http://www.liquid-reality.de
>
> Open Source Architect
> Talend Application Integration Division http://www.talend.com
>
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: 
> users-unsubscribe@felix.**apache.org<[email protected]>
> For additional commands, e-mail: [email protected]
>
>

Reply via email to