小编Jac*_*erk的帖子

ActiveMQ和嵌入式代理

编辑:改述问题:

我想使用ActiveMQ作为我的服务器和客户端应用程序之间的信使服务.

我试图在服务器中设置一个嵌入式代理(即不是一个单独的进程)来处理生成的消息供我的客户端使用.此队列是持久的.

经纪人初始化如下:

BrokerService broker = new BrokerService();
KahaPersistenceAdapter adaptor = new KahaPersistenceAdapter();
adaptor.setDirectory(new File("activemq"));
broker.setPersistenceAdapter(adaptor);
broker.setUseJmx(true);
broker.addConnector("tcp://localhost:61616");
broker.start();
Run Code Online (Sandbox Code Playgroud)

经过修修补补后,我最终得到的服务器部分是:

public static class HelloWorldProducer implements Runnable {
    public void run() {
        try {
            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost"); // apparently the vm part is all i need
            Connection connection = connectionFactory.createConnection(); 
            connection.start();
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            Destination destination = session.createQueue("TEST.FOO");
            MessageProducer producer = session.createProducer(destination);
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
            String text = "Hello world! From: " + Thread.currentThread().getName() + " : " …
Run Code Online (Sandbox Code Playgroud)

java activemq-classic jms

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

检查字节数组是否都在0xff中

是否有一种简单的方法可以在不循环的情况下检查java中的字节数是否全部为0xFF作为值?

byte[] b = new byte[]{ 0xff, 0xff, 0xff, 0xff, 0xff };

if (b is all 'ff')
    process?
Run Code Online (Sandbox Code Playgroud)

java arrays byte

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

文件和代码中的Hibernate配置

对不起,如果这似乎重复 - 但其他帖子的答案没有帮助.我正在开发一个应用程序,其中数据库详细信息存储在其他地方,我必须从这个标准位置读取它.我在我的程序根目录中有hibernate.properties和hibernate.cfg.xml文件,我还有以下配置,这是在programmaticaly中设置的(这些值是硬编码的,直到我让它工作......):

Configuration configuration = new Configuration().configure();

configuration.setProperty("hibernate.connection.driver_class", "oracle.jdbc.pOracleDriver");
configuration.setProperty("hibernate.connection.url", "jdbc:oracle:thin:@dte_datalayer:1521:DTE");
configuration.setProperty("hibernate.connection.username", "testuser");
configuration.setProperty("hibernate.connection.password", "testpass");

SessionFactory sessionFactory = configuration.buildSessionFactory(new ServiceRegistryBuilder().buildServiceRegistry());
Run Code Online (Sandbox Code Playgroud)

(请注意,其他设置(如dialect)存储在hibernate.properties文件中.)

据我了解,configure()会加载默认的属性/映射吗?我的"setProperty()"语句将覆盖标准设置,对吗?

但是,我得到的行为如下:如果我将所有配置放在hibernate.properties中,它可以正常工作(即hibernate选择属性文件).如果我只在代码中输入用户名和密码,则会因"user/pass"无效而失败.好像我以编程方式设置的属性总是被忽略.您可以猜测,如果我将细节放在两个位置,则使用配置文件中的设置.

我想要的是我以编程方式设置的设置必须覆盖属性文件中的任何设置.

有任何想法吗?


更新:我在两个地方添加了用户/通行证.该文件被称为"set-in-file",代码被称为"set-in-code".然后我在创建SessionFactory之前添加了一个System.out.println()...我得到了这个(部分剪辑):

java.runtime.name = Java(TM)SE运行时环境,hibernate.connection.password = set-in-code,hibernate.cache.provider_class = org.hibernate.cache.NoCacheProvider,sun.boot.library.path =/usr /lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64,java.vm.version = 20.1-b02,hibernate.connection.username = testuser,....

这意味着代码中的设置被处理......但是,由于某种原因被忽略了......

java hibernate

7
推荐指数
1
解决办法
5819
查看次数

通过 Maven 构建具有不同 JDK 版本的 JAR

我们目前正忙于升级到 Java 1.7。不幸的是,随着这些事情的发展,许多应用程序无法在 1.7 下编译并中断(即使覆盖标志传递给 1.7)。计划是尽快重新考虑这些因素。

我想以这样一种方式配置 Maven,即可以根据 POM 中的某些属性使用不同的 JDK。我跟着http://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html来信,但无论我做什么,maven 都会忽略 POM 中指定的 java .

POM 具有以下条目:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <fork>true</fork>
                <source>1.6</source>
                <target>1.6</target>
                <compiler-version>1.6</compiler-version>
                <executable>/usr/lib/jvm/java-6-openjdk/bin/javac</executable> 
                <debug>true</debug>
                <verbose>true</verbose>
            </configuration>
        </plugin>
...
Run Code Online (Sandbox Code Playgroud)

此外,我没有从“详细”标志中得到任何输出——我觉得这很奇怪。也许以上完全被忽略了?

编辑:我知道它不起作用,因为检查 META-INF/MANIFEST.MF 文件显示不正确的 Java 版本。使用的版本与当前路径中的 javac 对应。

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: jaco
Build-Jdk: 1.7.0_147-icedtea
Implementation-Title: xxx
Implementation-Vendor: xxx
Implementation-Version: 1.3.7
Specification-Title: xxx
Specification-Vendor: xxx
Specification-Version: 1.3.7
Run Code Online (Sandbox Code Playgroud)

编辑:还有一些很有趣的东西。如果我故意破坏 中的文件引用,我会得到:

[INFO] Compilation failure
Failure executing javac,  but could not …
Run Code Online (Sandbox Code Playgroud)

java maven

6
推荐指数
1
解决办法
5103
查看次数

Java构造函数模式

我使用的模式非常多:

class Blah
  int a;   
  double b;   
  String c;   
  Date d;   

  public Blah(int a, double b, String c, Date d) {
      super(); // possibly   
      this.a = a;   
      this.b = b;
      this.c = c;
      this.d = d;
  }
Run Code Online (Sandbox Code Playgroud)

对于这么简单的事情来说,这确实是一个很大的样板.我正在考虑一个通用的对象工厂用内省来做这件事,但这感觉非常邪恶(特殊情况,继承和速度问题).可以使用Guice并完全跳过构造函数,但是手动创建对象会很难看.

这是我将不得不在Java中使用的东西,还是有办法避免这种样板?

java guice

6
推荐指数
1
解决办法
317
查看次数

意外的Java性能

我刚刚抛出了所有关于Java优化的知识.我有以下任务:

给定表示比赛场地和场地位置的2D数组,填充另一个数组,其中包含玩家可以进入该区域中每个其他位置的步数.玩家可以向上,向下,向左和向右移动.例如,第一个邻居将全部为1,对角线全部为2.

对于第一次尝试,我尝试了一种简单的4向Floodfill算法.它的速度非常慢.

其次,我决定摆脱递归并使用一个简单的队列.它工作得很好,速度很快(非常大约20倍).这是代码:

private void fillCounterArray(int[] counters, int position) {
    Queue<Integer> queue = new ArrayDeque<Integer>(900);

    // Obtain the possible destinations from position, check the valid ones
    // and add it the stack.
    int[] destination = board.getPossibleDestinations(position);
    for (int i = 0; i < destination.length; i++) {
        if (board.getBoard()[destination[i]] == Board.CLEAR) {
            counters[destination[i]] = 1;
            queue.add(destination[i]);
        }
    }

    // Now fill up the space.
    while (!queue.isEmpty()) {
        int pos = queue.remove();
        int steps = counters[pos];            
        destination = board.getPossibleDestinations(pos);
        for (int …
Run Code Online (Sandbox Code Playgroud)

java performance

5
推荐指数
1
解决办法
199
查看次数

Java中的流程/工作流程

我有一个我需要进行的具体项目,在我迈出第一步之前,我希望得到大师的一些指导.

我们有许多应用程序接收来自某些外部源(即文件,XML-RPC,Web服务等)的输入,然后以某种方式处理它,应用规则,与其他外部系统(可能)通信,访问一个数据库(可能),然后发回一个响应.我们维护同一应用程序的不同版本,以满足客户之间的所有细微差别.(是的,是的,我知道.这太糟糕了,这就是为什么我要解决它......)

我正在使用的想法是拥有一个基于组件的架构,其中不同的组件可以通过配置连接在一起,并且信息流通过业务规则来管理.实质上,它必须能够为每个客户端提供一组具有不同配置的程序副本.我甚至梦想着一个基于GUI的应用程序,其中系统可以以VB风格的拖放方式连接在一起.

现在,上面的声音肯定是以前做过的事情......而且我不想重新发明轮子.问题是上面必须能够处理大量的实时事务,所以我不确定像BPEL这样的东西是否是正确的选择.

在我去制造车轮之前的任何建议?

java

5
推荐指数
1
解决办法
752
查看次数

使用Web服务时找不到LocalTransportSender

我不是Web服务的忠实粉丝,但有时您必须遵循客户端界面.我已经成功地从提供的WSDL生成代码,但是当我尝试运行实际使用生成的类的应用程序时,我得到以下内容:

java.lang.ClassNotFoundException: org.apache.axis2.transport.local.LocalTransportSender
Run Code Online (Sandbox Code Playgroud)

我将生成的代码保存在一个单独的项目中,并在我的pom中具有以下依赖项:

<dependencies>
  <dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-adb</artifactId>
    <version>1.6.1</version>
    <scope>compile</scope>
  </dependency>
  <dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-kernel</artifactId>
    <version>1.6.1</version>
    <scope>compile</scope>
  </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

如上所述,jar生成没有任何问题,但当它在应用程序中包含使用它时,我得到了所述异常.

有任何想法吗?

java web-services

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

这是一个有效的HTTP get请求吗?

我正在与一个向我们的应用程序发送HTTP-GET请求的系统集成.使用Jetty,花了几分钟时间把东西打成一团.

我用curl测试它(在请求中有必要的逃逸)并且一切都很美好.我按要求回复了回复:

$ curl http://localhost:9100?field1=value1\&field2=value2\&field3=value3
Run Code Online (Sandbox Code Playgroud)

计算机上的TCP转储显示通过以下方式发出的请求:

GET /?field1=value1&field2=value2&field3=value3 HTTP/1.1
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.1.0 zlib/1.2.3    libidn/1.18 libssh2/1.2.2
Host: xxx.xxx.xxx.xxx:9100
Accept: */*
Run Code Online (Sandbox Code Playgroud)

然而,生活从未如此简单.当我部署它以便我们实际上可以开始与真实系统集成时,我的代码中的处理程序甚至都没有被调用.Jetty立即回应"HTTP/1.1 400 Bad Request".TCP转储显示以下内容:

GET ?field1=value1&field2=value2&field3=value3 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

就是这样......没有标题信息,就像上面那样.

我现在的问题是上面的请求是否真的有效.是否需要斜线?是否必须使用任何标题条目?

有任何想法吗?这是否意味着我必须重新设计轮子以使其工作?


编辑:

我尝试使用telnet进行连接.在GET请求某些Web服务器之后,似乎确实需要/.但是,似乎它们之间的处理方式不同.Jetty抱怨说,谷歌运行的网络服务器抱怨...但是Apache是​​一个很好的例子.似乎不需要任何标题信息.

java http

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

PySpark 中的 Python 字典查找

在 PySpark 中遇到以下问题。我有一本 Python 字典,如下所示:

COUNTRY_MAP = {
    "AND": "AD", "ARE": "AE", "AFG": "AF", "ATG": "AG", "AIA": "AI", ... };
Run Code Online (Sandbox Code Playgroud)

我现在想要建立一个由 3 列组成的值,例如 value1、value2 和 value3。问题是 value3 需要使用上面的查找将 3 字母代码转换为 2 字母代码,如果不存在,则应使用“NONE”,即

from pyspark.sql import functions as sf

combined = sf.trim(sf.concat(sf.col("value1"), sf.lit(":"), sf.col("value2"), sf.lit(":"),
                                 sf.coalesce(sf.col("value3"), "NONE")))

tmp = (df.withColumn('COMBINED_FIELD', combined)
       ...<other stuff>
       )
Run Code Online (Sandbox Code Playgroud)

这给了我像“abc:4545:AND”、“def:7789:ARE”和“ghi:1122:NONE”这样的值。我现在需要:“abc:4545:AD”、“def:7789:AE”和“ghi:1122:NONE”。

作为 PySpark 的新手,我真的很难让它发挥作用。你知道吗?

pyspark

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