虽然我有一个指定版本18的<dependencyManagement>部分,但是Maven正在转移guava版本16.
快速摘要:
gwizard-example 依赖于取决于 gwizard-configgwizard-config 有一个父母pom, gwizard-parentgwizard-parent 有<dependencyManagement>,它指定了番石榴的第18版值得庆幸的是这是一个开源项目,所以你可以直接看到poms:gwizard-parent,gwizard-config,gwizard-example.但是,这里有重要的一点gwizard-parent:
<properties>
<guava.version>18.0</guava.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)
...和gwizard-example中声明的简单依赖:
<properties>
<gwizard.version>0.5</gwizard.version>
</properties>
<dependencies>
<dependency>
<groupId>org.gwizard</groupId>
<artifactId>gwizard-config</artifactId>
<version>${gwizard.version}</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
gwizard-config的依赖树正确显示了番石榴18:
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ gwizard-config ---
[INFO] org.gwizard:gwizard-config:jar:0.5
[INFO] +- com.google.inject:guice:jar:4.0-beta5:compile
[INFO] | \- com.google.guava:guava:jar:18.0:compile
Run Code Online (Sandbox Code Playgroud)
但是,gwizard-example的依赖树显示了guava 16(导致问题):
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ gwizard-example ---
[INFO] org.gwizard:gwizard-example:jar:1.0-SNAPSHOT
[INFO] +- org.gwizard:gwizard-config:jar:0.5:compile
[INFO] | +- com.google.inject:guice:jar:4.0-beta5:compile
[INFO] …Run Code Online (Sandbox Code Playgroud) 是否有特定的设计模式描述了提供非抽象默认实现的场景,该实现使用空的NO-OP实现实现接口上的所有或部分方法.这样做的目的是减轻子类的负担,实现他们自己可能不需要/使用的方法:
public interface MyInterface {
public void doThis();
public void doThat();
public void done();
}
public class MyClass implements MyInterface {
public void doThis() {
// NO-OP
}
public void doThat() {
// NO-OP
}
public void done() {
// Some standard implementation
}
}
public class MuSubClass extends MyClass {
public void doThat() {
// Subclass only cares about doThat()
}
}
Run Code Online (Sandbox Code Playgroud)
我已经看到过这种模式多次使用,包括SAX框架中的Java的DefaultHandler和MouseAdapter.在某些情况下,这些类被命名为Adapters,但我的印象是适配器模式在两个不同的接口之间进行转换.
鉴于在这些实例中只有一个声明的接口被转换为该接口的未定义子集 - 我不清楚这是如何在适配器模式的精神.
此外,我不太明白这是如何遵循NullObject模式的,因为某些方法可能有一个实现,而NullObject传统上是一个单例.
design-patterns adapter null-object-pattern solid-principles interface-segregation-principle
我在遗留环境中工作,其中LDAP服务器仅用于身份验证并且不包含任何角色,并且对包含用户角色映射但没有密码的数据库进行授权.
我的计划是通过扩展JNDIRealm来实现一个新的Tomcat领域,并重写角色方法来调用封装的JDBCRealm.
我的领域在server.xml中声明:
<Realm className="com.example.LdapJdbcRealm"
connectionURL="ldap://ldaphost:389"
resourceName="LDAP Auth"
userPattern="uid={0}, ou=Portal, dc=example, dc=com"
dbConnectionURL="jdbc:oracle:thin:@oracledb:1521:dbname"
userTable="db_user" userNameCol="user_id"
userRoleTable="db_user_role_xref" roleNameCol="role_id" />
Run Code Online (Sandbox Code Playgroud)
这是JNDIRealm和JDBCRealm的标准属性名称的组合,稍有改动,因为它们都使用connectionURL.
package com.example;
import org.apache.catalina.Realm;
import org.apache.catalina.Context;
import org.apache.catalina.deploy.SecurityConstraint;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.realm.JNDIRealm;
import org.apache.catalina.realm.JDBCRealm;
import java.security.Principal;
import java.io.IOException;
public class LdapJdbcRealm extends JNDIRealm implements Realm
{
private JDBCRealm jdbcRealm = new JDBCRealm();
protected static final String info = "com.example.LdapJdbcRealm/1.0";
protected static final String name = "LdapJdbcRealm";
public String getDbConnectionURL() {
return jdbcRealm.getConnectionURL();
}
public void setDbConnectionURL(String dbConnectionURL) {
jdbcRealm.setConnectionURL(dbConnectionURL); …Run Code Online (Sandbox Code Playgroud) 我有一个已经为JPA注释的java bean,我也希望将其存储为XML,特别是FIXML.目标是使用注释管理从bean到XML的映射.
我在网上看到有关指定模式和让JAXB生成类的相关主题,但我不想这样做.
我一直在寻找使用JAXB注释,但似乎我需要为每个子元素创建新类.我试图远离那个,让注释显示如何构建子元素.JAXB似乎不想这样做.
这有可能,怎么样?我是否需要制作自己的注释并忘记JAXB?
豆:
@Entity
@XmlRootElement(name="FIXML")
@XmlType(name="ExecRpt")
public class ExecutionReport implements Serializable {
private String account;
private String senderCompID;
@Column(name="ACCOUNT", nullable=true, length=64)
@XmlAttribute(name="Acct")
public String getAccount() {
return this.account;
}
public void setAccount(String account) {
this.account = account;
}
@Column(name="SENDER_COMP_ID", nullable=true, length=200)
@XmlAttribute(name="SID")
public String getSenderCompID() {
return this.senderCompID;
}
public void setSenderCompID(String senderCompID) {
this.senderCompID = senderCompID;
}
}
Run Code Online (Sandbox Code Playgroud)
解析:
JAXBContext context = JAXBContext.newInstance(ExecutionReport.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //pretty print XML
marshaller.marshal(executionReport, …Run Code Online (Sandbox Code Playgroud) 我使用软件SQuirreL SQL Client Version 3.2.1,我想声明变量之类的
define dateFrom = '13/04/2012';
define dateTo = '13/04/2012'
Run Code Online (Sandbox Code Playgroud)
并在我的SQL查询中使用它
SELECT * FROM table_name WHERE TRUNC(column_name) BETWEEN to_date('&dateFrom','YYYY-MM-DD') AND to_date('&dateTo','YYYY-MM-DD');
Run Code Online (Sandbox Code Playgroud)
但它不起作用.如何在SQuirreL中定义和使用变量.
我的条带帐户在测试模式下具有以下平衡:
$958,395.72
Available balance
$2,659.48
Pending balance
$3,010,474.35
Total volume (HKD)
Run Code Online (Sandbox Code Playgroud)
这笔余额以港元计算.
现在我必须以美元汇款.
如果我尝试转移4.25美元,那么它会给我以下错误:
键入:Stripe\Error\InvalidRequest
消息:Stripe帐户资金不足.在测试模式下,您可以通过创建4000 0000 0000 0077作为卡号来收取可用余额(绕过待定余额)的资金.您可以使用/ v1/balance端点查看条带余额(有关详细信息,请参阅stripe.com/docs/api#balance).
转移代码:
$check_balnace = \Stripe\Balance::retrieve();
$balanceArr = $check_balnace->__toArray(true);
$available_amount = $balanceArr['available']['0']['amount'];
echo $available_amount; // $958,395.72
$amount = 4.25*100;
$amount = 425;
\Stripe\Transfer::create(array("amount" => $amount, "currency" => "usd", "destination" => 'stripr_uid', "description" => 'test'));
Run Code Online (Sandbox Code Playgroud)
即使我有足够的平衡,为什么会发生这种错误?
看了这个问题之后,我想我想要包装ThreadLocal来添加重置行为.
我想要一个类似于ThreadLocal的东西,我可以从任何线程调用一个方法将所有值设置回相同的值.到目前为止我有这个:
public class ThreadLocalFlag {
private ThreadLocal<Boolean> flag;
private List<Boolean> allValues = new ArrayList<Boolean>();
public ThreadLocalFlag() {
flag = new ThreadLocal<Boolean>() {
@Override protected Boolean initialValue() {
Boolean value = false;
allValues.add(value);
return value;
}
};
}
public boolean get() {
return flag.get();
}
public void set(Boolean value) {
flag.set(value);
}
public void setAll(Boolean value) {
for (Boolean tlValue : allValues) {
tlValue = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我担心原语的自动装箱可能意味着我存储在列表中的副本将不会引用ThreadLocal引用的相同变量(如果我尝试设置它们).我还没有测试过这段代码,并且在我继续沿着这条路走下去之前,我正在寻找一些专家建议.
有人会问"你为什么这样做?".我正在一个框架中工作,其他线程回调到我的代码中,我没有对它们的引用.我想定期更新他们使用的ThreadLocal变量中的值,因此执行该更新需要使用该变量的线程进行更新.我只需要一种方法来通知所有这些线程他们的ThreadLocal变量是陈旧的.
我很高兴最近对这个三年前的问题有了新的批评,尽管我觉得它的语气比专业还要小.我提供的解决方案在此期间没有发生任何事故.然而,必然有更好的方法来实现提出这个问题的目标,我邀请评论家提供明显更好的答案.为此,我将尝试更清楚地解决我试图解决的问题.
正如我之前提到的,我正在使用一个框架,其中多个线程正在使用我的代码,在我的控制之外.该框架是QuickFIX/J,我正在实现Application接口.该接口定义了用于处理FIX消息的钩子,在我的使用中,框架被配置为多线程,因此可以同时处理与应用程序的每个FIX连接.
但是,QuickFIX/J框架仅为所有线程使用该接口的单个实例实例.我无法控制线程如何启动,并且每个都在为不同的连接提供不同的配置细节和其他状态.很自然地让一些经常访问但很少更新的状态存在于ThreadLocal框架启动线程后加载其初始值的各种s中. …
java ×2
adapter ×1
annotations ×1
interface-segregation-principle ×1
jaxb ×1
jdbc ×1
ldap ×1
maven ×1
maven-3 ×1
oracle ×1
payment ×1
php ×1
sql ×1
squirrel-sql ×1
thread-local ×1
tomcat ×1
xml ×1