网上有一些例子展示了如何使用JAX-RS实现Jersey以及FreeMarker等自定义模板引擎.但这些例子看起来有点即兴或过时.还有一个例子仅依赖于JAX-RS而不是Jersey特定类.ViewProcessorFreeMarker 是否有成熟的实现,还是我必须自己编写?
我的路线中有一个重复的模式 - 每次调用时,某个处理器需要相同的3个Header设置,所以我的路由中有以下代码大约10次以上:
.whatever()
.setHeader("foo1", "bar1")
.setHeader("foo2", "bar2")
.setHeader("foo3", "bar3")
.processRef("processorBazThatNeedsHeaders")
.whatever()
Run Code Online (Sandbox Code Playgroud)
每次都会以不同的方式填充标题,因此将其抽象为子路径并不能真正为我买任何东西.
我喜欢能够做的是将RouteDefinition子类化为在我的DSL中使用另一种方法来允许我这样做:
.whatever()
.bazProcessor("bar1", "bar2", "bar3")
.whatever()
Run Code Online (Sandbox Code Playgroud)
在'bazProcessor'中,设置标题并调用处理器.
我试图做到这一点,但似乎只有一些严重的可能不会用于未来的手术,并且似乎其他人也有类似的运气.
我需要将它们设置为标题,而不是将它们作为参数直接传递给处理器,因为这些值也在处理器之后用于路由.
是否有一些隐藏的设施来实现这样的目标?
我是Spring MVC的新手.我正在编写一个使用Spring,Spring MVC和JPA/Hibernate的应用程序我不知道如何让Spring MVC设置一个从下拉到模型对象的值.我可以想象这是一个非常常见的场景
这是代码:
Invoice.java
@Entity
public class Invoice{
@Id
@GeneratedValue
private Integer id;
private double amount;
@ManyToOne(targetEntity=Customer.class, fetch=FetchType.EAGER)
private Customer customer;
//Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
Customer.java
@Entity
public class Customer {
@Id
@GeneratedValue
private Integer id;
private String name;
private String address;
private String phoneNumber;
//Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
invoice.jsp
<form:form method="post" action="add" commandName="invoice">
<form:label path="amount">amount</form:label>
<form:input path="amount" />
<form:label path="customer">Customer</form:label>
<form:select path="customer" items="${customers}" required="true" itemLabel="name" itemValue="id"/>
<input type="submit" value="Add Invoice"/>
</form:form>
Run Code Online (Sandbox Code Playgroud)
InvoiceController.java
@Controller
public class InvoiceController { …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的表:
表提取物
Owner | Attribute | value
----------------------------------------------------
10 | COLOR | BLUE
10 | COLOR | RED
10 | COLOR | GREEN
10 | SIZE | BIG
20 | COLOR | GREEN
20 | SIZE | MEDIUM
20 | MEMORY | 16G
20 | MEMORY | 32G
30 | COLOR | RED
30 | COLOR | BLUE
30 | MEMORY | 64G
Run Code Online (Sandbox Code Playgroud)
是否有一个SQL将使用单个索引计算所有属性的组合(结果中的最后一列):
Owner | Attribute | Value | Rule_No
10 | COLOR | BLUE | 1
10 | …Run Code Online (Sandbox Code Playgroud) 我正在寻找一些关于如何集群ServiceMix解决方案的初始指针.基本上我需要的是:
从那以后,搜索信息让我很困惑
我的解决方案可能会有一些使用JMS队列相互通信的bundle.在这种情况下,我应该只有2个独立的ServiceMix实例(彼此不了解).这不是最简单的选择吗?我看到了对故障转移配置的一些支持(http://servicemix.apache.org/docs/4.5.x/users-guide/failover.html),但真正给予的好处是什么(我错过了什么)?此故障转移配置也无助于负载平衡,因为只有一个实例正在为请求提供服务.
failover load-balancing high-availability apache-camel apache-servicemix
这是一项Jersey服务:
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response service(@QueryParam("format") String format) {
if (format.equals("json")) {...}
return response;
}
Run Code Online (Sandbox Code Playgroud)
我想根据url param "format" 生成XML或JSON回复.
我的回复实例正在形成jaxb2
我知道如果在我的Java客户端/功能测试中使用此代码,我可能会得到xml或json回复:
String content = service.path("").queryParam("myparam", "myvalue").accept(MediaType.APPLICATION_XML).get(String.class);
Run Code Online (Sandbox Code Playgroud)
要么
String content = service.path("").queryParam("myparam", "myvalue").accept(MediaType.APPLICATION_JSON).get(String.class);
Run Code Online (Sandbox Code Playgroud)
但我需要根据url param这样做.
在旧版本4.5.2中使用cxf 2.6.8的较新版本的servicemix(在5.4 - cxf 3.0.2和5.3 - cxf 2.7.11上测试)中出现此问题,一切正常,Web服务已创建.
在我们的项目中,我们有很多不同的web服务由maven插件wsdl2java在不同的包中生成.在servicemix 5.4中,几乎所有的web服务都由于这些错误而中断,奇怪的是在之前的servicemix 5.3中,bundle之一能够在没有任何项目修改的情况下启动.
在maven我尝试使用额外的extraarg:
<extraarg>-autoNameResolution</extraarg>
<extraarg>-xjc-npa</extraarg>
Run Code Online (Sandbox Code Playgroud)
但没有任何结果
堆栈跟踪:
Unable to start blueprint container for bundle bundle-name1
org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to initialize bean .camelBlueprint.factory.camelContext
at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:714)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:824)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)[19:org.apache.aries.blueprint.core:1.4.1]
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)[:1.7.0_21]
at java.util.concurrent.FutureTask.run(FutureTask.java:166)[:1.7.0_21]
at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:230)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:145)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.getComponentInstance(BlueprintContainerImpl.java:753)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.camel.blueprint.handler.CamelNamespaceHandler$CamelDependenciesFinder.process(CamelNamespaceHandler.java:863)[105:org.apache.camel.camel-blueprint:2.13.2]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.processProcessors(BlueprintContainerImpl.java:528)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:361)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:269)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:276)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:245)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:235)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)[14:org.apache.aries.util:1.1.0]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)[14:org.apache.aries.util:1.1.0]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)[14:org.apache.aries.util:1.1.0]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)[14:org.apache.aries.util:1.1.0]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)[14:org.apache.aries.util:1.1.0]
at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1127)[org.apache.felix.framework-4.4.1.jar:]
at org.apache.felix.framework.util.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:696)[org.apache.felix.framework-4.4.1.jar:] …Run Code Online (Sandbox Code Playgroud) 我有下面的Ant构建文件,并尝试使用目标'run'来执行程序.
<property name="springjar" location="E:/Tools/spring-30/dist/" />
<property name="logjar" location="E:/Tools/commons-logging-1.1.1/" />
<patternset id="jar.files"><include name="**/*.jar"/></patternset>
<path id="springlearn.classpath">
<fileset dir="${springjar}"><patternset refid="jar.files"/></fileset>
<fileset dir="${logjar}"><patternset refid="jar.files"/></fileset>
</path>
<target name="run" depends="dist" description="Execute the Java Program">
<java dir ="." fork="true" jar="dist\app.jar" classpathref ="springlearn.classpath">
</java>
</target>
Run Code Online (Sandbox Code Playgroud)
使用相同的classpathref,我能够成功编译并创建jar,但是当使用目标运行时,我得到以下错误
java.lang.NoClassDefFoundError: org/springframework/core/io/Resource
Caused by: java.lang.ClassNotFoundException: org.springframework.core.io.Resource
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:289)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Run Code Online (Sandbox Code Playgroud)
线程"main"中的异常
任何帮助是极大的赞赏.谢谢
我正在快速回顾一下ESB,到目前为止,我对Talend ESB感到惊讶和印象深刻.我真的期待Mule,一个更公认的开源esb,成为事实.
在我仅进行学术和基础测试评估之后,有没有更多有Talend实践经验的人(最好是在使用其他开源ESB之后)提供任何优点/缺点?
令我印象深刻的领域是:*EAI,即可用于集成的组件/传输数量.我发现其他一些ESB更多的是"你可以通过使用Camel或其他库来获得该功能",但是在设置这些"外部可用"功能时却没有提供简单的集成/指导.
*作为单点服务总线的安全性.看来Talend为管理所有公开的SOA服务的安全性提供了很好的支持.我没有机会在实践环境中完全尝试它(再次,有更多经验的人请!),但ESB为您提供完整(在运行期间可管理)安全控制的想法很有吸引力.
*非常好的契约优先IDE支持创建服务,然后由ESB使用.再次,请诚实的反馈.
*我对部署方面有点担心,听起来你需要运行多个服务器/服务,而ESB解决方案的"部署"(存储库的东西......?)可能会导致多点部署.此外,当转移服务地点(开发/测试/生产)时,我的快速审查并不是那么清楚(特别是与其他ESB解决方案相比......如果它们都有点复杂,那就没问题).
*诸如契约优先Web服务之类的用例,可以聚合/组合/重新映射来自多个其他Web服务(可能是二进制java rmi或ejbremote)的信息以填充响应.
*使用诸如监视ftp服务器的文件丢弃,拾取文件,解析xml/csv/edi文件格式以提供给另一个服务(不一定是大批量处理)的用例
*用于监控RSS提要的用例,用于包含XML/CSV/EDI文件链接,下载(新)文件,处理/提供给其他服务的新条目.
*CIFS/Windows共享我没有查看,但我也会在这里询问监控文件的位置/提取.
问题:有Talend ESB经验的人,请提供有关真实世界准确性和/或陷阱的上述陈述的评论,以及更多真实世界的反馈.就像我上面提到的那样,从表面上看,我真的被Talend Open Studio免费提供的开源作为开源,但在没有许可的情况下可以在商业环境中使用,说实话,JbossESB和Mule在放入时有点失望在Talend ESB旁边.
感谢您的任何反馈!
我熟悉Camel-SMPP,它对我的消费者和生产者路线也很有用.我正在使用Selenium SMPP SIM来测试它.
来自uri ="smpp://smppclient@127.0.0.1:8056?password = password&systemType = consumer"/>
to uri ="smpp:// smppclient @ localhost:2775?password = password && systemType = producer"/>
但是,我想让我的Camel作为服务器运行(它接受来自众多客户的SMS).我当前的From路由与一个SMS发送器紧密耦合.如何将其修改为通用服务器.骆驼有可能吗?