You can try from camelContext there is a getApplicationContextClassLoader method you can try using.
On Mon, Jul 10, 2017 at 1:37 AM, Matthew Shaw <[email protected]> wrote: > Thanks Claus, I can't change the source system, so I have to consume the ejb > from osgi unfortunately. In the scenario below, I do have it working, > partially, as you say, I'm now battling classloader issues. Trawling the > posts I have read about setting the > Thread.currentThread().setClassContextLoader() to the bundle context, but > that does nothing to help me. > > Would I be correct in assuming that because I am loading the camel context > via a blueprint and apache aries that I would need to get a hold of that > classloader? I think my manifest looks pretty good below as I'm referencing > all the weblogic client stuff correctly through my imports. > > -----Original Message----- > From: Claus Ibsen [mailto:[email protected]] > Sent: Sunday, 9 July 2017 5:26 PM > To: [email protected] > Subject: Re: camel route to remote EJB using karaf blueprint > > Hi > > I think you are going on a path where nobody really goes - calling remote > EJBs (... from OSGi). > Then classloading is much more problematic to setup. You would need to > install the WebLogic EJB client and also make sure to have all the right > package imports in your application bundle etc. > > I really don't recommend using remote EJB calls, you end up with a tight > coupling on Java, Java serialization etc. Are you not able to use another > protocol in the communication to WebLogic? > > If you really must, then try first to get a non OSGi example / unit test etc > up and running so you at least know that this part works. > Then its "fighting" the OSGi classloading and get all that sorted. > > > > On Fri, Jul 7, 2017 at 3:51 AM, Matthew Shaw > <[email protected]> wrote: >> As an addendum, I think the issue maybe that using jndi and the weblogic >> initial context is outside the camel context, but the way I am invoking it. >> Which in turn, will be trying to load the same classes required again, >> through a completely separate class loader? >> >> -----Original Message----- >> From: Matthew Shaw [mailto:[email protected]] >> Sent: Friday, 7 July 2017 11:07 AM >> To: [email protected] >> Subject: camel route to remote EJB using karaf blueprint >> >> Hi All, >> >> I've been banging my head against the wall now for a week, trying to get a >> camel route going which consumes a remote service on an EJB2 container in >> weblogic 10.3. I keep getting class versioning issues between my client and >> the server.I have the exact same versions of the server jars in karaf as >> bundles and I import them through my manifest. My bundle installs ok into >> karaf with a state of "Active" and the camel routes start up. I'm a newbie >> in the osgi, camel world. >> >> I'm running camel 2.19.1 in apache karaf 4.1.1. >> >> My blueprint looks like this: >> >> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> >> xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0" >> xmlns:jaxws="http://cxf.apache.org/blueprint/jaxws" >> xmlns:cxf="http://cxf.apache.org/blueprint/core" >> xmlns:camel="http://camel.apache.org/schema/blueprint" >> xmlns:camelcxf="http://camel.apache.org/schema/blueprint/cxf" >> xsi:schemaLocation=" >> http://www.osgi.org/xmlns/blueprint/v1.0.0 >> https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd >> http://cxf.apache.org/blueprint/jaxws >> http://cxf.apache.org/schemas/blueprint/jaxws.xsd >> http://cxf.apache.org/blueprint/core >> http://cxf.apache.org/schemas/blueprint/core.xsd >> "> >> >> <bean id="eTimesheetMediationRoutes" >> class="au.gov.qld.ambulance.services.legacywrapper.eTimesheetMediation >> "/> >> >> <bean id="eTimesheetEJB2Bean" >> class="au.gov.qld.ambulance.services.legacywrapper.eTimesheetEJB2Bean" >> /> >> >> <camelContext id="camel" xmlns="http://camel.apache.org/schema/blueprint"> >> <routeBuilder ref="eTimesheetMediationRoutes"/> >> </camelContext> >> >> </blueprint> >> >> My manifest is as follows: >> >> Manifest-Version: 1.0 >> Bnd-LastModified: 1499385820689 >> Build-Jdk: 1.8.0_131 >> Built-By: mshaw >> Bundle-Blueprint: OSGI-INF/blueprint/camel-context.xml >> Bundle-ManifestVersion: 2 >> Bundle-Name: legacywrapper >> Bundle-SymbolicName: au.gov.qld.ambulance.tams.legacywrapper >> Bundle-Version: 0.0.1.SNAPSHOT >> Created-By: Apache Maven Bundle Plugin >> Export-Package: >> au.gov.qld.ambulance.services.legacywrapper;uses:="au.go >> v.qld.des.aftimesheet.dto,javax.naming,org.apache.camel.builder";versi >> o >> n="0.0.1",au.gov.qld.ambulance.services.legacywrapper.domain;uses:="ja >> v ax.xml.bind,javax.xml.bind.annotation";version="0.0.1" >> Import-Package: >> au.gov.qld.des.aftimesheet.dto;version="0.0.0",au.gov.ql >> d.des.aftimesheet.ejb;version="0.0.0",au.gov.qld.des.aftimesheet.excep >> t >> ion;version="0.0.0",com.fasterxml.jackson.annotation;version="[2.8,3)" >> , >> com.fasterxml.jackson.databind;version="[2.8,3)",javax.ejb,javax.namin >> g >> ,javax.rmi,javax.xml.bind,javax.xml.bind.annotation,javax.xml.namespac >> e >> ,org.apache.camel;version="[2.19,3)",org.apache.camel.builder;version=" >> [2.19,3)",org.apache.camel.model;version="[2.19,3)",org.apache.camel.m >> o >> del.rest;version="[2.19,3)",org.osgi.service.blueprint;version="[1.0.0 >> , >> 2.0.0)",org.restlet.data,org.slf4j;version="[1.7,2)",au.gov.qld.des.af >> t >> imesheet.officer.dto;version="0.0.0",weblogic.jndi,javax.rmi.CORBA,org. >> omg.CORBA,org.omg.CORBA.portable,org.omg.CORBA_2_3,org.omg.CORBA_2_3.p >> o >> rtable >> Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))" >> Tool: Bnd-3.3.0.201609221906 >> >> My route builder impl class: >> >> >> public class eTimesheetMediation extends RouteBuilder { >> >> Logger logger = >> LoggerFactory.getLogger(eTimesheetMediation.class); >> >> @BeanInject("eTimesheetEJB2Bean") >> eTimesheetEJB2Bean eTimesheetEJB2Bean; >> >> @Override >> public void configure() throws Exception { >> >> >> restConfiguration().component("restlet").host("localhost").port(8095). >> bindingMode(RestBindingMode.json); >> >> rest("/services/legacywrapper/etimesheet") >> .post() >> .consumes(MediaType.APPLICATION_JSON.getName()) >> .type(ETimesheetRequest.class) >> .to("direct:extractTimesheetId"); >> >> from("direct:extractTimesheetId") >> .process(new Processor() { >> @Override >> public void process(Exchange exchange) throws Exception { >> ETimesheetRequest eTimesheetRequest = >> exchange.getIn().getBody(ETimesheetRequest.class); >> >> exchange.getIn().setBody(eTimesheetRequest.getTimesheetId()); >> } >> }) >> .to("direct:etimesheetGet"); >> >> >> from("direct:etimesheetGet") >> .doTry() >> .bean(eTimesheetEJB2Bean, "mediate") >> .log(LoggingLevel.INFO,"Timesheet successfully >> transformed") >> .convertBodyTo(String.class, "UTF-8") >> .doCatch(Exception.class) >> .log(LoggingLevel.ERROR ,exceptionMessage().toString()) >> .throwException(new >> RuntimeException(exceptionMessage().toString())) >> .endDoTry(); >> >> >> } >> } >> >> >> My ejb client code / bean: >> >> >> public class eTimesheetEJB2Bean { >> >> public String mediate(Integer eTimesheetId) { >> >> Hashtable env = new Hashtable(); >> env.put(Context.INITIAL_CONTEXT_FACTORY, >> "weblogic.jndi.WLInitialContextFactory"); >> env.put(Context.PROVIDER_URL, "t3://poldesaps02:5013"); >> env.put(Context.SECURITY_PRINCIPAL, "testuser4"); >> env.put(Context.SECURITY_CREDENTIALS, "passw0rd"); >> >> Context ic = null; >> >> try { >> ic = new InitialContext(env); >> }catch (NamingException e) { >> throw new RuntimeException(e); >> } >> >> return marshallTimesheetToJSON(ic ,getTimesheet(ic, >> eTimesheetId)); >> >> } >> >> >> >> public TimesheetTransferObject getTimesheet (Context ic, Integer >> eTimesheetId) { >> Object homeObject = null; >> >> try { >> homeObject = ic.lookup(TimesheetSessionFacadeHome.JNDI_NAME); >> } catch (NamingException e) { >> throw new RuntimeException(e); >> } >> >> TimesheetSessionFacadeHome home = (TimesheetSessionFacadeHome) >> PortableRemoteObject.narrow(homeObject, >> TimesheetSessionFacadeHome.class); >> >> TimesheetSessionFacade remote = null; >> try { >> remote = (TimesheetSessionFacade) >> PortableRemoteObject.narrow(home.create(), TimesheetSessionFacade.class); >> TimesheetTransferObject result = >> remote.getTimesheet(eTimesheetId); >> // TimesheetTransferObject result = new TimesheetTransferObject(); >> >> return result; >> } catch (ClassCastException e) { >> throw new RuntimeException(e); >> } catch (RemoteException e) { >> throw new RuntimeException(e); >> } catch (CreateException e) { >> throw new RuntimeException(e); >> }catch (AFTimesheetException e) { >> throw new RuntimeException(e); >> } >> } >> >> private String marshallTimesheet (Context ic, >> TimesheetTransferObject timesheet) { >> >> String xml = ""; >> ByteArrayOutputStream baos = new ByteArrayOutputStream(); >> >> try { >> JAXBContext jc = JAXBContext.newInstance(String.class, >> TimesheetTransferObject.class); >> JAXBIntrospector introspector = jc.createJAXBIntrospector(); >> Marshaller marshaller = jc.createMarshaller(); >> marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); >> marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); >> if (null == introspector.getElementName(timesheet)) { >> JAXBElement jaxbElement = new JAXBElement(new >> QName("http://services.ambulance.qld.gov.au/data/services/corporate/hr >> i/timeandattendance", "Timesheet", "ta"), timesheet.getClass(), >> timesheet); >> >> marshaller.marshal(jaxbElement, baos); >> } else { >> marshaller.marshal(timesheet, baos); >> } >> xml += baos.toString(); >> } catch (JAXBException e) { >> throw new RuntimeException(e); >> } >> return xml; >> } >> >> private String marshallTimesheetToJSON (Context ic, >> TimesheetTransferObject timesheet) { >> >> try { >> ObjectMapper objectMapper = new ObjectMapper(); >> >> objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); >> objectMapper.addMixIn(MealBrokenTransferObject.class, >> MealBrokenTransferObjectMixIn.class); >> objectMapper.addMixIn(ShiftTransferObject.class, >> ShiftTransferObjectMixIn.class); >> objectMapper.addMixIn(TimesheetTransferObject.class, >> TimesheetTransferObjectMixIn.class); >> objectMapper.addMixIn(CallOutTransferObject.class, >> CalloutTransferObjectMixIn.class); >> objectMapper.addMixIn(CallOutCaseTransferObject.class, >> CallOutCaseTransferObjectMixIn.class); >> objectMapper.addMixIn(AllowanceTransferObject.class, >> AllowanceTransferObjectMixIn.class); >> return objectMapper.writeValueAsString(timesheet); >> } catch (Exception e) { >> throw new RuntimeException(e); >> } >> >> } >> >> } >> >> >> Any help / insight would be really appreciated. >> >> Cheers, >> Matt. >> >> >> >> >> >> This email, including any attachments sent with it, is confidential and for >> the sole use of the intended recipient(s). This confidentiality is not >> waived or lost, if you receive it and you are not the intended recipient(s), >> or if it is transmitted/received in error. >> >> Any unauthorised use, alteration, disclosure, distribution or review of this >> email is strictly prohibited. The information contained in this email, >> including any attachment sent with it, may be subject to a statutory duty of >> confidentiality if it relates to health service matters. >> >> If you are not the intended recipient(s), or if you have received this email >> in error, you are asked to immediately notify the sender. You should also >> delete this email, and any copies, from your computer system network and >> destroy any hard copies produced. >> >> If not an intended recipient of this email, you must not copy, distribute or >> take any action(s) that relies on it; any form of disclosure, modification, >> distribution and/or publication of this email is also prohibited. >> >> Although the Queensland Ambulance Service takes all reasonable steps to >> ensure this email does not contain malicious software, the Queensland >> Ambulance Service does not accept responsibility for the consequences if any >> person's computer inadvertently suffers any disruption to services, loss of >> information, harm or is infected with a virus, other malicious computer >> programme or code that may occur as a consequence of receiving this email. >> >> Unless stated otherwise, this email represents only the views of the sender >> and not the views of the Queensland Government. >> >> ********************************************************************** >> ********** >> >> The content presented in this publication is distributed by the Queensland >> Government as an information source only. The State of Queensland makes no >> statements, representations or warranties about the accuracy, completeness >> or reliability of any information contained in this publication. The State >> of Queensland disclaims all responsibility and all liability (including >> without limitation for liability in negligence) for all expenses, losses, >> damages and costs you might incur as a result of the information being >> inaccurate or incomplete in any way, and for any reason reliance was placed >> on such information. >> This email, including any attachments sent with it, is confidential and for >> the sole use of the intended recipient(s). This confidentiality is not >> waived or lost, if you receive it and you are not the intended recipient(s), >> or if it is transmitted/received in error. >> >> Any unauthorised use, alteration, disclosure, distribution or review of this >> email is strictly prohibited. The information contained in this email, >> including any attachment sent with it, may be subject to a statutory duty of >> confidentiality if it relates to health service matters. >> >> If you are not the intended recipient(s), or if you have received this email >> in error, you are asked to immediately notify the sender. You should also >> delete this email, and any copies, from your computer system network and >> destroy any hard copies produced. >> >> If not an intended recipient of this email, you must not copy, distribute or >> take any action(s) that relies on it; any form of disclosure, modification, >> distribution and/or publication of this email is also prohibited. >> >> Although the Queensland Ambulance Service takes all reasonable steps to >> ensure this email does not contain malicious software, the Queensland >> Ambulance Service does not accept responsibility for the consequences if any >> person's computer inadvertently suffers any disruption to services, loss of >> information, harm or is infected with a virus, other malicious computer >> programme or code that may occur as a consequence of receiving this email. >> >> Unless stated otherwise, this email represents only the views of the sender >> and not the views of the Queensland Government. >> >> ********************************************************************** >> ********** >> >> The content presented in this publication is distributed by the Queensland >> Government as an information source only. The State of Queensland makes no >> statements, representations or warranties about the accuracy, completeness >> or reliability of any information contained in this publication. The State >> of Queensland disclaims all responsibility and all liability (including >> without limitation for liability in negligence) for all expenses, losses, >> damages and costs you might incur as a result of the information being >> inaccurate or incomplete in any way, and for any reason reliance was placed >> on such information. >> > > > > -- > Claus Ibsen > ----------------- > http://davsclaus.com @davsclaus > Camel in Action 2: https://www.manning.com/ibsen2 > > This email, including any attachments sent with it, is confidential and for > the sole use of the intended recipient(s). This confidentiality is not waived > or lost, if you receive it and you are not the intended recipient(s), or if > it is transmitted/received in error. > > Any unauthorised use, alteration, disclosure, distribution or review of this > email is strictly prohibited. The information contained in this email, > including any attachment sent with it, may be subject to a statutory duty of > confidentiality if it relates to health service matters. > > If you are not the intended recipient(s), or if you have received this email > in error, you are asked to immediately notify the sender. You should also > delete this email, and any copies, from your computer system network and > destroy any hard copies produced. > > If not an intended recipient of this email, you must not copy, distribute or > take any action(s) that relies on it; any form of disclosure, modification, > distribution and/or publication of this email is also prohibited. > > Although the Queensland Ambulance Service takes all reasonable steps to > ensure this email does not contain malicious software, the Queensland > Ambulance Service does not accept responsibility for the consequences if any > person's computer inadvertently suffers any disruption to services, loss of > information, harm or is infected with a virus, other malicious computer > programme or code that may occur as a consequence of receiving this email. > > Unless stated otherwise, this email represents only the views of the sender > and not the views of the Queensland Government. > > ******************************************************************************** > > The content presented in this publication is distributed by the Queensland > Government as an information source only. The State of Queensland makes no > statements, representations or warranties about the accuracy, completeness or > reliability of any information contained in this publication. The State of > Queensland disclaims all responsibility and all liability (including without > limitation for liability in negligence) for all expenses, losses, damages and > costs you might incur as a result of the information being inaccurate or > incomplete in any way, and for any reason reliance was placed on such > information. -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2
