小编Rob*_*ell的帖子

当我在构建时使用配置文件填充属性文件时,如何在Eclipse中运行Maven webapp?

以下是我的POM中的示例配置文件:

    <profiles>
    <profile>
        <id>QA</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <jdbc.url>jdbc:mysql://127.0.0.1:3306/SomeDB</jdbc.url>
            <jdbc.username>webapp</jdbc.username>
            <jdbc.password>somepassword</jdbc.password>
        </properties>
    </profile>
    ...
Run Code Online (Sandbox Code Playgroud)

然后我在我的资源文件夹中有一个属性文件,如下所示:

jdbc.url = ${jdbc.url}
jdbc.username = ${jdbc.username}
jdbc.password = ${jdbc.password}
Run Code Online (Sandbox Code Playgroud)

最后我在我的POM中打开过滤:

    <build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    ...
Run Code Online (Sandbox Code Playgroud)

这实际上是一个简化的例子,但你明白了.基本上我跑的时候

mvn install -P QA

Maven将过滤我的app.properties文件,用配置文件中保存的值替换所有占位符,并部署填充的属性文件.

所有这一切的问题在于我喜欢在Eclipse中使用Servers机制,我在IDE中运行Tomcat.我的项目在这个实例中运行,Eclipse负责更新,重新部署等.然而,在IDE中部署期间,Maven被排除在外,并且此属性文件永远不会正确填充.

那么,如何在IDE中继续运行我的项目,但是是否已正确填充此属性文件?

java eclipse maven-2

13
推荐指数
1
解决办法
8623
查看次数

如何使用Apache POI 3.5中的新OOXML支持从DOCX文件中提取纯文本?

2009年9月28日,Apache POI项目发布了3.5版本,正式支持Office 2007中引入的OOXML格式,如DOCX和XLSX.

请提供一个代码示例,用于以纯文本格式提取DOCX文件的内容,忽略任何样式或格式.

我问这个是因为我无法找到任何覆盖新OOXML支持的Apache POI示例.

docx openxml xlsx apache-poi

13
推荐指数
2
解决办法
1万
查看次数

为什么Eclipse无法解析spring-dwr架构?

Eclipse在我的Spring的applicationContext.xml中显示以下错误:

cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dwr:configuration'.   myappservlet-servlet.xml    MyApp/src/main/webapp/WEB-INF   line 23 XML Problem
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dwr:controller'.  myappservlet-servlet.xml    MyApp/src/main/webapp/WEB-INF   line 21 XML Problem
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dwr:remote'.  myappservlet-servlet.xml    MyApp/src/main/webapp/WEB-INF   line 41 XML Problem
Run Code Online (Sandbox Code Playgroud)

当我将鼠标悬停在订单项错误上时,它还会说:

    - schema_reference.4: Failed to read schema document 'http://www.directwebremoting.org/
 schema/spring-dwr-3.0.xsd', because 1) could not …
Run Code Online (Sandbox Code Playgroud)

xml eclipse schema spring dwr

12
推荐指数
1
解决办法
2万
查看次数

如何获取Ant中我的basedir路径中最后一个文件夹的名称?

假设我的basedir = c:/projects/myapp/1.2

如何在物业中获得"1.2"?

ant

12
推荐指数
1
解决办法
6473
查看次数

如何在JPA中更改实体类型?

在我的具体案例中,我正在使用一个鉴别器列策略.这意味着我的JPA实现(Hibernate)创建了一个带有特殊DTYPE列的用户表.此列包含实体的类名.例如,我的users表可以包含TrialUserPayingUser的子类.这些类名称将位于DTYPE列中,以便当EntityManager从数据库加载实体时,它知道要实例化的类的类型.

我尝试过两种转换实体类型的方法,两种方式都像脏黑客一样:

  1. 使用本机查询手动对列执行UPDATE,更改其值.这适用于属性约束相似的实体.
  2. 创建目标类型的新实体,执行BeanUtils.copyProperties()调用以移动属性,保存新实体,然后调用命名查询,该查询手动将旧Id替换为旧Id,以便所有外键约束维持.

#1的问题是当您手动更改此列时,JPA不知道如何刷新/重新附加此实体到持久性上下文.它需要一个TrialUser ID为1234,而不是一个PayingUser ID为1234它失败了.在这里,我可以做一个EntityManager.clear()并分离所有实体/清除Per.上下文,但由于这是一个Service bean,它将擦除系统所有用户的挂起更改.

#2的问题在于,当您删除TrialUser时,您设置为Cascade = ALL的所有属性也将被删除.这很糟糕,因为您只是尝试交换其他用户,而不是删除所有扩展对象图.

更新1:#2的问题使我几乎无法使用,所以我放弃了尝试让它工作.更优雅的黑客肯定是#1,我在这方面取得了一些进展.关键是首先获得对底层Hibernate Session的引用(如果您使用Hibernate作为JPA实现)并调用Session.evict(user)方法从持久性上下文中仅删除该单个对象.不幸的是,没有纯粹的JPA支持.以下是一些示例代码:

  // Make sure we save any pending changes
  user = saveUser(user);

  // Remove the User instance from the persistence context
  final Session session = (Session) entityManager.getDelegate();
  session.evict(user);

  // Update the DTYPE
  final String sqlString = "update user set user.DTYPE = '" + targetClass.getSimpleName() + "' where user.id = …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa transactions entitymanager

10
推荐指数
1
解决办法
1万
查看次数

为什么Spring的@Configurable有时可以工作,有时候不工作?

我正在尝试通过Spring的@Configurable注释w/@Resource在需要注入的字段上使用自动依赖注入.这涉及一些设置,比如将spring-agent.jar传递给我的JVM.有关详细信息,请参见此处.

它主要起作用.当我的Tomcat启动时,我看到AspectJ init消息,我的User对象自动获取FileService引用等.

问题是有时它不会发生.它似乎是完全随机的; 有时我启动并且不会注入依赖项,有时它们是.我以前遇到过@Transactional在我的用户上的问题,因为它造成了冲突,我相信代理.我正在使用JPA,因此我的用户标有@Entity,所以我现在最好的猜测是这会产生冲突.我读过你不能自动代理代理.为了抵消冲突,我在网上找到了一些关于排除CGLIBjavassist的注释,这些注释是Hibernate(我的JPA impl)使用的.

线索:

  • 这是全有或全无.我的所有@Configurable实例都已注入,或者都没有注入.
  • 从数据库重新加载(重新实例化)实体似乎没有帮助; 它要么工作要么不工作.
  • 重新启动Tomcat任何时间也都不会修复它.唯一似乎再次掷骰子的是重新部署.换句话说,如果我重新部署它可能会起作用.

我怎么能弄清楚出了什么问题?是否有人使用@Configurable和JPA?为什么我的dependencyCheck = true在没有实际注入依赖项时抛出错误?

实体

@Entity
@Configurable(dependencyCheck = true)
@NamedQueries( { @NamedQuery(name = "User.findAll", query = "SELECT user FROM User user"),
    @NamedQuery(name = "User.findByEmail", query = "SELECT user FROM User user WHERE user.email = :email") })
public abstract class User extends BaseModel {

private static final long serialVersionUID = 7881431079061750040L;

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;

@Column(unique = true, nullable = …
Run Code Online (Sandbox Code Playgroud)

java spring annotations dependency-injection jpa

10
推荐指数
1
解决办法
1万
查看次数

学习如何避免OOP中的副作用和状态的最佳资源是什么?

我最近一直在玩函数式编程,关于副作用的主题有很好的处理方法,为什么要包含它们等等.在使用OOP的项目中,我正在寻找一些资源来规划一些策略.最小化副作用和/或状态.

一个很好的例子是RESTful Web Services一书,它为您提供了最小化Web应用程序状态的策略.还存在其他什么?

请记住,我不是在寻找另一个OOP分析师/设计模式书(尽管良好的封装和松耦合有助于避免副作用),而是主题本身就是状态/副作用的资源.

一些汇编的答案

  • 主要关心状态的OOP程序员因并发而这样做,因此请阅读Java Concurrency in Practice.[ 正是我所寻找的]
  • 使用TDD使副作用更明显[我喜欢它,例如:你的setUps越大,运行测试所需的状态就越多=好警告]
  • 命令查询分离 [好东西,防止更改函数参数的副作用,这通常令人困惑]
  • 方法只做一件事,如果他们改变对象的状态,可能会使用描述性名称,因此它很简单明了.
  • 使对象不可变 [我真的很喜欢这个]
  • 将值作为参数传递,而不是将它们存储在成员变量中.[我不联系这个; 它混乱了功能原型,并且被"清洁代码"和其他书籍积极劝阻,尽管我承认它有助于国家问题]
  • 重新计算值而不是存储和更新它们[我也非常喜欢这个; 我在应用程序中处理性能是一个小问题]
  • 同样,如果可以避免,请不要复制状态.让一个对象负责保留它并让其他人访问它.[基本OOP原则,好建议]

state side-effects

10
推荐指数
2
解决办法
2015
查看次数

你在变量名中使用文章吗?

编辑:似乎至少有两个有效的理由说明为什么Smalltalkers这样做(在消息链接和范围界定问题期间的可读性)但是问题可能会保持更长时间以解决一般用法问题.

原文:由于我早已忘记的原因,我从不在变量名中使用文章.例如:

aPerson,theCar,anObject

我想我觉得文章用无意义的信息弄脏了名字.当我看到使用这个约定的同事的代码时,我的血压会略微上升哦.

最近我开始学习Smalltalk,主要是因为我想学习Martin Fowler,Kent Beck以及其他许多伟大成长和喜爱的语言.

然而,我注意到,Smalltalkers似乎在变量名中广泛使用不定冠词(a,an).一个很好的例子是在下面的Setter方法中:

name: aName address: anAddress.
     self name: aName.
     self address: anAddress
Run Code Online (Sandbox Code Playgroud)

这使我重新考虑我的立场.如果一个像Smalltalkers一样受到极大尊重和影响的社区已广泛采用变量命名的文章,那么可能有充分的理由.

你用它吗?为什么或者为什么不?

coding-style smalltalk

9
推荐指数
3
解决办法
1740
查看次数

故障排除一致"SQLException:超出锁定等待超时"

我有一个运行Quartz 1.6.1 w/persistent job store的应用程序,MySQL 5.1作为DB.这个应用程序用于在Tomcat6中启动.在某些时候,它开始在每次启动时抛出以下异常:

- MisfireHandler: Error handling misfires: Failure obtaining db row lock: Lock wait timeout exceeded; try restarting transaction
org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Lock wait timeout exceeded; try restarting transaction [See nested exception: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction]
    at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:112)
    at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:112)
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.doRecoverMisfires(JobStoreSupport.java:3075)
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.manage(JobStoreSupport.java:3838)
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.run(JobStoreSupport.java:3858)
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
    at …
Run Code Online (Sandbox Code Playgroud)

mysql locking transactions jdbc quartz-scheduler

9
推荐指数
1
解决办法
1万
查看次数

在SCM中正确使用标签

我的同事和我正在讨论发布/ SCM系统中标签的价值和用法.我们期待StackOverflow社区提出他们的想法,以帮助我们解决问题.

一方声称标签是发布管理的有价值的补充.它们的一个使用示例:我们做了一个Maven版本,它发布了一个新的Tag(称之为1.0),这是用于此版本的代码快照.此标记应为READONLY分支.当需要修复bug时,我们可以将Tag的副本复制到一个新的分支中(称之为1.1).错误修复去那里.这些修复程序可能会合并回Trunk,以便主dev分支获取错误修复程序.最后,1.1发布并自动创建Tag 1.1.这个循环继续.Tag的主要好处是,如果您因任何原因需要重新发布版本1.0,您可以放心发布Tag 1.0,并确信它从未被任何人更改过.另外,说"Release Tag 1.0"比说"发布版本1的分支1.0是没有修复的原始1.0"更清晰.

另一方声称标签没有提供任何有价值的好处,特别是在像Subversion这样具有全局修订的系统中,这些系统就像CVS中的标签一样.另外,Subversion仅在提交标签时发出警告; 它实际上并没有阻止它.他们的方法是在Trunk中开发,一旦发布,你就会创建一个名为1.0的Branch.您将继续在Trunk中修复错误,如果您需要将这些错误修复重新发布到生产中,您可以将它们合并到1.0 Branch并重新发布1.0.在某些时候,也许在Trunk中的主要修复或功能之后,您将发布并创建Branch 1.1.循环继续.如果您需要发布原始1.0版本,则必须查看Branch 1.0版本1.

显然这两种方法都有效.我想听听社区对哪种方法首选以及为什么这样做的想法.

编辑:我有点担心"最佳"方式取决于底层的SCM系统.要么在Subversion上找到答案,要么尽可能保持SCM不可知.

version-control release-management

8
推荐指数
1
解决办法
1836
查看次数