2011-09-30 15 views
14

में एक अलग जार से एक सेम इंजेक्शन मेरे पास दो जार ए और बी जहां एक बीवेल्ड

पर निर्भर करता है

जार बी एकल वर्ग है:, और अधिक स्पष्ट

@ApplicationScoped 
public class MyManagedBean { 

private String user; 

public MyManagedBean(){ 
    //Constructor necesary for CDI 
} 

@Inject 
public MyManagedBean(@Named("user") String user){ 
    this.user = user; 
} 

... 
} 

जार ए (एक

@ApplicationScoped 
public class AnotherManagedBean { 

public AnotherManagedBean(){ 
    //Constructor necesary for CDI 
} 

@Inject 
public AnotherManagedBean(MyManagedBean bean){ 
    ... 
} 
} 

और एक @Produces विधि के साथ एक विन्यास सेम:

@ApplicationScoped 
public class ConfigurationBean { 

public ConfigurationBean(){ 
    //Constructor necesary for CDI 
} 

@Produces 
@Named("user") 
public String getUser(){ 
    return "myUser"; 
} 
} 
EJB जार) एक सेम है

हालांकि, जब मैं दोनों जार मैं इस अपवाद हो रही है के साथ एक कान की तैनाती:

SEVERE: Exception while loading the app : WELD-001408 Unsatisfied dependencies for type [String] with qualifiers [@Named] at injection point [[parameter 1] of [constructor] @Inject public com.example.MyManagedBean(String)] 
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [String] with qualifiers [@Named] at injection point [[parameter 1] of [constructor] @Inject public com.example.MyManagedBean(String)] 
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:270) 
    at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:106) 
    at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:129) 
    at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:351) 
    at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:336) 
    at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:396) 
    at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:190) 
    at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:128) 
    at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:306) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:462) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240) 
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:382) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1064) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1244) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1232) 
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:459) 
    at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:209) 
    at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168) 
    at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:238) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:662) 

किसी भी विचार?

धन्यवाद

+0

मेरा मानना ​​है कि यह आपकी समस्या http://stackoverflow.com/a/5704973/569051 –

+0

को सही जवाब है मैं ठीक उसी समस्या अगर आप एक समाधान खोजने मुझे पता है की है। –

उत्तर

25

सुनिश्चित करें कि दोनों जार "सेम अभिलेखागार" हैं - यानी वे META-INF/beans.xml

+2

हां, दोनों जारों में मेटा-आईएनएफ/बीन्स.एक्सएमएल – narduk

+2

है, यह निश्चित रूप से मेरी समस्या का समाधान करता है, धन्यवाद! –

0

एक बात, आप के लिए वास्तव में कौन-इंजेक्शन दायरे में लेना चाहिए Qulifier एनोटेशन बनाना होगा।

@Qualifier 
@Retention(RUNTIME) 
@Target({METHOD, FIELD, PARAMETER, TYPE}) 
public @interface UserConfiguration { } 

और फिर ..

@Produces 
@UserConfiguration 
@Named("user") 
public String getUser(){ 
    return "myUser"; 
} 
इंजेक्शन के लिए

..

@Inject 
public MyManagedBean(@UserConfiguration String user){ 
    this.user = user; 
} 

भी http://docs.jboss.org/weld/reference/1.1.0.Final/en-US/html_single/#d0e1355

+2

एक योग्यता एनोटेशन के बिना, इसमें @Default क्वालीफायर होना चाहिए ... है ना? – narduk

2

मैं इस सटीक एक ही समस्या हो रही थी और मैं इसे प्राप्त करने में सक्षम था देखना पता लगाया लेकिन मैं जार गठबंधन करने के लिए एक कान का उपयोग करें।

कान लेआउट

project.ear 
|-- META-INF 
|  |-- MANIFEST.MF 
|  |-- application.xml* 
|-- one.jar (bean archive) 
|  |-- META-INF 
|  |  |-- beans.xml 
|  |-- <code> 
|-- two.jar (ejb) 
  • application.xml

<application> 
    <display-name>test-application</display-name> 
    <module> 
    <ejb>two.jar</ejb> 
    </module> 
    <module> 
    <java>one.jar</java> 
    </module> 
</application> 

कर कि यह कंटेनर में two.jar के लिए उपलब्ध one.jar बनाया ।

-kurt