比方说,我有一个LazySeq的java.lang.Character中的像
(\b \ \! \/ \b \ \% \1 \9 \/ \. \i \% \$ \i \space \^@)
Run Code Online (Sandbox Code Playgroud)
如何将其转换为String?我已经尝试过显而易见的事了
(String. my-char-seq)
Run Code Online (Sandbox Code Playgroud)
但它会抛出
java.lang.IllegalArgumentException: No matching ctor found for class java.lang.String (NO_SOURCE_FILE:0)
[Thrown class clojure.lang.Compiler$CompilerException]
Run Code Online (Sandbox Code Playgroud)
我认为因为String构造函数需要原始char []而不是LazySeq.那么我尝试了类似的东西
(String. (into-array my-char-seq))
Run Code Online (Sandbox Code Playgroud)
但它抛出同样的异常.现在的问题是into-array返回java.lang.Character []而不是原始char [].这很令人沮丧,因为我实际上是这样生成我的角色序列
(map #(char (Integer. %)) seq-of-ascii-ints)
Run Code Online (Sandbox Code Playgroud)
基本上我有一个表示ASCII字符的seq的整数; 65 = A等.您可以看到我明确使用原始类型强制函数(char x).
这意味着我的map函数返回一个原始char,但Clojure map函数整体返回java.lang.Character对象.
首先,我假设每个特定于结构的序列都有不同的方法来删除项目:向量可以是索引,列表可以是第一个或最后一个,Set应该是要删除的实际项目的传递等.
其次,我假设有一些与结构无关的删除方法; 他们在seq界面上工作.
由于序列在Clojure中是不可变的,我怀疑你实际上做的是制作原始的廉价副本,只是没有原始项目.这意味着列表理解可以用于删除,但我怀疑这将是不必要的冗长.
请给出一些惯用的例子,说明从Clojure序列中删除项目的不同方法.
在Eclipse中,您可以配置许多服务器在IDE中运行,包括Tomcat.根据您的Tomcat配置,在Web应用程序生命周期的某个时刻,您的JSP文件将被编译为servlet.这些新的servlet .class文件%TOMCAT_HOME%/work
与从JSP创建的.java中间文件一起存储在目录中.当您的JSP抛出异常并引用与.java对应的行号而不是.jsp时,此.java文件非常有用.
更新:在我的环境(Windows)上,它位于:
C:/ Documents and Settings/%USER%/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work
或许更完整地回答有人可以发布*nix环境的位置.
我有一个处理多部分表单帖子的servlet.帖子实际上是由嵌入页面的Flash文件上传组件制作的.在某些浏览器中,Flash生成的POST不包含JSESSIONID,这使得我无法在帖子期间从会话中加载某些信息.
Flash上传组件确实包含特殊表单字段中的cookie和会话信息.使用此表单字段,我实际上可以检索JSESSIONID值.问题是,我不知道如何使用此JSESSIONID值手动加载该特定会话.
编辑 -基于ChssPly76的解决方案,我创建了以下HttpSessionListener实现:
@Override
public void sessionCreated(final HttpSessionEvent se) {
final HttpSession session = se.getSession();
final ServletContext context = session.getServletContext();
context.setAttribute(session.getId(), session);
}
@Override
public void sessionDestroyed(final HttpSessionEvent se) {
final HttpSession session = se.getSession();
final ServletContext context = session.getServletContext();
context.removeAttribute(session.getId());
}
Run Code Online (Sandbox Code Playgroud)
这会将所有会话添加到ServletContext,作为由其唯一ID映射的属性.我可以在上下文中放置一个会话映射,但它似乎是多余的.请发表有关此决定的任何想法.接下来,我将以下方法添加到我的servlet以通过id解析会话:
private HttpSession getSession(final String sessionId) {
final ServletContext context = getServletContext();
final HttpSession session = (HttpSession) context.getAttribute(sessionId);
return session;
}
Run Code Online (Sandbox Code Playgroud) Clojure API将这两个函数描述为:
(发送af&args) - 向代理商发送行动.立即返回代理.随后,在来自线程池的线程中,代理的状态将设置为以下值:(应用action-fn state-of-agent args)
和
(发送af&args) - 向代理发送可能阻止的操作.立即返回代理.随后,在单独的线程中,代理的状态将设置为以下值:(应用action-fn state-of-agent args)
唯一明显的区别是当动作可能阻止时应该使用send-off.有人可以更详细地解释这种功能差异吗?
更新5:我已经下载了基于最新Eclipse的最新Spring ToolsSuite IDE.当我将项目导入为Maven项目时,Eclipse/STS似乎使用Maven目标来构建我的项目.这意味着AspectJ最终在Eclipse中正常工作.
更新4:我最终只是使用Maven + AspectJ插件进行编译时编织,有效地绕过了Eclipse的机制.
更新3:似乎AspectJ的Eclipse插件破坏了Eclipse正确发布到Tomcat的能力.只有删除项目中的AspectJ功能,才能让它再次正确发布.很烦人.
更新2:我现在在Eclipse中工作了.这让我感到非常不舒服,但我不知道我是如何使用Eclipse或Maven构建的.它似乎是一个编译问题而不是运行时问题.
更新1:看来我已经通过Maven构建工作了,但我不知道如何.Eclipse仍然无法正常工作.我在pom.xml中唯一改变的是添加这些(无关紧要的?)配置参数:
<source>1.6</source>
<complianceLevel>1.6</complianceLevel>
<verbose>true</verbose>
<showWeaveInfo>true</showWeaveInfo>
<outxml>true</outxml>
Run Code Online (Sandbox Code Playgroud)
我实际上担心我会重复这个问题,一切都不一致.随着我了解更多信息,我会更新此问题.
关于Eclipse,我通过采用我想编织的二进制方面取得了一些进展 - 在本例中是spring-aspects.jar - 并将其复制出我的类路径.然后我将这个外部jar添加到我的Aspect Path中.执行此操作后,Eclipse在我的代码中正确显示了AspectJ标记.令人讨厌的是,我不能将spring-aspects.jar留在我的Java Build Path中,这是由Maven通过Maven插件为我维护的.但是,出于某种原因,除非将AspectJ插件显式添加到Aspect Path,否则AspectJ插件不会看到二进制方面.
原始帖子: @Configurable是一个Spring注释,它允许将依赖项注入到Spring外部实例化的对象中(例如,通过Hibernate或某些Factory类).
我以前使用这个注释与加载时编织,它主要工作.偶尔我会启动,没有任何东西会被注入.这个问题催生了这个StackOverflow问题.答案并不多,但大多数人建议我尝试编译时编织,因为可靠性更高.
我为Eclipse和Maven安装了AspectJ插件.这两个产生的似乎是正确编译的类.我在AspectJ编译之前在文本编辑器中打开了其中一个类,但未发现对AspectJ的引用.我在AspectJ编译后打开它,Eclipse和Maven生成的版本都引用了org.aspectj.weaver.MethodDeclarationLineNumber.这就是我认为它被正确编译的原因.问题是,一旦部署,就不会注入依赖项.
My Spring applicationContext.xml确实包含以下内容:
<context:spring-configured />
<context:component-scan base-package="com.myapp" />
Run Code Online (Sandbox Code Playgroud)
以上所有标记为@Configurable的类都需要完成DI吗?在从加载时编织到编译时编织的转换过程中,我从applicationContext.xml中删除了META-INF/aop.xml,<context:load-time-weaver />,从我的context.xml中删除了Spring的Tomcat编织器.
我该如何进一步调查此问题?可能的原因是什么?
编辑:这不是理论层面的冲突,而是实施层面的冲突.
另一个编辑: 问题是没有域模型作为仅数据/ DTO与更丰富,更复杂的对象映射,其中Order具有OrderItems和一些calculateTotal逻辑.具体问题是,例如,Order需要从中国的某些Web服务中获取OrderItem的最新批发价格(例如).所以你运行了一些Spring Service,允许在中国调用这个PriceQuery服务.Order具有calculateTotal,它遍历每个OrderItem,获取最新价格,并将其添加到总数中.
那么您如何确保每个订单都引用此PriceQuery服务?如何在反序列化,从DB加载和新实例化时恢复它?这是我的确切问题.
简单的方法是传递对calculateTotal方法的引用,但是如果您的Object在其生命周期内部使用此服务该怎么办?如果它在10种方法中使用怎么办?每次传递引用都很麻烦.
另一种方法是将calculateTotal移出Order并进入OrderService,但这会打破OO设计,我们将转向旧的"事务脚本"方式.
原帖:
简短版本: 富域对象需要引用许多组件,但这些对象会被持久化或序列化,因此它们对外部组件(在本例中为Spring bean:服务,存储库,任何东西)所持有的任何引用都是暂时的并且会被消除.当对象被反序列化或从DB加载时,需要重新注入它们,但这非常难看,我看不到一种优雅的方法.
更长的版本: 有一段时间了,我已经在Spring的帮助下练习了松耦合和DI.这对我保持可管理性和可测试性有很大帮助.不久前,我读了Domain-Driven Design和一些Martin Fowler.因此,我一直在尝试将我的域模型从简单的DTO(通常是表行的简单表示,只是数据无逻辑)转换为更丰富的域模型.
随着我的域增长并承担新的职责,我的域对象开始需要我在Spring上下文中使用的一些bean(服务,存储库,组件).这很快成为一场噩梦,也是转换为丰富域设计最困难的部分之一.
基本上我有一些点,我手动将应用程序上下文的引用注入我的域:
首先,它很难看,因为我将对象传递给应用程序上下文引用,并希望它通过名称引用它所需的组件.这不是注射,而是直接拉动.
其次,它是丑陋的代码,因为在所有提到的地方我需要逻辑来注入appContext
第三,它容易出错,因为我必须记住为所有这些对象注入所有这些对象,这比听起来更难.
必须有一个更好的方法,我希望你能够对它有所了解.
Java JCR API定义了一种持久性机制,可用于替换RDBMS的许多传统角色.例如,JackRabbit - JCR参考实现 - 支持事务,SQL查询,对象内容映射等.
您可以选择一个或另一个,将二进制数据存储在RDBMS中的BLOB /文件系统指针或JCR节点属性中的文本数据中.有没有人有经验取代抛弃他们的数据库而转向JCR?
您可以使用两者,可能在CR中存储二进制数据,在RDBMS中存储文本数据,但是您必须表达系统之间的关系,保持它们同步等等.您也开始面对一个难题,"它感觉正确用文档的二进制数据存储这个文档标题,所以我将它作为一个节点属性...但是我在我的数据库中有这个文档记录所以也许我应该把它保存在那里......"
你是如何决定的?
Pragmatic Programmer的一章建议将黑板/基于空间的架构+规则引擎视为传统工作流系统的更灵活的替代方案.
我正在研究的项目目前使用工作流引擎,但我想评估替代方案.我真的觉得SBA可以更好地解决我们的业务问题,但我担心完全缺乏社区支持/用户群/供应商/选项.
JavaSpaces已经死了,JINI剥离Apache River似乎是生命支持.SemiSpace看起来很完美,但它是一个单人秀.唯一可行的解决方案似乎是GigaSpaces.
我想听听您对基于空间的体系结构的看法以及您在实际实现中所拥有的任何经验.
很清楚如何创建一个从URL正则表达式调度的URLPattern:
(r'^books/$', books),
Run Code Online (Sandbox Code Playgroud)
这里的书可以根据要求的方法,还派遣:
def books(request):
if request.method == 'POST':
...
else:
...
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种惯用的方法在URLPattern中包含请求方法,将所有调度/路由信息保存在一个位置,例如:
(r'^books/$', GET, retrieve-book),
(r'^books/$', POST, update-books),
(r'^books/$', PUT, create-books),
Run Code Online (Sandbox Code Playgroud) java ×5
clojure ×3
java-ee ×2
agents ×1
aop ×1
architecture ×1
coercion ×1
django ×1
django-urls ×1
eclipse ×1
httpsession ×1
jcr ×1
jsp ×1
map ×1
maven ×1
persistence ×1
python ×1
rdbms ×1
rule-engine ×1
sequences ×1
servlets ×1
session ×1
spring ×1
spring-aop ×1
tomcat ×1
types ×1
workflow ×1