Is weblogic jax-ws generated client thread safe

Hi
I want to use JAX-WS webservice on weblogic 10.3.
Is there any best practices on how to generate the client stub ? Are the client stubs generated by weblogic thread-safe or is there any pool to implement.
I've read on some old forum posts that with older versions of weblogic client stub was not thread safe when using SSL : is it always the case ?
Regards
Sébastien

Hello Ravish,
Can you please confirm the following:
1) Check the Admin>Web Services Utilization page in CRMOD to see if the request is received
2) Do you receive any response from CRMOD on the client side and if so, please post the SOAP response
3) Have you tried other objects and had any issues with them?
Thanks,
Sean

Similar Messages

  • JAX WS generated client for Contact WSDL V2.0 is not working

    Hi,
    I have generated stubs for Contact WSDL v2.0 using Metro JAX WS tool. I tried to use the generated stubs but was failed.
         Contact_Service service = new Contact_Service();
         Contact contService = service.getContact();
         BindingProvider bp = (BindingProvider) contService;
         Map<String, Object> context = bp.getRequestContext();
         context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, sessionEndPoint);
    The execution of service.getContact() statement completes in approx 15-20 mins with the below exception stack trace:
         Thread [main] (Suspended (exception InvocationTargetException))     
              GeneratedConstructorAccessor22.newInstance(Object[]) line: not available     
              DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27     
              Constructor<T>.newInstance(Object...) line: 513     
              PropertyFactory.create(JAXBContextImpl, RuntimePropertyInfo) line: 113     
              ClassBeanInfoImpl<BeanT>.<init>(JAXBContextImpl, RuntimeClassInfo) line: 164     
              JAXBContextImpl.getOrCreate(RuntimeClassInfo) line: 479     
              JAXBContextImpl.<init>(JAXBContextImpl$JAXBContextBuilder) line: 305     
              JAXBContextImpl$JAXBContextBuilder.build() line: 1100     
              ContextFactory.createContext(Class[], Collection<TypeReference>, Map<Class,Class>, String, boolean, RuntimeAnnotationReader, boolean, boolean, boolean) line: 143     
              JAXBRIContext.newInstance(Class[], Collection<TypeReference>, Map<Class,Class>, String, boolean, RuntimeAnnotationReader) line: 95     
              JAXBContextFactory$1.createJAXBContext(SEIModel, List<Class>, List<TypeReference>) line: 97     
              AbstractSEIModelImpl$1.run() line: 148     
              AbstractSEIModelImpl$1.run() line: 140     
              AccessController.doPrivileged(PrivilegedExceptionAction<T>) line: not available [native method]     
              SOAPSEIModel(AbstractSEIModelImpl).createJAXBContext() line: 140     
              SOAPSEIModel(AbstractSEIModelImpl).postProcess() line: 83     
              RuntimeModeler.buildRuntimeModel() line: 244     
              WSServiceDelegate.createSEIPortInfo(QName, Class, WebServiceFeature...) line: 687     
              WSServiceDelegate.addSEI(QName, Class, WebServiceFeature...) line: 675     
              WSServiceDelegate.getPort(WSEndpointReference, QName, Class<T>, WebServiceFeature...) line: 330     
              WSServiceDelegate.getPort(QName, Class<T>, WebServiceFeature...) line: 313     
              WSServiceDelegate.getPort(QName, Class<T>) line: 295     
              Contact_Service(Service).getPort(QName, Class<T>) line: 99     
              Contact_Service.getContact() line: 72     
              Main.main(String[]) line: 25     
    I have also generated stubs for Contact WSDL v1 using JAX-WS and it was working fine.
    I am wondering why JAX-WS stubs for Contact WSDL V2 is not working. I have also generated stubs for both v1 and v2 WSDL using Axis tool, and it was working fine.
    Can anyone suggest us the workaround/solution to this issue.
    Thanks for your patients and time.
    Regards
    Ravish

    Hello Ravish,
    Can you please confirm the following:
    1) Check the Admin>Web Services Utilization page in CRMOD to see if the request is received
    2) Do you receive any response from CRMOD on the client side and if so, please post the SOAP response
    3) Have you tried other objects and had any issues with them?
    Thanks,
    Sean

  • Web service client proxy thread safe?

    Is the jax-ws web service client proxy and port objects thread safe in Weblogic 10.3.4?
    Been searching through the docs but can't find any info on this.

    I have searched and it seems that with cxf it's safe to do something like this.
    Nobody knows if this is safe using metro?

  • Weblogic 8.1 :: Getting error while generating Client java class from WSDL

    Hi,
    For SOAP webservice, I am using ant script to generate java client from WSDL but getting below error. Please inform if any suggestion to resolve this.
    Also let me know if any other alternative to generate client java code.
    Ant script:
    ===========
    <project name="project" default="generateClientJar">
         <property file="build.property">
         </property>
         <taskdef name="clientgen" classname="weblogic.ant.taskdefs.webservices.clientgen.ClientGenTask">
              <classpath>
                   <fileset dir="${build_lib.dir}" includes="*.jar" />
              </classpath>
         </taskdef>
         <path id="compile_path">
              <pathelement location="C:/jar/wls-api.jar" />
              <pathelement location="${build_lib.dir}/weblogic.jar" />
              <pathelement location="C:/jar/webserviceclient+ssl.jar" />
              <pathelement location="D:/Java_Src_10.1.0/nextgen_arch/wlpatch/webservices.jar" />
         </path>
         <target name="generateClientJar" depends="generate.client">
    <clientgen wsdl="${wsdl.file}" classpathref="compile_path"
    serviceName="${service.name}"
    packageName= "${client.pkg}"
    clientJar="${ws.client.name}" />
         </target>
         <target name="generate.client" description="Generate web-services client">
              <property name="wsdl.file" value="${sms.wsdl.file}"/>
              <property name="client.pkg" value="${sms.client.pkg}"/>
              <property name="ws.client.name" value="${ws.sms.name}"/>
              <property name="service.name" value="${sms.service.name}"/>
         </target>
    </project>
    build.property file
    ===========
    base=C:/SMS
    lib=E:/jar_path
    sms.wsdl.file=${base}/SMS.wsdl
    sms.client.pkg=com.db.dbdi.gtbportal.sms.client     
    ws.sms.name=${lib}/ws_SmsService_client.jar
    sms.service.name=SMSService
    build_lib.dir = E:/jar_path
    Error log:
    ================
    Buildfile: D:\Java_Src_10.1.0\ant\build_weblogic8.xml
    generate.client:
    generateClientJar:
    [clientgen] Generating client jar for C:/SMS/SMS.wsdl ...
    [clientgen] C:\Documents and Settings\amitkumar.patel\Local Settings\Temp\ws_SmsService_client.jar699419996\com\db\dbdi\gtbportal\sms\client\SMSPort.java:15: parameters is already defined in sendSMS(com.db.portal.webservices.sms.SendSMS,com.db.portal.webservices.sms.holders.SendSMSResponseHolder)
    [clientgen] public void sendSMS(com.db.portal.webservices.sms.SendSMS parameters, com.db.portal.webservices.sms.holders.SendSMSResponseHolder parameters)
    [clientgen] ^
    [clientgen] C:\Documents and Settings\amitkumar.patel\Local Settings\Temp\ws_SmsService_client.jar699419996\com\db\dbdi\gtbportal\sms\client\SMSPort.java:21: parameters is already defined in getStatus(com.db.portal.webservices.sms.GetStatus,com.db.portal.webservices.sms.holders.GetStatusResponseHolder)
    [clientgen] public void getStatus(com.db.portal.webservices.sms.GetStatus parameters, com.db.portal.webservices.sms.holders.GetStatusResponseHolder parameters)
    [clientgen] ^
    [clientgen] C:\Documents and Settings\amitkumar.patel\Local Settings\Temp\ws_SmsService_client.jar699419996\com\db\dbdi\gtbportal\sms\client\SMSPort_Stub.java:20: parameters is already defined in sendSMS(com.db.portal.webservices.sms.SendSMS,com.db.portal.webservices.sms.holders.SendSMSResponseHolder)
    [clientgen] public void sendSMS(com.db.portal.webservices.sms.SendSMS parameters, com.db.portal.webservices.sms.holders.SendSMSResponseHolder parameters)
    [clientgen] ^
    [clientgen] C:\Documents and Settings\amitkumar.patel\Local Settings\Temp\ws_SmsService_client.jar699419996\com\db\dbdi\gtbportal\sms\client\SMSPort_Stub.java:39: parameters is already defined in getStatus(com.db.portal.webservices.sms.GetStatus,com.db.portal.webservices.sms.holders.GetStatusResponseHolder)
    [clientgen] public void getStatus(com.db.portal.webservices.sms.GetStatus parameters, com.db.portal.webservices.sms.holders.GetStatusResponseHolder parameters)
    [clientgen] ^
    [clientgen] Note: C:\Documents and Settings\amitkumar.patel\Local Settings\Temp\ws_SmsService_client.jar699419996\com\db\dbdi\gtbportal\sms\client\SMSService.java uses or overrides a deprecated API.
    [clientgen] Note: Recompile with -deprecation for details.
    [clientgen] 4 errors
    *[*clientgen] java.io.IOException: Compiler failed executable.exec**
    [clientgen] at weblogic.utils.compiler.CompilerInvoker.compileMaybeExit(CompilerInvoker.java:470)
    [clientgen] at weblogic.utils.compiler.CompilerInvoker.compile(CompilerInvoker.java:328)
    [clientgen] at weblogic.utils.compiler.CompilerInvoker.compile(CompilerInvoker.java:336)
    [clientgen] at weblogic.webservice.tools.build.internal.CompilerHelper.compileFiles(CompilerHelper.java:80)
    [clientgen] at weblogic.webservice.tools.build.internal.ClientGenImpl.compileStubs(ClientGenImpl.java:627)
    [clientgen] at weblogic.webservice.tools.build.internal.ClientGenImpl.generateStub(ClientGenImpl.java:572)
    [clientgen] at weblogic.webservice.tools.build.internal.ClientGenImpl.doClientGenFromWsdl(ClientGenImpl.java:409)
    [clientgen] at weblogic.webservice.tools.build.internal.ClientGenImpl.run(ClientGenImpl.java:340)
    [clientgen] at weblogic.ant.taskdefs.webservices.clientgen.ClientGenTask.doClientGen(ClientGenTask.java:351)
    [clientgen] at weblogic.ant.taskdefs.webservices.clientgen.ClientGenTask.execute(ClientGenTask.java:208)
    [clientgen] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
    [clientgen] at org.apache.tools.ant.Task.perform(Task.java:364)
    [clientgen] at org.apache.tools.ant.Target.execute(Target.java:341)
    [clientgen] at org.apache.tools.ant.Target.performTasks(Target.java:369)
    [clientgen] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
    [clientgen] at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
    [clientgen] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
    [clientgen] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
    [clientgen] at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
    [clientgen] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
    [clientgen] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)
    BUILD FAILED
    D:\Java_Src_10.1.0\ant\build_weblogic8.xml:34: weblogic.webservice.tools.build.WSBuildException: Compiler failed executable.exec - with nested exception:
    [java.io.IOException: Compiler failed executable.exec]
    Total time: 1 minute 12 seconds

    Hi,
    Can u Please post the WSDL..here. I remember long back i resolved this kind of issue...when i was getting "*parameters is already defined in - - -*" while using ClientGen.
    Once i will get the WSDL may be i can recall it...
    If u have any problem in Posting the WSDL..in Forums .. then let me know I will send my E-Mail Address...
    As far as i remember ..it usually happens when we Run ClientGen task of WLS81 ON the WebService/WSDL generated by WebLogic 9.x or Above. Please let me know if this is the Case with you as well... . I remember there is a Patch for it...for WLS8 ClientGen task...I dont remember the Patch Number Exactly.
    Just For testing:
    Just Use WLS9.x ClientGen task On the Same WSDL
    <taskdef name="clientgen" classname="weblogic.wsee.tools.anttasks.ClientGenTask" />
    I am sure you will not see this issue... because the issue is there only with WLS8 Clientgen...
    Thanks
    Jay SenSharma
    http://jaysensharma.wordpress.com (WebLogic Wonders Are Here)
    Edited by: Jay SenSharma on Jan 8, 2010 4:32 PM
    Edited by: Jay SenSharma on Jan 8, 2010 4:34 PM

  • JAX-WS Dispatch client deployed in weblogic 10.3.0 sends empty namespace

    We have a weird issue.
    Currently in the production environment we have the below application deployed
    1.     WebService1.war
    2.     WebApp1.war
    3.     WebApp2.war
    Webapp1.war and WebApp2.war invokes WebService1.war and there is no issue in production.
    We have another new webservice2.war component that is going to production soon is deployed in dev and QA environment. After deploying WebService2.war in dev and QA, WebApp1.war started sending empty namespace in the request to Webservice1.war but WebApp2.war which also uses the same web webservice method is sending the proper request. This is how request from WebApp1.war looks like (For security reason I have not given the entire request):
    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header/><env:Body><GetDetails xmlns="Test"><Info xmlns=""></Info></GetDetails></env:Body></env:Envelope>
    In the above request xmlns is empty and that is an issue because at the service layer the Info object is null and it is throwing NullPointerException.
    Additional Details:
    1.All the above mentioned applications are deployed in Weblogic 10.3.0. WebService1.war was implemented using JAX-WS and created in Bottom Up fashion. WebService2.war is also implemented using JAX-WS and created using wsdl (Top Down webservice).
    WebApp1.war uses JAX-WS dispatch client. And there is no issue when the client is tested as a standalone client from our local machine even when WebService2.war is deployed. WebApp2.war uses stubs created using com.sun.tools.ws.ant.WsImport to invoke the webservice. And there is no issue no matter WebService2.war is deployed or not.
    We dont know how the new webservice2 component can cause webapp1 to send empty namespace in the request to webservice1
    Please let me know if you need any other details. And I would really appreciate your inputs.
    Edited by: user8115570 on Feb 2, 2012 8:01 PM

    Child element should be added like this at the client side.
    SOAPElement message = payload.addChildElement("Info","",targetNameSpace);

  • Jax-ws ws client with saml 1.1 sender vouches policy

    Hi,
    In wls 10.3 I defined a SAML source site , now I want to use the sender voucher policy on a webservice. So far so good.
    Now I want to generate a jax-ws proxy client, but there are no sample how to use this policy in java, only some wlst examples.
    Is there some more information how to do this.
    thanks Edwin

    hi
    This is not an answer to your question but a question since you have created a SAML Source Site in wls 10.3.
    Have you been able to use SAML Authenication from a weblogic client to web-service on different domain ?
    I am not able get this work ?
    I am done the following
    SAML relying party on SAML Credential Mapper on domain1
    with
    target url =endpoint of webservice at domain2
    and asserting Party on SAML Identity Asserter
    with target url= relative url of the web service.
    At Source Site , I saw that wls is not attaching any security information in the SOAP header .
    Can someone Help me with Configuration .
    The end goal is to access a secure web-service
    Thanks
    Sanyam

  • Thread-Safe BC4J Application

    Hello,
    I have an BC4J-based application, based on BC4J9.0.2. I'm considering to upgrade my BC4J library to upper version to make my application more thread-safe.
    How can I make thread-safe application using BC4J? Is there any specific Rule?
    Thank you.

    Hi,
    Its hard to define a single rule since it depends upon how each application is using threads. I have included some thoughts about the most common scenarios for web clients below:
    The BC4J client wizards (datatags, struts, JClient) will help you generate threadsafe applications. The general rule when writing a web client is to ensure that each "user", as represented by an HttpSession instance, has their own ApplicationModule instance. Using the ApplicationModule datatag or the BC4J/Struts framework will guarantee this.
    Beyond this it may also be necessary to coordinate multiple concurrent requests from a single client (imagine a user pounding on the browser refresh button). One approach for solving this problem is to synchronize requests on some sort of session context. The ApplicationModule tag supports a latching mode (see the lock attribute) which performs this by synchronizing access to the SessionCookie (cached in session, used to acquire ApplicationModule instance). Support for latching will also be available in Struts in the 9.0.3.3 and later timeframe.
    Hope this helps,

  • Weblogic 9.2 webservice client getting ClassCastException XmlTokenImpl

    Hi,
    I have written a webservice using the JAX-WS notation and Weblogic 9.2 MP3 libraries. I generated the server using jwsc and the client using clientgen. The server is working fine. But whenever I used the generated client stubs, I am getting this error:
    java.lang.ExceptionInInitializerError
         at weblogic.wsee.ws.init.WsDeploymentChain.newClientChain(WsDeploymentChain.java:24)
         at weblogic.wsee.ws.WsFactory.callClientListeners(WsFactory.java:108)
         at weblogic.wsee.ws.WsFactory.createClientService(WsFactory.java:46)
         at weblogic.wsee.jaxrpc.ServiceImpl.init(ServiceImpl.java:143)
         at weblogic.wsee.jaxrpc.ServiceImpl.<init>(ServiceImpl.java:111)
         at sdo.client.SDOService_Impl.<init>(SDOService_Impl.java:21)
         at sdo.client.SDOService_Impl.<init>(SDOService_Impl.java:17)
    Caused by: java.lang.ClassCastException: com.bea.xbean.values.XmlTokenImpl
         at weblogic.wsee.ws.init.WsConfigFactory.getDeploymentListenerConfig(WsConfigFactory.java:133)
         at weblogic.wsee.ws.init.WsConfigFactory.load(WsConfigFactory.java:93)
         at weblogic.wsee.ws.init.WsConfigFactory.newInstance(WsConfigFactory.java:45)
         at weblogic.wsee.ws.init.WsConfigFactory.newInstance(WsConfigFactory.java:34)
         at weblogic.wsee.ws.init.WsConfigManager.<clinit>(WsConfigManager.java:8)
         ... 54 more
    I spent lots of time debugging this and I found that this exception was generated when weblogic/xbean is trying to parse the listener-class in wsee-config.xml:
    <wsee:listener-class>weblogic.wsee.policy.deployment.ClientPolicyDeploymentListener</wsee:listener-class>
    For some reason, this got converted to an XmlTokenImpl object and the code was trying to cast it to com.sun.java.xml.ns.j2Ee.FullyQualifiedClassType. I don't know why it wasn't converted to the right class. But I noticed that the wseeConfig.xsd has this:
    <import namespace="http://java.sun.com/xml/ns/j2ee" schemaLocation="../../../../j2ee/descriptor/schemas/j2ee14/j2ee_1_4.xsd"/>
    Could it be that this "../../../../j2ee/descriptor/schemas/j2ee14/j2ee_1_4.xsd" is causing some issue?
    I had checked, double checked and triple checked my classpath and the jars I am using. I am using the weblogic.jar, xbean.jar, weblogic-container-binding.jar all from the Weblogic 9.2 MP3 server installation.
    Anyone has any idea on how to solve this? I am very stuck!

    Yes. I am using the 9.2 webservices. This is a new webservice I'm creating. The ant build.xml file to generate it is like this:
    <jwsc srcdir="${SRCDIR}/src" destdir="${EXPDIR}/webservice"
    tempdir="${WRKDIR}/webservice"
    verbose="on" debug="on"
    enableAsyncService="false"
    classpathref="our.custom.classpath" keepGenerated="true">
    <jws file="sdo/webservice/impl/SDOWSImpl.java"
    contextPath="SDO" name="SDOService">
    <WLHttpTransport contextPath="SDO"
    serviceUri="SDOService"
    portName="SDOService"/>
    </jws>
    </jwsc>
    The our.custom.classpath is as follows:
    <path id="our.custom.classpath">
    <pathelement location="${EXPTOP}/log4j/1.29/lib/log4j.jar"/>
    <pathelement location="${EXPTOP}/weblogic/9.23/lib/apache_xbean.jar"/>
    <pathelement location="${EXPTOP}/weblogic/9.23/lib/xbean.jar"/>
    <pathelement location="${EXPTOP}/weblogic/9.23/lib/weblogic.jar"/>
    <pathelement location="${EXPTOP}/weblogic/9.23/lib/wsse.jar"/>
    </path>
    I have to include xbean.jar here because if I didn't, I got "java.lang.NoClassDefFoundError: com/bea/xml/XmlException" during the ant build.
    How do I make sure I use the 9.2 style xbeans?
    thanks!

  • SSRS - Is there a multi thread safe way of displaying information from a DataSet in a Report Header?

     In order to dynamically display data in the Report Header based in the current record of the Dataset, we started using Shared Variables, we initially used ReportItems!SomeTextbox.Value, but we noticed that when SomeTextbox was not rendered in the body
    (usually because a comment section grow to occupy most of the page if not more than one page), then the ReportItem printed a blank/null value.
    So, a method was defined in the Code section of the report that would set the value to the shared variable:
    public shared Params as String
    public shared Function SetValues(Param as String ) as String
    Params = Param
    Return Params 
    End Function
    Which would be called in the detail section of the tablix, then in the header a textbox would hold the following expression:
    =Code.Params
    This worked beautifully since, it now didn't mattered that the body section didn't had the SetValues call, the variable persited and the Header displayed the correct value. Our problem now is that when the report is being called in different threads with
    different data, the variable being shared/static gets modified by all the reports being run at the same time. 
    So far I've tried several things:
    - The variables need to be shared, otherwise the value set in the Body can't be seen by the header.
    - Using Hashtables behaves exactly like the ReportItem option.
    - Using a C# DLL with non static variables to take care of this, didn't work because apparently when the DLL is being called by the Body generates a different instance of the DLL than when it's called from the header.
    So is there a way to deal with this issue in a multi thread safe way?
    Thanks in advance!
     

    Hi Angel,
    Per my understanding that you want to dynamic display the group data in the report header, you have set page break based on the group, so when click to the next page, the report hearder will change according to the value in the group, when you are using
    the shared variables you got the multiple thread safe problem, right?
    I have tested on my local environment and can reproduce the issue, according to the multiple safe problem the better way is to use the harshtable behaves in the custom code,  you have mentioned that you have tryied touse the harshtable but finally got
    the same result as using the ReportItem!TextBox.Value, the problem can be cuased by the logic of the code that not works fine.
    Please reference to the custom code below which works fine and can get all the expect value display on every page:
    Shared ht As System.Collections.Hashtable = New System.Collections.Hashtable
    Public Function SetGroupHeader( ByVal group As Object _
    ,ByRef groupName As String _
    ,ByRef userID As String) As String
    Dim key As String = groupName & userID
    If Not group Is Nothing Then
    Dim g As String = CType(group, String)
    If Not (ht.ContainsKey(key)) Then
    ' must be the first pass so set the current group to group
    ht.Add(key, g)
    Else
    If Not (ht(key).Equals(g)) Then
    ht(key) = g
    End If
    End If
    End If
    Return ht(key)
    End Function
    Using this exprssion in the textbox of the reportheader:
    =Code.SetGroupHeader(ReportItems!Language.Value,"GroupName", User!UserID)
    Links belowe about the hashtable and the mutiple threads safe problem for your reference:
    http://stackoverflow.com/questions/2067537/ssrs-code-shared-variables-and-simultaneous-report-execution
    http://sqlserverbiblog.wordpress.com/2011/10/10/using-custom-code-functions-in-reporting-services-reports/
    If you still have any problem, please feel free to ask.
    Regards
    Vicky Liu

  • Is the Illustrator SDK thread-safe?

    After searching this forum and the Illustrator SDK documentation, I can't find any references to a discussion about threading issues using the Illustrator C++ SDK. There is only a reference in some header files as to whether menu text is threaded, without any explanation.
    I take this to mean that probably the Illustrator SDK is not "thread-safe" (i.e., it is not safe to make API calls from arbitrary threads; you should only call the API from the thread that calls into your plug-in). Does anyone know this to be the case, or not?
    If it is the case, the normal way I'd write a plug-in to respond to requests from other applications for drawing services would be through a mutex-protected queue. In other words, when Illustrator calls the plug-in at application startup time, the plug-in could set up a mutually exclusive lock (a mutex), start a thread that could respond to requests from other applications, and request periodic idle processing time from the application. When such a request arrived from another application at an arbitrary time, the thread could respond by locking the queue, adding a request to the queue for drawing services in some format that the plug-in would define, and unlocking the queue. The next time the application called the plugin with an idle event, the queue could be locked, pulled from, and unlocked. Whatever request had been pulled could then be serviced with Illustrator API calls. Does anyone know whether that is a workable strategy for Illustrator?
    I assume it probably is, because that seems to be the way the ScriptingSupport.aip plug-in works. I did a simple test with three instances of a Visual Basic generated EXE file. All three were able to make overlapping requests to Illustrator, and each request was worked upon in turn, with intermediate results from each request arriving in turn. This was a simple test to add some "Hello, World" text and export some jpegs,
    repeatedly.
    Any advice would be greatly appreciated!
    Glenn Picher
    Dirigo Multimedia, Inc.
    [email protected]

    Zac Lam wrote:
    The Memory Suite does pull from a specific memory pool that is set based on the user-specified Memory settings in the Preferences.  If you use standard OS calls, then you could end up allocating memory beyond the user-specified settings, whereas using the Memory Suite will help you stick to the Memory settings in the Preferences.
    When you get back NULL when allocating memory, are you hitting the upper boundaries of your memory usage?  Are you getting any error code returned from the function calls themselves?
    I am not hitting the upper memory bounds - I have several customers that have 10's of Gb free.
    There is no error return code from the ->NewPtr() call.
         PrMemoryPtr (*NewPtr)(csSDK_uint32 byteCount);
    A NULL pointer is how you detect a problem.
    Note that changing the size of the ->ReserveMemory() doesn't seem to make any difference as to whether you'll get a memory ptr or NULL back.
    btw my NewPtr size is either
         W x H x sizeof(PrPixelFormat_YUVA4444_32f)
         W x H x sizeof(PrPixelFormat_YUVA4444_8u)
    and happens concurrently on #cpu's threads (eg 16 to 32 instances at once is pretty common).
    The more processing power that the nVidia card has seems to make it fall over faster.
    eg I don't see it at all on a GTS 250 but do on a GTX 480, Quadro 4000 & 5000 and GTX 660
    I think there is a threading issue and an issue with the Memory Suite's pool and how it interacts with the CUDA memory pool. - note that CUDA sets RESERVED (aka locked) memory which can easily cause a fragmenting problem if you're not using the OS memory handler.

  • Native library NOT thread safe - how to use it via JNI?

    Hello,
    has anybody ever tried to use a native library from JNI, when the library is not thread safe?
    The library (Windows DLL) was up to now used in an MFC App and thus was only used by one user - that meant one thread - at a time.
    Now we would like to use the library like a "server": many Java clients connect the same time to the library via JNI. That would mean each client makes its calls to the library in its own thread. Because the library is not thread safe, this would cause problems.
    Now we discussed to load the library several times - separately for each client (for each thread).
    Is this possible at all? How can we do that?
    And do you think we can solve the problem in this way?
    Are there other ways to use the library, though it is not thread safe?
    Any ideas welcome.
    Thanks for any contributions to the discussion, Ina

    (1)
    has anybody ever tried to use a native library from
    JNI, when the library (Windows DLL) is not thread safe?
    Now we want many Java clients.
    That would mean each client makes its calls
    to the library in its own thread. Because the library
    is not thread safe, this would cause problems.Right. And therefore you have to encapsulate the DLL behind a properly synchronized interface class.
    Now the details of how you have to do that depends: (a) does the DLL contain state information other than TLS? (b) do you know which methods are not thread-safe?
    Depending on (a), (b) two extremes are both possible:
    One extreme would be to get an instance of the interface to the DLL from a factory method you'll have to write, where the factory method will block until it can give you "the DLL". Every client thread would obtain "the DLL", then use it, then release it. That would make the whole thing a "client-driven" "dedicated" server. If a client forgets to release the DLL, everybody else is going to be locked out. :-(
    The other extreme would be just to mirror the DLL methods, and mark the relevant ones as synchronized. That should be doable if (a) is false, and (b) is true.
    (2)
    Now we discussed to load the library several times -
    separately for each client (for each thread).
    Is this possible at all? How can we do that?
    And do you think we can solve the problem in this
    way?The DLL is going to be mapped into the process address space on first usage. More Java threads just means adding more references to the same DLL instance.
    That would not result in thread-safe behavior.

  • Thread-safe design pattern for encapsulating Collections?

    Hi,
    This must be a common problem, but I just can't get my head around it.
    Bascially I'm reading in data from a process, and creating/updating data structuers from this data. I've got a whloe bunch of APTProperty objects (each with a name/value) stored in a sychronized HashMap encapsulated by a class called APTProperties. It has methods such as:
    addProperty(APTProperty) // puts to hashmap
    getProperty(String name) // retreives from hashmap
    I also want clients to be able to iterate through all the APTProperties, in a thread safe manner . ie. they aren't responsible for sychronizing on the Map before getting the iterator. (See Collections.synchronizedMap() API docs).
    Is there any way of doing this?
    Or should I just have a method called
    Iterator propertyIterator() which returns the corresponding iterator of the HashMap (but then I can't really make it thread safe).
    I'd rather not make the internal HashMap visible to calling clients, if possible, 'cause I don't want people tinkering with it, if you know what I mean.
    Hope this makes sense.
    Keith

    In that case, I think you need to provide your own locking mechanism.
    public class APTProperties {
    the add, get and remove methods call lock(), executes its own logic, then call unlock()
    //your locking mechanism
    private Thread owner; //dont need to be volatile due to synchronized access
    public synchronized void lock() {
    while(owner != null) {
    wait();
    th = Thread.currentThread();
    public synzhronized void unlock() {
    if(owner == currentThread()){
    owner = null;
    notifyAll();
    }else {
    throw new IllegalMonitorStateException("Thread: "+ Thread.currentThread() + "does not own the lock");
    Now you dont gain a lot from this code, since a client has to use it as
    objAPTProperties.lock();
    Iterator ite = objAPTProperties.propertyIterator();
    ... do whatever needed
    objAPTProperties.unlock();
    But if you know how the iterator will be used, you can make the client unaware of the locking mechanism. Lets say, your clients will always go upto the end thru the iterator. In that case, you can use a decorator iterator to handle the locking
    public class APTProperties {
    public Iterator getThreadSafePropertyIterator() {
    private class ThreadSafeIterator implements Iterator {
    private iterator itr;
    private boolean locked;
    private boolean doneIterating;
    public ThreadSafeIterator(Iterator itr){
    this.itr = itr;
    public boolean hasNext() {
    return doneIterating ? false : itr.hasNext();
    public Object next() {
    lockAsNecessary();
    Object obj = itr.next();
    unlockAsNecessary();
    return obj;
    public void remove() {
    lockAsNecessary();
    itr.remove();
    unlockAsNecessary();
    private void lockAsNecessary() {
    if(!locked) {
    lock();
    locked = true;
    private void unlcokAsNecessary() {
    if(!hasNext()) {
    unlock();
    doneIterating = true;
    }//APTProperties ends
    The code is right out of my head, so it may have some logic problem, but the basic idea should work.

  • Thread safe RMI

    Thread safe RMI.
    My RMI server provides clients with the ability to CRUD data but in order to manage concurrency I did the following.
    1stly I would like to understand correctly the issues of RMI server objects....
    It is my understanding that RMI server can cater for eg 100 clients by spawning 100 threads at random for each client. This process is not managed (thread wise) and the result is that 20 clients wishing to update record A can do so at will? Various steps can be taken from what I gather...
    a) Synchronise (expensive)
    b) implement a lock manager.
    The step I have taken is include a lock manager and I have ensured that all locking an unlocking occur in a singleton server object that manages all sensitive data CRUD operations. Now I use a lock manager but I would like to know what happens if for eg the 1st RMI client dies and has its thread blocking
    all other threads from locking the same record? Does the thread die with the client or is there a counter measure for this? The obvious answer that comes to mind is Object.wait() inside the lock manager?
    The reason I ask was that because all of the locking occurs in a single method call in the Network
    Server's JVM, so is there a need to worry about the RMI connection dying during the middle the locking operation.
    Edited by: Yucca on May 23, 2009 8:14 PM/*
    * @(#)LockManager.java
    * Version 1.0.0
    * 27/03/2009
    import java.util.HashMap;
    import java.util.Map;
    import java.util.logging.Logger;
    import java.util.ResourceBundle;
    class LockManager {
         * The <code>Map</code> containing all the record number keys of currently
         * locked records that pair with the cookie value assigned to them when they
         * are initially locked.
        private static Map<Integer, Long> currentlyLockedMap =
                new HashMap<Integer, Long>();
        private static final Logger LOG = Logger.getLogger("project.db");
         * Locks a record so that it can only be updated or deleted by this client.
         * Returned value is a <code>long</code> that is the cookie value that must
         * be used when the record is unlocked, updated, or deleted.
         * If the specified record is already locked by a different client, then the
         * current thread gives up the CPU and consumes no CPU cycles until the
         * record is unlocked.
         * @param   recNo                   the assigned primary key of the record
         *                                  to be locked for an operation.
         * @param   data                    a <code>Data</code> instance used to
         *                                  check if the record exists before
         *                                  attempting the lock operation.
         * @return                          A <code>long</code> containing the
         *                                  cookie value that must be used when the
         *                                  record is unlocked.
         * @throws  RecordNotFoundException if specified record does not exist or if
         *                                  specified record is marked as deleted
         *                                  in the database file.
        long lock(int recNo, DB data) throws RecordNotFoundException {
            LOG.entering(this.getClass().getName(), "lock", recNo);
            synchronized (currentlyLockedMap) {
                try {
                    while (currentlyLockedMap.containsKey(recNo)
                            && currentlyLockedMap.get(recNo)
                            != Thread.currentThread().getId()) {
                        currentlyLockedMap.wait();
                    // Check if record exists.
                    data.read(recNo);
                    long cookie = Thread.currentThread().getId();
                    currentlyLockedMap.put(recNo, cookie);
                    LOG.fine("Thread " + Thread.currentThread().getName()
                            + "got Lock for " + recNo);
                    LOG.fine("Locked record count = " + currentlyLockedMap.size());
                    LOG.exiting(this.getClass().getName(), "lock", true);
                    return cookie;
                } catch (InterruptedException ie) {
                    throw new SystemException("Unable to lock", ie);
         * Releases the lock on a record. The cookie must be the cookie returned
         * when the record was locked.
         * @param   recNo                   the assigned primary key of the record
         *                                  to be unlocked after an operation.
         * @param   cookie                  the cookie returned when the record was
         *                                  locked.
         * @throws  RecordNotFoundException if specified record does not exist or if
         *                                  specified record is marked as deleted
         *                                  in the database file.
         * @throws  SecurityException       if the record is locked with a cookie
         *                                  other than cookie.
        void unlock(int recNo, long cookie) throws RecordNotFoundException,
                SecurityException {
            LOG.entering(this.getClass().getName(), "unlock",
                    new Object[] { recNo, cookie });
            synchronized (currentlyLockedMap) {
                checkLock(recNo, cookie);
                currentlyLockedMap.remove(recNo);
                LOG.fine("released lock for " + recNo);
                currentlyLockedMap.notifyAll();
            LOG.exiting(this.getClass().getName(), "unlock");
         * Checks if the given record is locked before doing any modification or
         * unlocking for the record.
         * <p/>
         * Checks the <code>Map</code> of record number keys and cookie values
         * to see if it contains the given record number.
         * @param   recNo                   the assigned primary key of the record
         *                                  to be checked if it is locked.
         * @param   lockCookie              the cookie returned when the record was
         *                                  initially locked.
         * @throws  SecurityException       if no lock exists for the record or if
         *                                  the record has been locked with a
         *                                  different cookie.
        void checkLock(int recNo, long lockCookie) throws SecurityException {
            LOG.entering(this.getClass().getName(), "checkLock",
                    new Object[] { recNo, lockCookie });
            // Check if record has been locked
            if (!currentlyLockedMap.containsKey(recNo)) {
                throw new SecurityException(ResourceBundle.getBundle(
                        "resources.ErrorMessageBundle").getString(
                        "lockNotAppliedKey"));
            // Check if record has been locked by different cookie.
            if (currentlyLockedMap.get(recNo) != lockCookie) {
                throw new SecurityException(ResourceBundle.getBundle(
                        "resources.ErrorMessageBundle").getString(
                        "notLockOwnerKey"));
            LOG.exiting(this.getClass().getName(), "checkLock");
    }Edited by: Yucca on May 23, 2009 8:16 PM
    Edited by: Yucca on May 23, 2009 8:18 PM

    It is my understanding that RMI server can cater for eg 100 clients by spawning 100 threads at random for each client.No. It spawns a new thread for every new connection. At the client end, RMI makes a new connection for every call unless it can find an idle connection to the same host that is less than 15 seconds old. So if the client is doing concurrent calls there will be concurrent threads at the server for that client.
    This process is not managed (thread wise)'Managed' meaning what?
    the result is that 20 clients wishing to update record A can do so at will?The result is that an RMI server is not thread safe unless you make it so.
    a) Synchronise (expensive)Compared to a database update the cost of synchronization is trivial.
    b) implement a lock manager. The database should already have one of those, and so does java.util.concurrent. Don't write your own. Personally I would just syncrhonize around the database calls.
    what happens if for eg the 1st RMI client dies and has its thread(a) the client doesn't have a thread, see above. The call has a thread.
    (b) at the server, the call will execute, regardless of the state of the client, until it is time to write the result back to the client, at which point the write will encounter an IOException of some description and the thread will exit.
    blocking all other threads from locking the same record?That can't happen unless you foul up your concurrency management.
    Does the thread die with the clientIt dies with the call.
    is there a need to worry about the RMI connection dying during the middle the locking operation.The server JVM won't notice until it is time to write the call result back, see above.

  • Thread Safe Issue with Servlet

    I saw the following statement in one of the J2EE compliant server documentations:
    "By default, servlets are not thread-safe. The methods in a single servlet instance are usually executed numerous times simultaneously (up to the available memory limit)."
    I'm quite concerned with this statement for the primary reason that (I'm trying to reason by reading it out loud) servlets are not going to be thread-safe especially when available memory hit really really low!! So, when the application is still having sufficient memory, we will not likely run into concurrency problems, i.e the happy scenario for a short period after server is started. BUT, good things don't last long.. Anyway, hope someone can explain to me with more insights. Thanks.

    Don't worry, memory occupation and thread safety are not related at all.
    In my opinion, the following is the meaning of the statement you quote.
    Since the servlet specification doesn't force any implementation to spawn a new servlet object upon each request (and this should be a real memory hit!), nor to synchronize calls to servlet methods, you should always code your servlet in a "stateless" fashion: you should be aware the same method on the same object could (and probably will) be called concurrently if multiple concurrent client requests are submitted.
    Hope I've been clear enough...

  • Coherence SimpleParser class is not thread safe?

    Coherense has very convinent XML utility class, which we use it a lot within our Coherence related applications.
    But we encounter some mysterious lock up (maybe deadlock?) issue and identified that it might be that the com.tangosol.run.xml.SimpleParser class is not thread safe.
    We are using tomcat 6 and spring 2.0.6.
    One of the webapp has 2 bean which implements InitializingBean interface.
    Bean A's afterPropertiesSet() method will use com.tangosol.run.xml.XmlHelper.loadXml method to parse a XML file.
    Bean B's afterPropertiesSet() method will acts as a tcp extend client and retrieve some data from a coherence cluster. Which I believe coherence will also use it's XML utility class when parsing the configuration files.
    We encounter tomcat lockup (which never finish startup webapp deployment porcess) randomly like 1 out of 2 or 3 tries.
    Use jconsole and connect to tomcat we can see that the main thread stuck in SimpleParser class. Here is the thread dump.
    Name: main
    State: RUNNABLE
    Total blocked: 156 Total waited: 0
    Stack trace:
    com.tangosol.run.xml.SimpleParser.instantiateDocument(SimpleParser.java:150)
    com.tangosol.run.xml.SimpleParser.parseXml(SimpleParser.java:115)
    - locked com.tangosol.run.xml.SimpleParser@f10c77
    com.tangosol.run.xml.SimpleParser.parseXml(SimpleParser.java:71)
    com.tangosol.run.xml.SimpleParser.parseXml(SimpleParser.java:84)
    com.tangosol.run.xml.XmlHelper.loadXml(XmlHelper.java:109)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1201)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1171)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:425)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
    - locked java.util.concurrent.ConcurrentHashMap@dee55c
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
    - locked java.lang.Object@d21555
    org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244)
    org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187)
    org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
    org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3830)
    org.apache.catalina.core.StandardContext.start(StandardContext.java:4337)
    - locked org.apache.catalina.core.StandardContext@1c64ed8
    org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    - locked java.util.HashMap@76a6d9
    org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:825)
    org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:714)
    org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
    org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
    org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    - locked org.apache.catalina.core.StandardHost@1c42c4b
    org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    - locked org.apache.catalina.core.StandardHost@1c42c4b
    org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    - locked org.apache.catalina.core.StandardEngine@37fd24
    org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    org.apache.catalina.core.StandardService.start(StandardService.java:516)
    - locked org.apache.catalina.core.StandardEngine@37fd24
    org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    - locked [Lorg.apache.catalina.Service;@1cc55fb
    org.apache.catalina.startup.Catalina.start(Catalina.java:566)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
    After we add the depends-on tag to enforce bean B wait on bean A to finish initialization, we no longer encounter the lockup during tomcat startup.
    We suspect that maybe SimpleParser class is not thread safe and will cause potential deadlock issue.
    Edited by: user639604 on Jun 22, 2009 10:36 AM

    While it doesn't show up as deadlock, I believe it probably is, as evidenced by these two threads:
    "Timer-0" prio=10 tid=0xcb9a2800 nid=0x454b in Object.wait() [0xcb6e0000..0xcb6e10a0]
       java.lang.Thread.State: RUNNABLE
         at com.tangosol.run.xml.SimpleParser.instantiateDocument(SimpleParser.java:150)
        at com.tangosol.run.xml.SimpleParser.parseXml(SimpleParser.java:115)
         - locked <0xf44e52f0> (a com.tangosol.run.xml.SimpleParser)
         at com.tangosol.run.xml.SimpleParser.parseXml(SimpleParser.java:71)
         at com.tangosol.run.xml.SimpleParser.parseXml(SimpleParser.java:99)
         at com.tangosol.run.xml.XmlHelper.loadXml(XmlHelper.java:129)
         at com.tangosol.run.xml.XmlHelper.loadXml(XmlHelper.java:95)
         at com.tangosol.run.xml.XmlHelper.loadXml(XmlHelper.java:72)
         at com.tangosol.util.ExternalizableHelper.<clinit>(ExternalizableHelper.java:4466)
         at com.evidentsoft.opcache.coherence.OPCacheCoherenceStorage.retrieve(OPCacheCoherenceStorage.java:341)
         at com.evidentsoft.opcache.coherence.OPCacheCoherenceStorage.retrieve(OPCacheCoherenceStorage.java:420)
         at com.evidentsoft.opcache.OPCacheManager.find(OPCacheManager.java:68)
         at com.evidentsoft.logserver.coherence.ClusterDetector.detectNewClusters(ClusterDetector.java:97)
         at com.evidentsoft.logserver.coherence.ClusterDetector.access$000(ClusterDetector.java:19)
         at com.evidentsoft.logserver.coherence.ClusterDetector$1.run(ClusterDetector.java:67)
         at java.util.TimerThread.mainLoop(Unknown Source)
         at java.util.TimerThread.run(Unknown Source)
    "main" prio=10 tid=0x08059000 nid=0x4539 in Object.wait() [0xf7fd0000..0xf7fd11f8]
       java.lang.Thread.State: RUNNABLE
         at com.tangosol.run.xml.SimpleParser.instantiateDocument(SimpleParser.java:150)
         at com.tangosol.run.xml.SimpleParser.parseXml(SimpleParser.java:115)
         - locked <0xf44ecd90> (a com.tangosol.run.xml.SimpleParser)
         at com.tangosol.run.xml.SimpleParser.parseXml(SimpleParser.java:71)
         at com.tangosol.run.xml.SimpleParser.parseXml(SimpleParser.java:84)
         at com.tangosol.run.xml.XmlHelper.loadXml(XmlHelper.java:109)
         at com.evidentsoft.coherence.util.ClusterConfigurator.generateConfigFile(ClusterConfigurator.java:319)
         at com.evidentsoft.coherence.util.ClusterConfiguratorProxy.afterPropertiesSet(ClusterConfiguratorProxy.java:51)
         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1201)
         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1171)
         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:425)
         at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
         at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
         - locked <0xd65efb88> (a java.util.concurrent.ConcurrentHashMap)
         at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
         at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
         at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
         at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
         - locked <0xd65efc28> (a java.lang.Object)
         at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244)
         at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187)
         at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
         at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3830)
         at org.apache.catalina.core.StandardContext.start(StandardContext.java:4337)
         - locked <0xd6092f60> (a org.apache.catalina.core.StandardContext)
         at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
         - locked <0xd54ff278> (a java.util.HashMap)
         at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
         at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
         at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:825)
         at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:714)
         at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
         at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
         at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
         at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
         at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
         - locked <0xd54ff1e8> (a org.apache.catalina.core.StandardHost)
         at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
         - locked <0xd54ff1e8> (a org.apache.catalina.core.StandardHost)
         at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
         - locked <0xd4fa60b8> (a org.apache.catalina.core.StandardEngine)
         at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
         at org.apache.catalina.core.StandardService.start(StandardService.java:516)
         - locked <0xd4fa60b8> (a org.apache.catalina.core.StandardEngine)
         at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
         - locked <0xd4f17ea0> (a [Lorg.apache.catalina.Service;)
         at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
         at java.lang.reflect.Method.invoke(Unknown Source)
         at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
         at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)The reason it isn't showing up as a deadlock in the thread dump is that the ExternalizableHelper static initializer isn't completing, so the other thread (blocking it) is waiting indefinitely on that class to become available.
    Peace,
    Cameron Purdy | Oracle Coherence

Maybe you are looking for

  • Report painter: how to edit.

    Dear everybody, I would appreciate your help. I need to edit an existing report painter query, in which I need to add a new selection criteria and to add a print parameter into the header of the report. How can I edit an existing report? I know about

  • Making a jtable row noneditable based on a value in a certain cell.

    I have a jTable (based on a database table) and one of the columns is OWNER. Is there a way to make an entire row noneditable based on the value in the OWNER column of the currently selected row? Here is the listener code that I have on the jTable. I

  • Abap API

    Hi All,     I am working on a scenario where I need to use abap api to fetch data from mdm system.   Here have coded to fetch data from mdm system and done the required configurations in mdmapic transaction.  but I get a dump. It says "BSEI_MSG_BADCR

  • Information on built-in packages of HTMLDB

    Hi All, I have recently started working on HTMLDB. Can anybody tell me where from can i get information abt the built-in packages of HTMLDB. I have came across many like WWV_ . But, i dont know where from can i get detailed info abt them. Thanks in a

  • How long is the warranty for the Zen Mic

    Can anyone tell me how long the warranty is for the Zen Micro? Thanks!