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

Reply via email to