TeamDev Ltd. Home Page

ComfyJ run-time provides bi-directional Java-COM bridge so you can call COM objects from your Java code, and COM code can call your Java.


COM-to-Java Integration

This facet of ComfyJ allows you to integrate your Java application with any COM/OLE/OCX/ActiveX library of the Windows platform.

COM Interfaces & Data Types Wrappers

They allow working with COM types and interfaces likewise ordinary Java objects. For instance, you can use IUnknown, IClassFactory, IDispatch as usual Java interfaces and Variant (VARIANT), BStr (BSTR), SafeArray etc. as usual Java types.

VTBL & COM Automation

ComfyJ allows to invoke methods of a COM object via its function indexes in VTBL (Virtual Method Table) or by their names using Automation approach. Also, Automation allows getting and setting properties of a COM object, including indexed and named ones.

Embedding of OLE/OCX/ActiveX Components to Swing

ComfyJ provides the OleContainer Swing component which allows you to:

  • Use any visual COM component (OCX/ActiveX) in Java Swing UI. Using this functionality you can embed various ActiveX applications, such as Internet Explorer, Acrobat Reader, Microsoft Office as well as various media components such as Windows MediaPlayer, DVD player, QuickTime, ShockwaveFlash, etc.
  • Create an embedded object using ProgID, CLSID, or from a document file. Also, there is an ability to insert a COM object (which implements IOleObject COM interface) into container.
  • Save and load an embedded OleObject to or from a file in a special binary format.
Error - /products/jni/layout/downloadWidget.xhtml: Error reading 'evaluationInfo' on type com.teamdev.site.jsf.beans.product.ProductPageHandler

An Error Occurred:

/products/jni/layout/downloadWidget.xhtml: Error reading 'evaluationInfo' on type com.teamdev.site.jsf.beans.product.ProductPageHandler

+ Stack Trace

javax.el.ELException: /products/jni/layout/downloadWidget.xhtml: Error reading 'evaluationInfo' on type com.teamdev.site.jsf.beans.product.ProductPageHandler
	at com.sun.facelets.compiler.TextInstruction.write(TextInstruction.java:48)
	at com.sun.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:39)
	at com.sun.facelets.compiler.UILeaf.encodeAll(UILeaf.java:149)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:942)
	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
	at teamdev.jsf.ai.renderView(SourceFile:49)
	at teamdev.jsf.cl.renderView(SourceFile:405)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:109)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
	at org.sevenhats.util.servlet.AbstractServletWrapper.service(AbstractServletWrapper.java:28)
	at org.sevenhats.jsf.impl.FacesServletWrapper.service(FacesServletWrapper.java:79)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor$FilterChainImpl.doFilter(FilterServletAdaptor.java:56)
	at org.sevenhats.web.common.FilterMappingFilter$FilterChainExtension.doFilter(FilterMappingFilter.java:82)
	at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
	at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
	at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
	at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
	at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:166)
	at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
	at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
	at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
	at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
	at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
	at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
	at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
	at org.sevenhats.web.common.FilterMappingFilter$FilterChainExtension.doFilter(FilterMappingFilter.java:93)
	at com.teamdev.site.jsf.filter.NoCacheFilter.doFilter(NoCacheFilter.java:48)
	at org.sevenhats.web.common.FilterMappingFilter$FilterChainExtension.doFilter(FilterMappingFilter.java:93)
	at com.teamdev.site.jsf.filter.ForwardFilter.doFilter(ForwardFilter.java:55)
	at org.sevenhats.web.common.FilterMappingFilter$FilterChainExtension.doFilter(FilterMappingFilter.java:93)
	at org.sevenhats.web.transaction.TransactionFilter.doFilter(TransactionFilter.java:48)
	at org.sevenhats.web.common.FilterMappingFilter$FilterChainExtension.doFilter(FilterMappingFilter.java:93)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:301)
	at org.sevenhats.web.common.FilterMappingFilter$FilterChainExtension.doFilter(FilterMappingFilter.java:93)
	at teamdev.jsf.util.ResourceFilter.doFilter(SourceFile:93)
	at org.sevenhats.web.common.FilterMappingFilter$FilterChainExtension.doFilter(FilterMappingFilter.java:93)
	at org.sevenhats.web.common.FilterMappingFilter.doFilter(FilterMappingFilter.java:60)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor.service(FilterServletAdaptor.java:37)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor$FilterChainImpl.doFilter(FilterServletAdaptor.java:56)
	at org.sevenhats.web.common.WelcomeFileSupportFilter.doFilter(WelcomeFileSupportFilter.java:74)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor.service(FilterServletAdaptor.java:37)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor$FilterChainImpl.doFilter(FilterServletAdaptor.java:56)
	at org.sevenhats.web.common.UrlPathMappingSupportFilter.doFilter(UrlPathMappingSupportFilter.java:60)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor.service(FilterServletAdaptor.java:37)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor$FilterChainImpl.doFilter(FilterServletAdaptor.java:56)
	at org.sevenhats.web.impl.ScopeRegistrationFilter.doFilter(ScopeRegistrationFilter.java:56)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor.service(FilterServletAdaptor.java:37)
	at org.sevenhats.web.common.TargetBundleAwareServlet.service(TargetBundleAwareServlet.java:79)
	at org.eclipse.equinox.http.helper.ContextInitParametersServletAdaptor.service(ContextInitParametersServletAdaptor.java:34)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor$FilterChainImpl.doFilter(FilterServletAdaptor.java:56)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor.service(FilterServletAdaptor.java:37)
	at org.eclipse.equinox.http.servlet.internal.ServletRegistration.handleRequest(ServletRegistration.java:90)
	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:111)
	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:75)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:255)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
	at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:285)
	at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
	at org.eclipse.equinox.http.servlet.internal.RequestDispatcherAdaptor.forward(RequestDispatcherAdaptor.java:30)
	at com.teamdev.site.jsf.filter.ForwardFilter.doFilter(ForwardFilter.java:49)
	at org.sevenhats.web.common.FilterMappingFilter$FilterChainExtension.doFilter(FilterMappingFilter.java:93)
	at org.sevenhats.web.transaction.TransactionFilter.doFilter(TransactionFilter.java:63)
	at org.sevenhats.web.common.FilterMappingFilter$FilterChainExtension.doFilter(FilterMappingFilter.java:93)
	at org.sevenhats.web.common.FilterMappingFilter.doFilter(FilterMappingFilter.java:60)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor.service(FilterServletAdaptor.java:37)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor$FilterChainImpl.doFilter(FilterServletAdaptor.java:56)
	at org.sevenhats.web.common.WelcomeFileSupportFilter.doFilter(WelcomeFileSupportFilter.java:74)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor.service(FilterServletAdaptor.java:37)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor$FilterChainImpl.doFilter(FilterServletAdaptor.java:56)
	at org.sevenhats.web.common.UrlPathMappingSupportFilter.doFilter(UrlPathMappingSupportFilter.java:60)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor.service(FilterServletAdaptor.java:37)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor$FilterChainImpl.doFilter(FilterServletAdaptor.java:56)
	at org.sevenhats.web.impl.ScopeRegistrationFilter.doFilter(ScopeRegistrationFilter.java:56)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor.service(FilterServletAdaptor.java:37)
	at org.sevenhats.web.common.TargetBundleAwareServlet.service(TargetBundleAwareServlet.java:79)
	at org.eclipse.equinox.http.helper.ContextInitParametersServletAdaptor.service(ContextInitParametersServletAdaptor.java:34)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor$FilterChainImpl.doFilter(FilterServletAdaptor.java:56)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.eclipse.equinox.http.helper.FilterServletAdaptor.service(FilterServletAdaptor.java:37)
	at org.eclipse.equinox.http.servlet.internal.ServletRegistration.handleRequest(ServletRegistration.java:90)
	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:111)
	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:75)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:255)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
	at org.mortbay.jetty.Server.handle(Server.java:324)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
Caused by: java.lang.NullPointerException
	at com.teamdev.site.jsf.beans.product.ProductPageHandler.getAcceptableProductFor(ProductPageHandler.java:82)
	at com.teamdev.site.jsf.beans.product.ProductPageHandler.getEvaluationInfo(ProductPageHandler.java:54)
	at sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
	at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:117)
	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:192)
	at com.sun.facelets.el.ELText$ELTextVariable.writeText(ELText.java:184)
	at com.sun.facelets.el.ELText$ELTextComposite.writeText(ELText.java:108)
	at com.sun.facelets.compiler.TextInstruction.write(TextInstruction.java:45)
	... 105 more

+ Component Tree

<dn id="_teamdev_ViewRoot" locale="en_US" renderKitId="HTML_BASIC" rendered="true" transient="false" viewId="/comfyj/features/index.xhtml">
_QuipuKitValidationProcessor_
<ValidationProcessor id="teamdevValidationProcessor" rendered="false" transient="false" useDefaultClientValidationPresentationForApplication="true" useDefaultServerValidationPresentationForApplication="true"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml"> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta name="AUTHOR" content="TeamDev Ltd."/> <meta name="CONTENT-LANGUAGE" content="en-US,ru"/> <meta name="COPYRIGHT" content=" 2009 TeamDev Ltd."/> <meta name="CACHE-CONTROL" content="Public"/>
<ComponentRef id="j_id3" rendered="true" transient="false">
<meta name="Keywords" content="#{metaKeywords}"/>
</ComponentRef>
<ComponentRef id="j_id5" rendered="true" transient="false">
<meta name="Description" content="#{metaDescription}"/>
</ComponentRef>
<title>
#{productPage.productName} Features — #{propertyService.properties['company.name.full']}
</title> <link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/css/reset.css" type="text/css" media="screen,projection"/> <link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/css/layout.css" type="text/css" media="screen,projection"/> <link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/css/main.css" type="text/css" media="screen,projection"/> <link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/css/menu.css" type="text/css" media="screen,projection"/> <link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/css/boxes.css" type="text/css" media="screen,projection"/> <link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/css/popup.css" type="text/css" media="screen,projection"/> <link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/css/print.css" type="text/css" media="print"/> <link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/css/handheld.css" type="text/css" media="handheld"/> <link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/css/edit.css" type="text/css" media="screen,projection"/>
<link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/css/products.css" type="text/css" media="screen,projection"/> <link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/css/product_#{productName}.css" type="text/css" media="screen,projection"/>
<script src="#{facesContext.externalContext.requestContextPath}/js/jquery/jquery-1.2.6.pack.js" type="text/javascript"/> <script src="#{facesContext.externalContext.requestContextPath}/js/jquery/facebox.js" type="text/javascript"/> <script src="#{facesContext.externalContext.requestContextPath}/js/jquery/jquery.hoverIntent.minified.js" type="text/javascript"/> <script src="#{facesContext.externalContext.requestContextPath}/js/main.js" type="text/javascript"/> <script src="#{facesContext.externalContext.requestContextPath}/js/dlink.js?notitles&nomailevents" type="text/javascript"/>
<!--[if lt IE 7]> <link rel="stylesheet" type="text/css" media="all" href="/css/style_ie6.css"> <script src="/js/stylefix.js" type="text/javascript"></script> <![endif]--> <link rel="icon" href="/favicon.ico" type="image/x-icon"/> <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
<link rel="alternate" type="application/rss+xml" title="TeamDev #{productPage.productName} Product News" href="http://support.teamdev.com/blogs/feeds/tags/#{productName}"/>
<link rel="alternate" type="application/rss+xml" title="TeamDev Company News" href="http://support.teamdev.com/blogs/feeds/tags/company_news"/> <link rel="alternate" type="application/rss+xml" title="TeamDev Products Release Notes" href="http://support.teamdev.com/blogs/feeds/tags/release_notes"/> <link rel="alternate" type="application/rss+xml" title="TeamDev Support Blog Posts Feed" href="http://support.teamdev.com/community/feeds/blogs?community=1"/> <link rel="alternate" type="application/rss+xml" title="TeamDev Support Documents Feed" href="http://support.teamdev.com/community/feeds/documents?community=1"/> </head> <body id="#{bodyId}">
<AjaxSettings id="j_id15" progressMessage="teamdev.jsf.component.ajaxsettings.DefaultProgressMessage@13820a2" rendered="true" sessionExpiration="teamdev.jsf.component.ajaxsettings.DefaultSessionExpiration@1e6a09f" transient="false">
progressMessage
<DefaultProgressMessage id="j_id16" rendered="true" style="display: none;" transient="false"/>
sessionExpiration
<DefaultSessionExpiration confirmation="teamdev.jsf.component.confirmation.Confirmation@3b31f4" id="j_id95" rendered="true" transient="false">
<Confirmation alignToInvoker="false" cancelButtonText="Reload later" captionText="Session Expired" closeOnOuterClick="false" details="A new session will be created when the page is reloaded" draggable="false" draggableByContent="true" height="160px" hidingTimeout="-1" id="j_id95--confirm_expiration" message="Your session has expired" minHeight="80px" minWidth="150px" modal="true" modalLayerStyle="background: black; filter: alpha(opacity=50); opacity: .50;" okButtonText="Reload page now" rendered="true" resizeable="false" showCloseWindowButton="false" showMessageIcon="true" transient="false" visible="false" width="400px"/>
</DefaultSessionExpiration>
</AjaxSettings>
<div id="Page">
<h1 id="Logo_small"><a href="/"><img src="#{facesContext.externalContext.requestContextPath}/images/logos/logo_1.png" alt="#{propertyService.properties['company.name.full']} Home Page" title="#{propertyService.properties['company.name.full']} Home Page"/></a></h1>
<UINamingContainer id="menuSubview" rendered="true" transient="false">
<UINamingContainer id="menuSubview" rendered="true" transient="false">
<ul id="Menu"> <li class="orange_bg #{current=='product' ? 'current' : ''}"><a href="/products/"><span><img src="/images/menu/blank.gif" alt="Producs"/></span></a></li> <li class="green_bg #{current=='store' ? 'current' : ''}"><a href="/store/"><span><img src="/images/menu/blank.gif" alt="Store"/></span></a></li> <li class="violet_bg #{current=='support' ? 'current' : ''}"><a href="/support/"><span><img src="/images/menu/blank.gif" alt="Support"/></span></a></li> <li class="indigo_bg #{current=='services' ? 'current' : ''}"><a href="/services/"><span><img src="/images/menu/blank.gif" alt="Services"/></span></a></li> <li class="blue_bg lastItem #{current=='company' ? 'current' : ''}"><a href="/company/"><span><img src="/images/menu/blank.gif" alt="Company"/></span></a></li>
</ul>
</UINamingContainer>
</UINamingContainer>
<UINamingContainer id="submenuSubview" rendered="true" transient="false">
<UIRepeat id="j_id21" offset="0" rendered="true" size="-1" transient="false" var="group">
<ul class="SubMenu #{group.name}">
<UIRepeat id="j_id23" offset="0" rendered="true" size="-1" transient="false" var="item">
<li class="#{item.current ? 'active' : ''} #{item.menuType.value=='IMAGE' ? 'imagemenu' : ''}">
<HtmlPanelGroup id="j_id25" rendered="false" transient="false">
<span>
<HtmlGraphicImage id="j_id27" ismap="false" rendered="false" transient="false"/>
<HtmlOutputText escape="true" id="j_id28" rendered="false" transient="false"/>
</span>
</HtmlPanelGroup>
<HtmlPanelGroup id="j_id30" rendered="true" transient="false">
<a href="#{item.url}" class="#{item.urlClass}" id="#{item.linkId}">
<HtmlGraphicImage id="j_id32" ismap="false" rendered="false" transient="false"/>
<HtmlOutputText escape="true" id="j_id33" rendered="false" transient="false"/>
</a>
</HtmlPanelGroup>
</li>
</UIRepeat>
</ul>
</UIRepeat>
</UINamingContainer>
<div id="Content">
<div class="clearfix mainText"> <div id="leftContent" class="Col4_123 serif">
<HtmlForm enctype="application/x-www-form-urlencoded" id="j_id39" prependId="true" rendered="true" submitted="false" transient="false">
<HtmlOutputText escape="false" id="j_id40" rendered="true" transient="false" value="<div class="container hangingContent" style="background: transparent url(/images/products/jni/comfyj/comfy_j_features_tree.jpg) no-repeat scroll right bottom;"> <div class="Col3_12 nomargintop"> <p>ComfyJ run-time provides bi-directional <a href="#java-2-com">Java-COM bridge</a> so you can call COM objects from your Java code, and COM code can call your Java.</p><br/> <h2><img src="/images/products/jni/comfyj/com-to-java-integration.png" alt="COM-to-Java Integration"/></h2> <p>This facet of ComfyJ allows you to integrate your Java application with any COM/OLE/OCX/ActiveX library of the Windows platform.</p> <div class="container hangingContent"> <div class="Col2_1"> <h4>COM Interfaces & Data Types Wrappers</h4> <p>They allow working with COM types and interfaces likewise ordinary Java objects. For instance, you can use <code>IUnknown</code>, <code>IClassFactory</code>, <code>IDispatch</code> as usual Java interfaces and <code>Variant</code> (VARIANT), <code>BStr</code> (BSTR), <code>SafeArray</code> etc. as usual Java types.</p> </div> <div class="Col2_2"> <h4>VTBL & COM Automation</h4> <p>ComfyJ allows to invoke methods of a COM object via its function indexes in VTBL (Virtual Method Table) or by their names using Automation approach. Also, Automation allows getting and setting properties of a COM object, including indexed and named ones.</p> </div> </div> </div> </div> <div class="Col1_1"> <h4>Embedding of OLE/OCX/ActiveX Components to Swing</h4> <p>ComfyJ provides the OleContainer Swing component which allows you to:</p> <ul class="hang"> <li>Use any visual COM component (OCX/ActiveX) in Java Swing UI. Using this functionality you can embed various ActiveX applications, such as Internet Explorer, Acrobat Reader, Microsoft Office as well as various media components such as Windows MediaPlayer, DVD player, QuickTime, ShockwaveFlash, etc.</li> <li>Create an embedded object using <code>ProgID</code>, <code>CLSID</code>, or from a document file. Also, there is an ability to insert a COM object (which implements <code>IOleObject</code> COM interface) into container.</li> <li>Save and load an embedded OleObject to or from a file in a special binary format.</li> </ul> </div>"/>
</HtmlForm>
</div> <div id="rightContent" class="Col4_4">
<script src="/js/jquery/jquery.validate.js" type="text/javascript"/> <script type="text/javascript"> var product = '#{productPage.productName}'; function fireGoogleAnalytics(productName, evaluate) { var action = evaluate ? "evaluate" : "download"; var eventStr = "/" + action + "-" + productName; pageTracker._trackPageview(eventStr); } function show(id) { var component = document.getElementById(id); component.className = 'visible'; $("#download\\:email").addClass("required email"); $("#download\\:name").addClass("required"); } function hide(id) { var component = document.getElementById(id); component.className = 'hidden'; $("#download\\:email").removeClass("required email error"); $("#download\\:name").removeClass("required error"); } function changeVisibility(id) { var component = document.getElementById('download:evaluation'); if (component.checked) { show(id); } else { hide(id); } } function emailValid() { if(isEvaluationChecked()){ return $('#download\\:email').valid(); } else { return true; } } $(document).ready(function() { document.getElementById("download:evaluation").checked = #{productPage.evaluationInfo.sendEvaluation}; document.getElementById("download:email").value = "#{productPage.evaluationInfo.email}"; document.getElementById("download:name").value = "#{productPage.evaluationInfo.name}"; $("#download").validate( { ignore :".ignore", errorPlacement : function(error, element) { // Do nothing } }); }); function isEvaluationChecked() { return document.getElementById('download:evaluation').checked; } function isFormValid() { var valid = $("#download").valid(); return valid; } function processSubmit() { if( isFormValid() ) { var component = document.getElementById('download:evaluation'); fireGoogleAnalytics(product, component.checked) } else { return false; } } </script> <div id="downloadEvaluateBox" class="BoxGrey SideBar"> <div class="container"> <h3>Download & Evaluate</h3> </div> <div class="content"> <p>#{productPage.productName}#{empty productPage.version ? '' : ' '}#{productPage.version}. See <a class="external" href="#{releaseNotesLink}">release notes</a></p>
<HtmlForm enctype="application/x-www-form-urlencoded" id="download" onsubmit="processSubmit();" prependId="true" rendered="true" submitted="false" transient="false">
<table> <tbody>
<HtmlPanelGroup id="j_id44" rendered="true" transient="false">
<tr> <td class="labelHolder">
<HtmlOutputLabel escape="true" for="platform" id="j_id46" rendered="true" transient="false">
Platform:
</HtmlOutputLabel>
</td> <td>
<DropDownField autoComplete="true" buttonAlignment="right" buttonClass="donwloadDropDownButton" converter="com.teamdev.site.jsf.beans.product.ProductPageHandler$ProductConverter@4cb76d" customValueAllowed="false" disabled="false" fieldClass="dropdownFieldClass" id="product" immediate="false" listAlignment="left" listItemClass="donwloadDropDownlistItem" localValueSet="false" maxlength="-2147483648" rendered="true" required="false" size="-2147483648" styleClass="downloadInput" suggestionDelay="350" suggestionMinChars="0" suggestionMode="all" timeout="-1" transient="false" valid="true" var="item">
popup
<DropDownPopup id="product--popup" rendered="true" transient="false"/>
<DropDownItems id="j_id49" rendered="true" transient="false"/>
<TableColumn filterKind="searchField" id="j_id50" rendered="true" resizeable="true" transient="false">
<HtmlGraphicImage id="j_id51" ismap="false" rendered="true" transient="false"/>
</TableColumn>
<TableColumn filterKind="searchField" id="j_id52" rendered="true" resizeable="true" transient="false">
<HtmlOutputText escape="true" id="j_id53" rendered="true" transient="false" value=" "/>
</TableColumn>
</DropDownField>
</td> </tr>
</HtmlPanelGroup>
<tr> <td class="labelHolder"> </td> <td> <table cellpadding="0" cellspacing="0" class="evaluationCheckboxHolder"> <tr> <td style="padding-right: 5px;">
<HtmlSelectBooleanCheckbox disabled="false" id="evaluation" immediate="false" localValueSet="false" onclick="changeVisibility('nameRow');changeVisibility('emailRow');" readonly="false" rendered="true" required="false" style="" transient="false" valid="true"/>
</td> <td>
<HtmlOutputLabel escape="true" for="evaluation" id="j_id57" rendered="true" transient="false">
Get evaluation key
</HtmlOutputLabel>
</td> </tr> </table> </td> </tr> <tr id="nameRow"> <td class="labelHolder">
<HtmlOutputLabel escape="true" for="name" id="j_id60" rendered="true" transient="false">
Name:
</HtmlOutputLabel>
</td> <td>
<HtmlInputText disabled="false" id="name" immediate="false" localValueSet="false" maxlength="-2147483648" readonly="false" rendered="true" required="false" size="-2147483648" styleClass="downloadInput required" transient="false" valid="true"/>
</td> </tr> <tr id="emailRow"> <td class="labelHolder">
<HtmlOutputLabel escape="true" for="email" id="j_id64" rendered="true" transient="false">
Email:
</HtmlOutputLabel>
</td> <td>
<HtmlInputText disabled="false" id="email" immediate="false" localValueSet="false" maxlength="-2147483648" readonly="false" rendered="true" required="false" size="-2147483648" styleClass="downloadInput required email " transient="false" valid="true"/>
</td> </tr> <tr> <td/> <td>
<HtmlCommandButton action="#{productPage.evaluate}" actionExpression="#{productPage.evaluate}" disabled="false" id="j_id68" immediate="false" readonly="false" rendered="true" transient="false" type="submit" value="Download"/>
</td> </tr> </tbody> </table>
</HtmlForm>
</div> </div>
<HtmlForm enctype="application/x-www-form-urlencoded" id="j_id71" prependId="true" rendered="true" submitted="false" transient="false">
<HtmlOutputText escape="false" id="j_id72" rendered="true" transient="false" value="<div> "/>
<HtmlOutputText escape="false" id="j_id73" rendered="true" transient="false" value="<div class="BoxGrey SideBar" style="margin-top: 12px;"><div class="container"> <h3 style="background: #0FABCD none repeat scroll 0 0 !important">Case Studies</h3></div> <div class="content"> <div class="caseStudy"> <img src="/images/products/jni/comfyj/casestudies_pdf.png" alt="Case Study" /> <a href="/downloads/comfyj/docs/TeamDev-Case_Study-ComfyJ-JavaBased_Media_Player_Integration_with_DirectShow.pdf">ComfyJ<br/>Case Study</a> </div> <div style="margin-left: 65px;"> <p>Integration of SimpleCenter with DirectShow via ComfyJ resulted in low-level control over processing of the media content, simplifying its management and customozation and making it future-proof against evolving standards and codecs.</p> </div> </div> </div>"/>
<HtmlOutputText escape="false" id="j_id74" rendered="true" transient="false" value=" </div> <div> "/>
<HtmlOutputText escape="false" id="j_id75" rendered="true" transient="false" value="<div class="BoxGrey" style="background:transparent; border: 0px; margin: -1em 0;"> <div class="content"> <div style="width:92px; float: left; margin-left:-10px;margin-top: 5px;"><a href="/store/comfyj/"> <img src="/images/buttons/buynow.png" alt="Buy now" border="0"/></a> </div> <div style="margin-left:89px;"> <br/> <p>Buy online in few steps<br/> Questions by <a href="mailto:sales@teamdev.com" class="gray">email</a></p> </div> </div> </div>"/>
<HtmlOutputText escape="false" id="j_id76" rendered="true" transient="false" value=" </div>"/>
</HtmlForm>
</div> </div> <div id="fullWidthContent" class="Col1_1 serif">
<HtmlForm enctype="application/x-www-form-urlencoded" id="j_id78" prependId="true" rendered="true" submitted="false" transient="false">
<HtmlOutputText escape="false" id="j_id79" rendered="true" transient="false" value="<div class="container Inset"> <div class="Col2_1"> <img src="/images/products/jni/comfyj/comfy_j_features_schema.png" alt="ComfyJ Bi-directional Java-COM Bridge "/> </div> <div class="Col2_2"> <h3>CodeGenerator Utility</h3> <p>With this bundled application, you can generate Java COM wrappers for COM components or COM Type Libraries. These generated classes allow you to work with COM objects just like with usual Java objects. Moreover, this application can compile the generated classes and pack them into a JAR file, if needed.</p> </div> </div> <div class="container"> <div class="Col4_1"> <h4>COM Memory Management</h4> <p>All COM and other native resources will be garbage-collected automatically or you can release them if required by the application logic.</p> </div> <div class="Col4_2"> <h4>Support for Multiple Threading Models</h4> <p>ComfyJ provides a set of different concurrency models which you can use for initializing COM integration in your Java application.</p> </div> <div class="Col4_3"> <h4>Handling of COM Events</h4> <p>ComfyJ provides standard COM technique for creating and advising COM event handlers to a COM object.</p> </div> <div class="Col4_4"> <h4>DCOM Support</h4> <p>ComfyJ allows you to create a COM object on a remote server.</p> </div> </div> <hr /><br /> <a name="java-2-com"></a> <div class="Col1_1"> <h2><img src="/images/products/jni/comfyj/java-to-com-integration.png" alt="Java-to-COM Integration"/></h2> <p>This part of ComfyJ provides the ability to create Java COM servers purely in Java. In other words, a designed Java COM server can be exposed as COM objects to other COM applications without writing a line of a native code.</p> </div> <div class="container"> <div class="Col2_1"> <h4>Development of Java COM Servers</h4> <p>To simplify creation of custom Java COM servers ComfyJ provides the base classes such as <code>IUnknownServer</code> and <code>IDispatchServer</code>, so any custom Java COM objects can inherit these classes depending on application requirements. Such Java COM servers can implement as many COM interfaces as required. It can be standard COM interfaces as well as those which were generated by Code Generator application of ComfyJ or custom ones.</p> </div> <div class="Col2_2"> <h4>Registration of Java COM Servers</h4> <p>ComfyJ also provides convenient ways for registering of created Java COM servers. Such registration can be performed at run time, for example for COM event handlers, or in COM Registry using a bundled ServerManager application. Also, there is the ability to register Java COM servers at runtime without using ServerManager application at all. Such registered Java COM servers can be used by other COM applications.</p> </div> </div>"/>
</HtmlForm>
</div>
</div> <div class="BoxGrey QuickLinks"> <div class="content container"> <div class="Col4_1">
<UINamingContainer id="purchaseNavigationBlock" rendered="true" transient="false">
<h4>Purchase & Licensing</h4> <ul> <li><a href="/#{productPage.productNameLowerCase}/licensing/">Licensing models</a></li> <li><a href="/store/#{productPage.productNameLowerCase}/">How to purchase #{productPage.productName}</a></li> <li><a href="/store/#{productPage.productNameLowerCase}/#discounts">Save with discounts</a></li> <!--li><a >Upgrade your product</a></li--> </ul>
</UINamingContainer>
</div> <div class="Separator4_12"/> <div class="Col4_2">
<UINamingContainer id="supportNavigationBlock" rendered="true" transient="false">
<h4>Support</h4> <ul> <li><a href="http://support.teamdev.com/#{productPage.productNameLowerCase}" class="external" target="_blank">Get help with #{productPage.productName}</a></li> <li><a href="http://support.teamdev.com/forms/reportForm.jsf" class="external" target="_blank">Submit your support request</a></li> </ul>
</UINamingContainer>
</div> <div class="Separator4_23"/> <div class="Col4_3">
<UINamingContainer id="documentationNavigationBlock" rendered="true" transient="false">
<h4>Documentation</h4> <ul> <li><a href="/#{productPage.productNameLowerCase}/features/">Features</a></li> <li><a href="#{propertyService.properties['server.download.folder']}/#{productPage.productNameLowerCase}/docs/#{productPage.productName}-PGuide.html">Programmer's Guide</a></li> <li><a href="/#{productPage.productNameLowerCase}/documentation/">FAQ and troubleshooting</a></li> <li><a href="http://support.teamdev.com/blogs/tags/#{productPage.productNameLowerCase}" class="external">Product news</a></li> </ul>
</UINamingContainer>
</div> <div class="Separator4_34"/> <div class="Col4_4">
<UINamingContainer id="productsNavigationBlock" rendered="true" transient="false">
<script type="text/javascript"> $(document).ready(function(){ $('.q_popuplayer').mouseout(function(){ $('.q_popuplayer').css({display: 'none'}); }); $('.productQuickLink:not(#jxfilewatcherQuickLink)').hoverIntent({ sensitivity: 3, interval: 200, over: function() { var productName = this.href.substring(0, this.href.length - 1); productName = productName.substring(productName.lastIndexOf('/') + 1); openProductPopup(productName); }, out: function() { } }); closeProductPopup(); }); function openProductPopup(productNameLowerCase) { if (productNameLowerCase == "") { return; } var productInfoSelector = "#" + productNameLowerCase + "ProductQuickLinkContent"; var productName = $(productInfoSelector + " > .productName")[0].innerHTML; var productDescription = $(productInfoSelector + " > .productDescription")[0].innerHTML; var description = '<strong><a href="/' + productNameLowerCase + '/">' + productName + '</a></strong><br/><span>' + productDescription + '</span><br/>'; if (productNameLowerCase != 'quipukit'){ description += '<a href="/' + productNameLowerCase + '/features/">Features</a>'; description += ' | '; } if (productNameLowerCase != 'jniwrapper'){ description += '<a href="/' + productNameLowerCase + '/onlinedemo/">Online Demo</a>'; } else { description += '<a href="/jniwrapper/winpack/">WinPack</a>'; } $("#productInfoDiv")[0].innerHTML = description; $("#productImgDiv")[0].innerHTML = '<img src="/images/icons/quicklinks/' + productNameLowerCase + '.png" alt="' + productName + '" align="left"/>'; var offset = $("#" + productNameLowerCase + "QuickLink").offset(); var pageOffset = $('#Page').offset(); var x = offset.left - pageOffset.left - 22; var navBlockOffset = $('.QuickLinks').offset(); var y = offset.top - navBlockOffset.top - 9; document.getElementById('productsNavigationBlock:links:productPopup').showAtXY(x, y); document.getElementById('productsNavigationBlock:links:productPopup').onmouseover = function() { q_showPopupLayer('productsNavigationBlock:links:productPopup'); }; } function closeProductPopup() { document.getElementById('productsNavigationBlock:links:productPopup').hide(); } </script> <h4>Products</h4> <div class="container"> <ul class="productsList"> <li><a id="jniwrapperQuickLink" href="/jniwrapper/" class="productQuickLink"> <img src="/images/icons/quicklinks/jniwrapper.png" alt="JNIWrapper" align="left"/>JNIWrapper</a> <div id="jniwrapperProductQuickLinkContent" style="display:none;"> <div class="productName">JNIWrapper</div> <div class="productDescription">Access to native code from Java without JNI</div> </div> </li> <li><a id="comfyjQuickLink" href="/comfyj/" class="productQuickLink"> <img src="/images/icons/quicklinks/comfyj.png" alt="ComfyJ" align="left"/>ComfyJ</a> <div id="comfyjProductQuickLinkContent" style="display:none;"> <div class="productName">ComfyJ</div> <div class="productDescription">Bi-directional Java-COM bridge</div> </div> </li> <li><a id="jxcaptureQuickLink" href="/jxcapture/" class="productQuickLink"> <img src="/images/icons/quicklinks/jxcapture.png" alt="JxCapture" align="left"/>JxCapture</a> <div id="jxcaptureProductQuickLinkContent" style="display:none;"> <div class="productName">JxCapture</div> <div class="productDescription">Screen capture API for Java apps</div> </div> </li> <li><a id="jxbrowserQuickLink" href="/jxbrowser/" class="productQuickLink"> <img src="/images/icons/quicklinks/jxbrowser.png" alt="JxBrowser" align="left"/>JxBrowser</a> <div id="jxbrowserProductQuickLinkContent" style="display:none;"> <div class="productName">JxBrowser</div> <div class="productDescription">Integration of Mozilla Firefox into Java AWT/Swing</div> </div> </li> </ul> <ul class="productsList"> <li><a id="jexplorerQuickLink" href="/jexplorer/" class="productQuickLink"> <img src="/images/icons/quicklinks/jexplorer.png" alt="JExplorer" align="left"/>JExplorer</a> <div id="jexplorerProductQuickLinkContent" style="display:none;"> <div class="productName">JExplorer</div> <div class="productDescription">Use the IE browser as a Java Swing UI component</div> </div> </li> <li><a id="jexcelQuickLink" href="/jexcel/" class="productQuickLink"> <img src="/images/icons/quicklinks/jexcel.png" alt="JExcel" align="left"/>JExcel</a> <div id="jexcelProductQuickLinkContent" style="display:none;"> <div class="productName">JExcel</div> <div class="productDescription">Provides full access to Excel functionality from Java</div> </div> </li> <li><a id="jxfilewatcherQuickLink" href="/jxfilewatcher/" class="productQuickLink"> <img src="/images/icons/quicklinks/jxfilewatcher.png" alt="JxFileWatcher" align="left"/>JxFileWatcher</a> </li> <li><a id="quipukitQuickLink" href="/quipukit/" class="productQuickLink"> <img src="/images/icons/quicklinks/quipukit.png" alt="QuipuKit" align="left"/>QuipuKit</a> <div id="quipukitProductQuickLinkContent" style="display:none;"> <div class="productName">QuipuKit</div> <div class="productDescription">JSF library for creating a dynamic UI for Web apps</div> </div> </li> </ul> </div>
<HtmlForm enctype="application/x-www-form-urlencoded" id="links" prependId="true" rendered="true" submitted="false" transient="false">
<PopupLayer closeOnOuterClick="false" draggable="false" hidingTimeout="0" id="productPopup" modal="false" rendered="true" transient="false" visible="false">
<HtmlOutputText escape="false" id="j_id89" rendered="true" transient="true" value=" <div class="productPopup"> <div> <div id="productImgDiv" class="productImgDiv"> </div> <div id="productInfoDiv" class="productInfoDiv"> </div> </div> </div>"/>
</PopupLayer>
</HtmlForm>
</UINamingContainer>
</div> </div> </div>
<UINamingContainer id="footerSubview" rendered="true" transient="false">
<div id="Footer" class="clearfix">
<HtmlForm enctype="application/x-www-form-urlencoded" id="errorReport" prependId="true" rendered="true" submitted="false" transient="false">
<HtmlInputHidden id="pageId" immediate="false" localValueSet="false" rendered="true" required="false" transient="false" valid="true"/>
<HtmlInputHidden id="errorText" immediate="false" localValueSet="false" rendered="true" required="false" transient="false" valid="true"/>
<HtmlPanelGroup id="errorReportSender" rendered="true" transient="false">
<ReloadComponents disableDefault="false" id="sendBugReport" immediate="false" rendered="true" requestDelay="0" submitParent="true" transient="false"/>
</HtmlPanelGroup>
</HtmlForm>
<div class="Col2_1"> © #{dateUtil.currentYear} #{propertyService.properties['company.name.full']} All rights reserved. <a href="/legal/">Terms of Use</a> | <a href="/privacy/">Privacy Policy</a>
<HtmlOutputText escape="true" id="buildNumber" rendered="true" style="color:white;" transient="false" value=" | Build: #223"/>
</div> <div class="Col2_2 textright"> <script> function googleSearch(value) { var queryComponent = value + " site:" + window.location.host; queryComponent = encodeURIComponent(queryComponent); var query = "http://www.google.com/search?hl=en&q=" + queryComponent; window.location = query; } </script> <form id="search" type="container" method="get" onsubmit="googleSearch(document.getElementById('search_field').value);return false;"> <a href="/company/contactus/">Contact Us</a> | <a href="/company/news/">Latest News</a> | <a href="/company/career/">Job Offers</a> | <!-- a href="/sitemap/">Site Map</a--> <input type="search" id="search_field" name="text" placeholder="Search" autosave="TeamDev" results="5"/> </form> </div> </div>
</UINamingContainer>
</div> <!-- Google Analytics --> <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> var pageTracker = _gat._getTracker("UA-477095-2"); pageTracker._setDomainName("none"); pageTracker._setAllowLinker(true); pageTracker._initData(); pageTracker._trackPageview(); </script> </body> </html>
</dn>

+ Scoped Variables

Request Parameters
NameValue
None
Request Attributes
NameValue
__acegi_filterSecurityInterceptor_filterAppliedtrue
__acegi_session_integration_filter_appliedtrue
clearVerifiableComponentstrue
comfyjFeaturescom.teamdev.site.jsf.beans.product.ProductPageHandler@1fab87a
errorReportHandlercom.teamdev.site.jsf.bean.feedback.ErrorReportHandler@16589fe
q__defaultProgressMessageteamdev.jsf.component.ajaxsettings.DefaultProgressMessage@13820a2
q__defaultProgressMessageInUsetrue
Session Attributes
NameValue
Q__SESSIONtrue
mozilla_browserfalse
safari_browserfalse
Application Attributes
NameValue
None
Mar 17, 2010 11:47:20 PM - Generated by Facelets